Skip to main content

Partner Delegation Matrix

Defines what a white-label partner (typically the client's accountant or auditor) may do inside a client tenant, how that authority is granted at onboarding, and which capabilities can never be delegated.

1. Purpose​

White-label partners manage ZAYAZ on behalf of their clients through Atlas. Each client relationship needs an explicit, versioned statement of what the partner may do. This document defines:

  • the capability catalogue — the atomic things a partner can be allowed to do,
  • the delegation levels — how much authority the partner holds per capability,
  • the presets — sensible defaults so onboarding is one click for most clients,
  • the invariants — capabilities that stay with the client regardless of preset,
  • the mechanics — how the answered matrix is stored, enforced and changed.

2. Delegation levels​

LevelMeaningEnforcement
P — Partner managesPartner acts directly; client is notified.Direct write, logged.
A — Partner proposes, client approvesPartner action creates a pending change; client approves or rejects.Maker–checker workflow (§6.1).
C — Client onlyPartner has no write access. Read access governed by SHARE.PARTNER.VIEW.Denied at authorisation layer.
—Not applicable to the partner role.—

Levels are strictly ordered C < A < P. A client may always tighten (move toward C); loosening requires re-acceptance (§6.3).

3. Presets​

PresetIntended relationship
full_servicePartner runs the client's sustainability reporting end to end. Client signs off.
advisoryPartner guides and reviews; client owns methodology and content.
data_entryPartner handles bookkeeping-adjacent data only; no reporting authority.

full_service is the ceiling: the survey can only tighten from there. data_entry is the floor: its P rows are implied by the relationship existing and are not presented as questions.

4. Capability matrix​

Legend: P partner manages · A partner proposes, client approves · C client only

4.1 DATA — source data and mapping​

CodeCapabilityfull_serviceadvisorydata_entryNotes
DATA.INTEGRATIONConnect and maintain accounting / ERP integrationsPPPPartner usually holds the credentials. Floor.
DATA.UPLOADUpload source data (bills, ledgers, travel, fuel)PPPFloor.
DATA.MAPPINGMap chart of accounts to ESG categories; select emission factorsPAPAdvisory clients tend to own methodology.
DATA.SUPPLIER.REQUESTSend supplier data requests and chase responsesPACPairs with COMM.SUPPLIERS.
DATA.SUPPLIER.APPROVEApprove or reject supplier submissionsPAC

4.2 REPORT — preparation and publication​

CodeCapabilityfull_serviceadvisorydata_entryNotes
REPORT.DRAFTPrepare and edit reports (VSME, ESRS, GHG inventory)PPC
REPORT.MATERIALITYRun materiality assessment; maintain topic listAACManagement judgment — default to approval.
REPORT.CALENDARReporting calendar, deadlines, framework selectionPAC
REPORT.PUBLISHFinal approval and publicationACCNever P. Publication is a client act.
REPORT.ATTESTManagement attestations and representationsCCCInvariant.

4.3 SHARE — data leaving the tenant​

CodeCapabilityfull_serviceadvisorydata_entryNotes
SHARE.EXTERNALShare data with third parties (banks, customers, CBAM)ACCAnything leaving the tenant needs a client act.
SHARE.GRANTCreate or modify ESGX access grantsCCCInvariant. Client-owned consent by design.
SHARE.PARTNER.VIEWPartner may view all client dataPPPVisibility switch, independent of edit rights. Floor.

4.4 ACCESS — users and roles​

CodeCapabilityfull_serviceadvisorydata_entryNotes
ACCESS.CLIENT.USERSInvite / remove client staff; assign rolesPACSmall clients delegate this readily.
ACCESS.PARTNER.TEAMPartner's own team access to the tenantPPPAlways partner-side; client sees the list.
ACCESS.OWNERChange client owner / adminCCCInvariant.
CodeCapabilityfull_serviceadvisorydata_entryNotes
ACCOUNT.SUBSCRIPTIONTier, add-ons, upgradesAACPartner often initiates; client pays.
ACCOUNT.BILLINGBilling details, payment methodCCCInvariant. If the partner is the billed party this is a platform-level contract, not a survey question.
ACCOUNT.ENTITYLegal entity details, organisation structureAAC
ACCOUNT.RETENTIONData retention, export, deletionCCCInvariant.

4.6 COMM — notifications and communication​

CodeCapabilityfull_serviceadvisorydata_entryNotes
COMM.NOTIFYConfigure recipients for deadline and audit alertsPPPBoth parties may always add themselves. Floor.
COMM.SUPPLIERSPartner may contact suppliers on the client's behalfPACPairs with DATA.SUPPLIER.*.
COMM.AUDITLOGPartner may view client activity logPPPNot switchable off for the partner's own actions. Floor.

5. Invariants and floor​

5.1 Invariants — always C​

These are platform rules, not survey questions. They are shown greyed-out in the onboarding survey so the client can see what the partner cannot take.

  • REPORT.ATTEST
  • SHARE.GRANT
  • ACCESS.OWNER
  • ACCOUNT.BILLING
  • ACCOUNT.RETENTION
  • REPORT.PUBLISH may never be P (ceiling is A)

5.2 Floor — always P​

Implied by the partner relationship existing. Not presented as questions.

  • DATA.INTEGRATION
  • DATA.UPLOAD
  • SHARE.PARTNER.VIEW
  • ACCESS.PARTNER.TEAM
  • COMM.NOTIFY
  • COMM.AUDITLOG

5.3 Survey questions​

The onboarding survey asks only about rows that vary between presets, pre-filled from the selected preset:

DATA.MAPPING · DATA.SUPPLIER.REQUEST · DATA.SUPPLIER.APPROVE · REPORT.DRAFT · REPORT.MATERIALITY · REPORT.CALENDAR · REPORT.PUBLISH · SHARE.EXTERNAL · ACCESS.CLIENT.USERS · ACCOUNT.SUBSCRIPTION · ACCOUNT.ENTITY · COMM.SUPPLIERS

Twelve questions, each a three-way choice bounded by the row's ceiling.

6. Mechanics​

6.1 Maker–checker for level A​

Level A must be a real workflow, not a notification:

  1. Partner performs the action; the system records a pending_change with a structured diff, actor, timestamp and capability code.
  2. Client approver is notified in-app and by email.
  3. Client approves or rejects, optionally with a comment.
  4. Both the proposal and the decision are written to the audit log.
  5. Pending changes expire after a configurable period (default 30 days) and are recorded as expired, never silently dropped.

6.2 Storage​

The answered matrix is stored as a versioned delegation_policy document on the client tenant.

delegation_policy:
tenant_id: t_01HXYZ...
partner_id: p_01HABC...
version: 3
preset: full_service
answered_by: { actor_id: u_..., role: partner_admin, at: 2026-09-18T10:12:00Z }
accepted_by: { actor_id: u_..., role: client_owner, at: 2026-09-18T14:03:00Z }
effective_from: 2026-09-18T14:03:00Z
effective_to: null
levels:
DATA.MAPPING: P
DATA.SUPPLIER.REQUEST: P
DATA.SUPPLIER.APPROVE: P
REPORT.DRAFT: P
REPORT.MATERIALITY: A
REPORT.CALENDAR: P
REPORT.PUBLISH: A
SHARE.EXTERNAL: A
ACCESS.CLIENT.USERS: P
ACCOUNT.SUBSCRIPTION: A
ACCOUNT.ENTITY: A
COMM.SUPPLIERS: P

Invariant and floor rows are not stored; they are resolved from the platform policy at authorisation time. Every generated report, publication and external share stamps the delegation_policy.version in force.

6.3 Change control​

  • Tighten (toward C): client may change at any time from tenant settings. Takes effect immediately. Logged.
  • Loosen (toward P): either party may propose; requires acceptance by the client owner. Creates a new policy version.
  • Preset change: treated as a full re-survey with re-acceptance.
  • Partner change: a new partner relationship starts from data_entry and runs the survey from scratch; the previous policy is closed with effective_to set.
  • If the partner completes the survey on the client's behalf, accepted_by must be a client actor before the policy becomes effective. Until then the tenant operates at data_entry.

6.4 Partner-side views​

  • Per client: the effective matrix, read-only, with pending changes.
  • Rollup across the partner's book: counts per preset and per non-default row (e.g. "14 clients on full_service, 3 with REPORT.PUBLISH at C").
  • Filterable work queue of pending A items awaiting client decision.

6.5 Authorisation integration​

Each capability code maps to one or more Atlas scopes. The authorisation layer resolves effective_level(tenant, partner, capability) as:

invariant(capability)            → C
floor(capability) → P
else delegation_policy.levels[capability]

and applies:

  • P → grant write scope to partner actors.
  • A → grant propose scope; direct write denied.
  • C → deny write; read governed by SHARE.PARTNER.VIEW.

Mapping of capability codes to concrete scope names is out of scope for this document and belongs in the Atlas authorisation spec.

7. Open questions​

  • Should REPORT.MATERIALITY be allowed at P for full_service clients who explicitly opt in, given some accounting firms run it as a service?
  • Is a fourth preset (audit_only: view-everything, write-nothing) needed for assurance providers who are not the bookkeeping partner?
  • Should pending-change expiry be per capability rather than global?

8. Change log​

VersionDateChange
0.1.02026-09-18Initial draft from brainstorming session.
GitHub RepoRequest for Change (RFC)