Page not found

The page you are looking for does not exist or has moved.

Companies/New company

New company

Creates a top-level company. Its own Admins add the branches.

Cancel
Some details aren't valid. Check them and try again.

Can't be changed later.

Times for this company show in this zone.

Use 2 to 12 capital letters or digits, like ACA.

ACA is already taken by Asuransi Demo. Choose another code.

2 to 12 capital letters or digits, unique on the platform. Can't be changed later.

First Admins

Each one gets an email: a link to set a password, or a notice if they already have an account. An Insurer needs at least 2, because each Admin's changes need another Admin's approval.

Enter a valid email.

This email is already in the list.

An Insurer needs at least 2 Admins.

  • Needs platform.createOrganisation, which the Operator Role holds. Without it, Companies hides New company and /platform/companies/new shows the 404 block in the content.
  • Create company sends POST /api/platform/organisations {type, name, code, timeZone, admins: [{name, email}]} (platform.createOrganisation). In one transaction it creates the root, seeds its Roles from the type's template and invites each Admin; when anything is refused, nothing is created.
  • Roots only: Insurer, Workshop, Parts vendor or Loss adjuster, never the Platform. Type and code never change. The name and time zone are the company's own Admins' to change later; Operators don't edit a company.
  • The code is 2 to 12 of A-Z and 0-9, unique on the platform: ORGANISATION_INVALID_CODE and 409 ORGANISATION_CODE_TAKEN each mark the Code field.
  • First Admins: at least one, and two for an Insurer, whose Admins' changes need another Admin's approval (PRD Section 4.1). Fewer is 422 ORGANISATION_ADMINS_REQUIRED, shown as VALIDATION's text at the top of the form and the rule under the rows. IDENTITY_INVALID_EMAIL marks its email. The same email entered twice is caught in the form before sending, with no code of its own.
  • Each Admin gets the shared Invitation email: an Activation link for a new email, a notice for a registered one. The creation is audited as organisation.created, with one Invitation per Admin, in the new company's audit log.
  • Create company lands on the new company's panel over Companies, with a toast naming its invited Admins. Cancel and the back icon go back to Companies without creating. Progress shows on Create company only.
  • Applied from the rules: a form page with the breadcrumb "Companies / New company", the back icon beside the title, and Cancel with Create company top right, the busy twin keeping its label; the title sits outside the card. The mockup's "← Companies" link, its buttons at the card's foot and its grey "Creating…" go.
  • Applied from the rules: Create company lands on the new company's panel with the success toast. The mockup's Created card, with "Open Acme Insurance" and "Create another", goes.
  • Applied from the rules: a refusal that names a field shows on that field only: code format, code taken, invalid email and a repeated email. ORGANISATION_ADMINS_REQUIRED names no single field, so it shows VALIDATION's text at the top of the form with its own line under the rows. The mockup's top alert for a taken code goes.
  • Applied from the rules: without the key, the 404 block in the content.
  • One card at most 40rem wide: Type and Time zone side by side, then Name, the narrow Code, and First Admins, each row's remove X borderless. Below 40rem an Admin's Name and Email stack, the X at the row's right.
  • Each error replaces its field's help while it shows, as the Role editor does.
  • The code format's example is ACA, the brief's, where the mockup says ACME. Code taken names the company holding the code, as the brief words it.
  • Add another Admin and each row's X are drawn but not wired: the prototype has no hook that adds or removes a row.
  • Sample: Sinar Asuransi, SNR, an Insurer in WIB, with Bayu Saputra and Citra Lestari as its first Admins.
  • ticket #327 → comment: New company is a form page: the breadcrumb, the back icon beside the title, and Cancel with Create company top right, Create company spinning in place. Create company lands on the new company's panel with the toast "{company} is created" / "Invitations went to its {n} Admins, {names}."; the mockup's Created card goes.
  • ticket #327 → comment: a refusal that names a field shows on the field only: "Use 2 to 12 capital letters or digits, like ACA.", "{code} is already taken by {company}. Choose another code.", "Enter a valid email." and "This email is already in the list." ORGANISATION_ADMINS_REQUIRED shows "Some details aren't valid. Check them and try again." at the top of the form and "An Insurer needs at least 2 Admins." under the rows.
  • ticket #327 → comment: the code-taken text names the company holding the code, which ORGANISATION_CODE_TAKEN doesn't carry: either the error carries it, or the text drops "by {company}".
  • ticket #327 → comment: ORGANISATION_ADMINS_REQUIRED needs its errorCode catalogue entry in all four languages; main has none.
  • A new Insurer needs two first Admins (422 ORGANISATION_ADMINS_REQUIRED). PRD 4.1: "Changes need a second admin's approval." (12 Oct 2026)
  • The console opens on Companies; the Platform has no Home. New company sits under Companies in the nav. (12 Oct 2026)

From spec #322 and ticket #327; operator-console.html (New company) for the fields, help and states; main's errorCode VALIDATION text; the form page from settings-role-edit.html