Atlas Forms
Form Groups Overview
A Form Group is the organisational unit above individual forms. Every form in Atlas Forms belongs to exactly one group, identified by a FormCategoryID. Groups own a 100-ID FormID range, bind an app to its forms, and enable matrix dispatch — all without per-form configuration.
What Is a Form Group?
When a new product area joins the BizFirstGO platform, it registers a Form Group. The group declaration answers four questions:
- Who owns the forms? — The
ownerAppfield names the application responsible for these forms. - Where are the IDs? — A contiguous 100-ID range (e.g., 13000–13099) is reserved so IDs never collide across teams.
- How are forms routed? —
PrimaryUsageandNodeUsageflags drive tab routing and workflow node dispatch without per-form config. - Can AI generate forms here? — The
aiGenerationEnabledflag signals whether the AI generation pipeline is allowed to create new forms in this group.
Four Benefits
| Benefit | How |
|---|---|
| ID isolation | Each group owns a non-overlapping 100-ID range — teams work without coordinating IDs |
| Matrix dispatch | A list form dispatches to property forms by key (FormCode); no per-form route config required |
| Tab routing | PrimaryUsage maps a form to a module tab without explicit route declarations |
| AI generation scope | The AI pipeline knows exactly which forms already exist in the group and what patterns to follow |
Group ID Range Convention
Each Form Group is allocated exactly 100 consecutive FormIDs. The range start is always a multiple of 100:
GuardRails → 13000 – 13099 (FormCategoryID: 130)
NodePolicies → 14000 – 14099 (FormCategoryID: 140)
// FormCategoryID = rangeStart / 100
Pages in This Guide
| Page | Topic |
|---|---|
| Database Backing | Atlas_Forms table columns: FormCategoryID, FormTypeID, PrimaryUsage, NodeUsage |
| Current Form Groups | GuardRails, NodePolicies, and how to read existing groups |
| Group Definition Schema | The JSON contract: formGroupId, categoryId, formIdRange, aiGenerationEnabled |
| App Association | registerFormGroup(), forms[], role, primaryUsage |
| Creating a New Group | 5-step process from SQL INSERT to deploy script |
| Naming Conventions | groupId, FormCode, SQL file pattern, range assignment |
| Tenant Overrides | tenantOverrideable flag and what overrides are permitted at the group level |