Skip to content

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

  1. 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.
  2. 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.
  3. 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