Operational Controls¶
Applies to: All subscriptions
Purpose¶
Explain how to turn modules and automations on or off for a company and its registrations, and how to find out why a registration behaves the way it does.
Two rules decide everything. First, a setting's value for a registration is the first of these that exists — the GSTIN's own override, then the company's default, then the platform default. Set a control once for the company; override a single GSTIN only where it must differ. Second, a setting that is part of the customer's subscription can only be changed by a Complifly Super Admin — the customer's own administrator changes only their business policies.
Audience¶
System administrators and implementation consultants configuring a customer, and support staff diagnosing a registration.
Prerequisites¶
- To view: a role holding
admin.view— organization administrator, external auditor, or Complifly support / platform engineer. - To change: a Complifly Super Admin for any setting; an organization administrator for the customer's business policies only (see Who may change what).
- The company onboarded and its GSTINs registered — see GSTIN Access Control.
- Feature Flags for what each control does and its default.
Reference¶
Where it is¶
Admin & Logs > Operational Controls. A Super Admin, or a Complifly support or platform engineer, picks the company at the top of the screen; anyone else sees their own company only.
Who may change what¶
| Role | Customer business policies (segregation of duties; the five Invoice Generation approval and credit settings) | Subscription settings (module switches, Excel Upload, ERP Write-Back, Auto IRN, TDS, Complifly Agent, all Compass settings) | Override a safety check | View |
|---|---|---|---|---|
| Complifly Super Admin | ✅ | ✅ | ✅ with a written reason | Every company |
| Organization administrator | ✅ own company | ❌ shown as Managed by Complifly | ❌ | Own company |
| External auditor | ❌ | ❌ | ❌ | Own company |
| Complifly support / platform engineer | ❌ | ❌ | ❌ | Every company — each view recorded in that company's audit log |
The screen enables a control only if the server would accept the change from the person looking at it; the same rule is enforced at the API, for bulk changes and for removals. A refused attempt is recorded in the audit log.
Who owns each control¶
Every control has an owner class, and every control declares its effect on access. Both are shown, per control and per role, under Admin & Logs > Access > Controls, which reads the server, so it cannot promise an edit the server would refuse.
| Owner class | What it is | Who changes it today |
|---|---|---|
| Complifly: licensing | A module or entitlement you buy, or processing Complifly pays for (GSP calls, model tokens, outbound email): the module switches, Excel Upload, ERP Write-Back, Auto IRN, TDS, Complifly Agent, Compass | Complifly Super Admin only |
| Complifly: operations | A rollout or behaviour setting Complifly runs: the IRN-window rule and the staged new-screen and rule switches | Complifly Super Admin only |
| Your organisation | Your own business policy: segregation of duties and the five Invoice Generation approval and credit settings | Your Org Admin, or a Complifly Super Admin |
The split between the two Complifly classes changes no one's rights today. Both are Super-Admin-only, exactly as before. It exists so that a later decision can let a Complifly platform role run operations settings without ever touching licensing. The classification is a proposal recorded with the design; an unclassified control is treated as operations, which is the most restrictive.
| Effect on access | Meaning | Controls |
|---|---|---|
| Gates a module | Switching it off makes that module's routes refuse everyone | The module switches |
| Widens roles | Turning it a certain way gives some roles permissions they did not have | Segregation of duties |
| Narrows roles | Turning it a certain way removes access some roles had | Compass Agent access; Governance mode (Strict mode narrows who may lend rights, who may read the company, and who may assign a privileged role) |
| None | Changes behaviour or presentation, not who may act | The rest |
The summary and the badges¶
Above the four screens, five figures give the state of the company at a glance: how many GSTINs it has, how many settings it sets itself, how many GSTIN overrides exist (highlighted when there are any), how many subscription switches are on, and the last change. The overrides and last-change figures open the matching screen.
Every screen uses the same badges: GSTIN override (amber), Company (blue) and Platform (grey) say where a value comes from; Managed by Complifly and Managed by your organisation say who may change it. Each badge carries words and an icon, not colour alone.
The four screens¶
| Screen | Use it to | What you will see |
|---|---|---|
| Company Defaults | Set a control for the whole company | Every control, grouped by module. Each says whether the company has set it or is following the platform default. Reset removes the company's setting |
| GSTIN Overrides | Make one registration — or several — differ from the company | A searchable list, most overrides first, each marked Low (1–2), Medium (3–5) or High (6 or more). Open one to set or remove an override; tick several to apply one value to all of them |
| Effective View | Find out what a registration actually has, and why | Every control for one registration: the value in force, which tier set it, and a sentence saying why — including what an override replaced. Overrides are highlighted |
| Audit History | Find out who changed something | Every change for the company or for one GSTIN: when, old and new value, who, and the reason if one was given |
Notifications: who is emailed¶
If your team set up notifications and nobody is getting email, check first that Complifly has switched on email sending for your company. It is the NOTIFICATION_DISPATCH_ENABLED flag, off by default, and only a Complifly Super Admin can change it (Feature Flags). The Notifications sections below say so at the top while it is off. Your settings are saved either way.
Two of the screens above end with a Notifications section. It is not one of the controls in the lists: it decides who is emailed about Attention Center items, and it is changed only by your organization administrator (or a Complifly Super Admin). Anyone else sees a sentence saying so.
| Where | What it sets |
|---|---|
| Company Defaults > Notifications | Who is emailed for every registration of the company that has no setting of its own |
| GSTIN Overrides > open a registration > Notifications | Who is emailed about that one registration. It replaces the company's setting for it, but only to be stricter: it cannot turn on what the company has switched off |
For each event (Assigned, Escalated, Reopened, daily summary, weekly summary) choose Follow the organization (Not set up for the company), On or Off, a lowest severity, and, for a summary, the day and hour in Indian time. Named lists who else is told: people of the company, roles (looked up at the moment of sending, so someone given the role later is included), and email addresses. An email address can only be added by an organization administrator, receives nothing until its owner follows a confirmation link, and gets counts, severities and links, never a customer name or an invoice value.
Off is a hard stop, from the top down. An Off company setting stops that event on every registration of the company, and a registration cannot turn it back on (its On is greyed out and says why). An Off registration stops that registration. Nothing below can undo an Off above it, but a lower level may always be stricter. Not set up is not Off. When you switch an event to On, the list of who should be told opens straight away.
Each person also chooses for themselves in Settings & Profile > My Notifications. Their own Do not email me always works, but their Email me can never get past an Off set above them. Changes here are recorded in the audit log, not in Audit History, which is for controls. The API is in the Attention API.
What a change reaches¶
| You change | It applies to | It does not apply to |
|---|---|---|
| A company default | Every registration of the company that has no override for that control, on the next request and within 60 seconds at the latest | A registration with its own override |
| A GSTIN override | That registration only | Anything else |
| Remove a GSTIN override | That registration goes back to the company default, or the platform default | — |
| Remove a company default (Reset) | Every registration without an override goes back to the platform default | A registration with its own override |
There is no staging and no "save" step. A change applies to the next request from every user of every registration it reaches.
Controls that are company-wide only¶
Direct Tax (TDS) and the Complifly Agent have no per-GSTIN override. Neither module is organised by GSTIN — TDS works by TAN, and an agent is enrolled against the company — so they are set under Company Defaults and apply to every registration the company holds.
Segregation of duties is company-wide too. It is one decision for the company, so it has no per-GSTIN override either. A GSTIN override written before that rule is kept and still applies; GSTIN Overrides shows it as an older override that can be reset to inherited but not replaced.
Relaxing segregation of duties asks for a reason, and locks when live work starts¶
Once your company has started live work (a live IRN, a generated e-way bill or a decided approval) the row on Company Defaults says it is locked: you can still turn it on, but switching it off is a Complifly Super Admin act that needs your approval reference (SOD_LOCKED for an Org Admin). Turning it on asks you to confirm first, and tells you how many active Tax Controllers you have. See Segregation of Duties.
Switching segregation of duties off (or removing the override that kept a registration enforced) is refused until you give a written reason. It is stored with the change, shown in Audit History, written to the audit log as ACCESS_WIDENED, and emailed to the company's other Org Admins. See Segregation of Duties.
Two changes are refused until resolved¶
Most changes are enforced on the next request, and within 60 seconds at the latest (see When a Change Takes Effect). Two are refused first, because applying them silently would do damage. The refusal names every registration affected — including ones you did not select, when the change is a company default they inherit.
| Change | Why it is refused | What you can do |
|---|---|---|
| Switching the approval engine off while documents are still awaiting approval | The pending approvals would be cleared without a record and the documents would post unapproved | Clear the approvals first. Only a Complifly Super Admin can override, with a written reason — this cancels them, it never approves them |
| Switching Excel Upload or Invoice Generation on for a registration a connected ERP posts for | The same invoice could be raised twice, each with its own IRN | Usually: leave it off. For a genuine second source, a Complifly Super Admin overrides it with a written reason |
An organization administrator sees the refusal and what caused it, but no override. A Super Admin's reason is stored with the change and shown in Audit History.
When an ERP connection goes live for a registration, Excel Upload and Invoice Generation are switched off for it automatically, as a GSTIN override, unless that registration already had one. Audit History shows this with the reason "ERP connection … went live".
Configuring a new company¶
- Under Company Defaults, set the controls that differ from the platform default for this customer. Leave everything else alone — a control left unset follows the platform default and will follow any future change to it.
- Only then look at GSTIN Overrides, and only for a registration that genuinely must differ — a pilot, a services-only registration with no e-Way Bills, a small entity that needs a different value for a control that has a GSTIN tier. Segregation of duties is not one of them: it is decided for the whole company.
- Open Effective View for one or two registrations and confirm the values and their sources are what you intended.
Company onboarding follows the same rule: it creates an override for a new registration only where the choice made in the wizard differs from what that registration would inherit.
Doing it by API¶
Every screen is backed by the endpoints in Administration API — Operational Controls. To set a control for a whole company, write the company default once; do not loop over registrations.
Validation¶
| Check | Method | Pass condition |
|---|---|---|
| The change reached the registrations intended | Effective View for each | Value as set; Source is the tier you set it at |
| No unintended overrides | GSTIN Overrides list | The override count is zero except where an exception is intended |
| The change is recorded | Audit History | A row with your sign-in, the old and new value, and the reason where one was required |
| A forced change was deliberate | Audit History | The reason explains why |
Troubleshooting¶
| Symptom | Cause | Action |
|---|---|---|
| A module is on or off for one registration and nobody knows why | The value comes from one of three tiers | Effective View shows which; Audit History shows who |
| The company default was changed and one registration did not follow | That registration has its own override | GSTIN Overrides — remove it, or change it |
| A control has no override option for a GSTIN | It is company-wide only (TDS, Complifly Agent) | Set it under Company Defaults |
| Every control is read-only | The role can only view (auditor, Complifly support) | Ask the organization administrator, or Complifly for a subscription setting |
| A control is marked Managed by Complifly | It is part of the subscription | Ask your Complifly contact |
FEATURE_WRITE_NOT_PERMITTED from the API |
Same as above, for an API call | Same |
FORCE_NOT_PERMITTED |
Only a Complifly Super Admin may override a safety check | Resolve what the check reported, or ask Complifly |
| "Approvals are still in flight" | A registration the change reaches has documents awaiting approval | Clear them, or confirm with a reason |
| "This GSTIN is fed by a connected ERP" | A registration the change reaches has an active ERP connection | Leave the channel closed, or confirm with a reason |
| A value is not accepted | It is not one the control allows — the wrong option, or a number outside its range | Use a value the screen offers |
| Excel Upload or Invoice Generation went off without anyone changing it | An ERP connection went live for that registration | Expected — see Audit History |
A company default appears that nobody set, changed by MIGRATION:… |
The one-time move to company defaults promoted the company's most common value | Expected. No registration's value changed — see Operational Controls cutover |
Related Articles¶
- Feature Flags — every control, its default and its consequences
- Administration API — the endpoints behind the screens
- Platform Error Codes — every refusal a change can meet
- Segregation of Duties — the control with the most consequence
- Operational Controls cutover — moving an existing deployment to company defaults