Sarah submitted the trial form. She doesn't see it, but several things happen in a single coordinated transaction to get her company ready.
The system creates everything in one atomic transaction:
All or nothing. If any step fails, everything rolls back. No orphan records, no half-setup companies.
| Failure | What the user sees | What happens next |
|---|---|---|
| Any step fails mid-transaction | Generic error, no company created | Full rollback, user retries |
| User already exists in the system | Assigned to the new company with OWNER role | No duplicate user, proceed normally |
| Company name matches existing (different domain) | Allowed — no conflict | Companies are isolated by tenant |
| User exists but email not verified | Must verify email before accessing the dashboard | Same OTP verification flow applies |
| Trial expired and user wants another | Depends on policy — typically rejected | Contact support for extension |
| Scenario | Behavior | Why |
|---|---|---|
| Same company name, different domain | Allowed | Company names are not globally unique |
| User signed up before but never completed OTP | New invite sent, old one invalidated | Fresh start for the new trial |
| Provisioning modes differ | Self-serve: status ACTIVE with trial. Admin-provisioned: status LOCKED | Different trust levels for different entry points |
ZettaHRM
A modern HRM workspace for employee management, attendance tracking, leave approvals and structured day-to-day HR operations.