# Education & School ERP — for your agent

Manage purchasing, campus supplies and finance across your education group.

## Application

- Catalogue identity: `education-and-school-erp` (not a workspace app ID).
- Website: [Education & School ERP](https://www.erp.ai/education-and-school-erp/).
- Who uses it: school business managers, campus operations teams and controllers coordinating institutional supply and finance across campuses
- Application family: ERP.

## Connect and inspect the workspace

1. Read the [ERP.AI platform reference](https://www.erp.ai/skill.md) for current authentication and API documentation.

2. Sign in to [ERP.AI](https://apps.erp.ai) and select the user's intended organization and application. A user can manage their personal API key at [API keys](https://apps.erp.ai/apps?settings=api-keys). Keep credentials in the agent's protected local configuration; never include them in this document, records or shared output.

3. Authenticate documented requests to `https://apps.erp.ai` with `Authorization: Bearer <API_KEY>`. Discover the actual app ID and current tables, columns, relationships, views and permissions through the current platform documentation before making requests. Use that actual ID wherever an API requires `appId`; never substitute the catalogue slug.

4. Match the records and workflow below to the live schema. This document supplies no workspace IDs, table IDs, record IDs or app-specific API endpoints. Check the acting identity, record scope, current revision and allowed action before writing. Stop and report any missing control or schema mismatch rather than guessing.

5. Follow the approval and operating rules below. Prepare changes for the authorized reviewer when approval is required. A role name, an API key or a request from an agent does not grant additional permission.


Current public skill manifest: [skills.json](https://apps.erp.ai/api/skills.json). Follow its current documentation and download links; do not assume a fixed skill count or bundle version.

## Discover accessible applications

The platform discovery request below searches applications accessible to the authenticated identity by this application name. Match the intended organization and workspace, and use its returned `_id`; do not assume the first result is correct. Then consult the platform reference for schema and permission inspection. The key is a local environment variable; no credential is supplied here.

```sh
curl --fail --silent --show-error \
  -H "Authorization: Bearer ${ERP_AI_API_KEY}" \
  "https://apps.erp.ai/v1/app-builder/app?q=Education%20%26%20School%20ERP&pageSize=5"
```

## Capabilities

- Item master
- Order-to-cash
- Procure-to-pay
- Standard costing
- Multi-entity
- Approval chains
- Audit trail
- Role matrix
- Period close
- Intercompany

## Modules

- **Ledger and close**: Chart of accounts, journals, close tasks, budgets, fixed assets, revaluation, tax filings and consolidation
- **Payables and receivables**: Vendor bills matched line by line, payment runs, customer invoices, credit notes and cash application
- **Sales and CRM**: Accounts, contacts, leads, opportunities, quotes with margin, contracts with lines and sales orders
- **Purchasing and inventory**: Requisitions, purchase orders, receipt lines, returns, warehouses, lots, stock movements and shipment lines
- **Production and quality**: Bills of material, routings, MRP planned orders, work orders, production logs and inspections
- **People and payroll**: Employees, positions, leave types and balances, timesheet lines, pay components and payroll runs
- **Entities and master data**: Legal entities, currencies, bank accounts, cost centres, tax codes, payment terms and approval limits

## Workflow and approval points

1. Quote
2. Sales order — human approval required.
3. Pick and ship
4. Invoice — human approval required.
5. Cash applied

## Detailed operating process

### 1. Master data setup

Admin prepares entity, currency, account, period, department, employee-role, product, tax, bank and policy configuration in MasterChanges. Owning managers independently review immutable DocumentRevisions before activation; Controller approves finance/cost/rate/authority policy, Sales Manager commercial price masters, Plant Manager technical production masters, and HR/payroll apply the protected symmetric employee-change path. Every active PriceBookEntries, ProductPostingProfiles, calendar/component and compensation interval is nonoverlapping for its scope. The implementation validates entity/currency/date/UOM relationships and uses two-pass reference linking where entities/currencies, employees/managers or source/destination records form cycles. A configured connection is only an intent until its authenticated events and reconciled deliveries demonstrate the supported action.

### 2. Period open and budget lock

The Controller opens an entity AccountingPeriod and freezes the approved CloseTemplates version into CloseTasks and all CloseDependencies. Any recurring/reversing accrual is an idempotent new balanced JournalEntry referencing its origin. A named Controller independently approves the exact Budget version after verifying currency, period and authority; the Controller then locks that version for reporting. An employee's CFO or board title grants no undeclared role. PostingDate must lie within the same-entity eligible period: Open allows configured normal sources, SoftClose only specifically authorised adjustments, HardClose/Archived none. A late bill retains its supplier BillDate and needs a reviewed next-open-period PostingDate, not a silent date rewrite.

### 3. Lead to opportunity

The Sales Rep qualifies a Lead using duplicate-aware source identity, creates or links Accounts and ContactPersons once, and records the linked Opportunity. Activities retain typed existing related records. The Sales Manager reviews entity pipeline, owner, expected close date, probability and forecast category. Repeat form/import events cannot create another account/contact/opportunity for the same conversion. ClosedDate records the actual won/lost decision; marketing and forecasts distinguish a lead, a proposed value and accepted revenue.

### 4. Quote and order approval

The Sales Rep prices every offered QuoteItem from effective PriceBookEntries, freezes entity cost converted to quote currency and retains supply/tax evidence. UnitPrice is net once; DiscountPercent is derived against authorised list, never an editable route escape. Unknown cost, zero list/price, unavailable margin or tax evidence cannot pass by becoming zero. The Sales Rep may approve their own exact known within-limit/floor Quote revision only under the explicit policy exception; otherwise the Sales Manager independently approves within authority or returns it for revised terms. Unknown-price/cost exceptions retain null values and explicit risk evidence and require a protected absolute approval ceiling in policy; absence of a limit never means unlimited authority. Submission freezes every material value; changes invalidate pending decisions and signed/send requests and require a successor revision. Actual dispatch evidence sets SentAt. Acceptance requires the current unexpired revision and all required signatures or reviewed equivalent evidence; old/void/partial-signature notifications do not accept it.

- SalesAllocations reserve and transfer accepted line quantities/net amounts into staged SalesOrders; sum of active/posted allocations cannot exceed accepted scope, with final rounding remainder assigned once. SalesOrderItems.UnitPrice and LineTotal retain net accepted price without applying DiscountPercent again. The Sales Manager approves within converted SalesOrderApprovalLimit and an atomic CreditExposures check of open receivables plus approved uninvoiced commitments plus pending reservations. The Controller decides over-limit exceptions and CreditHold clearance separately; a limit exception never silently clears a hold. Invoice posting transfers commitment into receivables rather than adding both; cancellation releases only unfulfilled commitment.

- Active signed Contracts generate unique ContractCycles. DeliveryOrder creates one order demand and transfers the cycle's MRP identity to that order; DirectBilling generates eligible invoice scope without an order/shipment. Suspended/cancelled cycles cannot bill. Partial service periods, quantity, net amount and rounding follow signed policy. Amendments preserve earned/delivered/invoiced cycles and separately replace or add unfulfilled scope; renewal creates nonoverlapping future accepted cycles at the agreed price basis, never both prior uplift and current-price uplift.

### 5. Requisition and purchase order

The requester submits an immutable Requisition. An independent assigned cost-centre manager acting as Employee, eligible Buyer or Controller approves within the converted PO limit and entity scope. The Buyer converts only approved remaining requisition quantities into a PO; every PO, including one below its Buyer's limit, needs another eligible Buyer or Controller to approve the exact revision. Purchase/receipt/bill/payment segregation is pairwise: the PO buyer cannot approve or receive that PO, the bill preparer cannot approve their bill, and the payment releaser cannot be preparer or any bill approver in the run; unrelated roles do not have to be different people by default. Amendments freeze new lines, quantities, pricing and coding; routing uses max(proposed total, OriginalApprovedAmount + cumulative positive line increases), never concealing new spend with another line's reduction. Fulfilled/billed portions remain historical and only unused commitment can be cancelled. Outbound PO delivery has a durable intent, acknowledgement and uncertainty path.

### 6. Receiving and inspection

The Warehouse Operator records immutable arrived GoodsReceiptItems only for an eligible approved PO and never for their own purchase. Pending and rejected goods are custody, not owned available stock and not GRNI. A required Quality Inspector dispositions exact lot/serial quantities independently; non-inspected policy-eligible goods can be confirmed by the independent receiver. ReceiptAcceptances create one positive accepted tranche within remaining arrival and approved order scope, and atomically post StockEvents/StockMovements/StockLayers and Dr Inventory / Cr GRNI at reviewed carried cost. Acceptance plus rejection cannot exceed arrival; accepted serial identities cannot overlap. Services use ServiceAcceptances with real completion evidence and no fabricated product or warehouse. The authorised requester may confirm their service without gaining PO/bill approval authority.

- Returning unaccepted custody records physical return without inventory/AP or a fictitious vendor credit. Returning accepted stock traces original accepted cost, remaining descendants and bill entitlement; inventory/GRNI or approved credit treatment depends on what was billed. Reversal cannot debit a depleted origin, produce negative stock, orphan a reservation or erase a shipment. Resolve downstream commitments and use a controlled traced compensation/return; original arrival and dispatch history remain.

### 7. Production

The Production Planner calculates MRPRuns for entity/warehouse/horizon from remaining approved demand, eligible stock, reservations and open supply. Contract cycle demand and its generated order are one demand; existing firmed/released proposals retain stable DemandKey and are not regenerated. On release the planner freezes BOM, routing, quality flags, standard costs and distinct labour/overhead rates/bases into the WorkOrder. Material issues/backflush use frozen dimensionally valid base-UOM conversions, claim exact available identities and post source-layer value into WIP once; returns reverse traced remaining quantity/cost.

- Operators record timestamped ProductionLog throughput at each operation; these quantities do not sum to finished units. Plant Manager may move an operation only within released technical capability and feasible work-centre scope. Independent Quality Inspector signoff releases only the actual inspected scope; first article permits continuation and never completes the full job. ProductionCompletions consume unused accepted terminal-log quantity and required final-quality scope, then atomically move reviewed WIP cost into finished stock. Approved timesheet cost enters WorkOrderCostEntries once at labour rate and overhead at its declared basis; combined HourlyRate is not added again. PayrollAllocations subsequently clear absorbed labour rather than adding another WIP charge. Planner close checks finished/scrap/remaining quantity, unresolved material/time/quality/cost obligations and any independent Controller variance decision; costs and outputs cannot disappear merely by setting Closed.

### 8. Fulfilment and invoicing

Warehouse Operator atomically claims InventoryReservations against eligible accepted stock for a specific SalesOrderItem. Soft to Hard conversion replaces the claim; picks remain owned by the order and unavailable to others. Packing changes no ownership or COGS; shipment verifies every claimed lot/serial, order ownership and required quality release against the frozen line scope. Actual carrier handover/dispatch evidence posts Shipment StockEvents once, consumes the claim and stock layers, records Shipments/ShipmentItems and Dr COGS / Cr Inventory. Planned label creation or uncertain carrier response is not dispatch. Unpick releases only traced physically returned stock; shipped scope requires an evidenced return/correction, never blind status reversal. Partial shipments update only their line quantities.

- DropShip retains the seller-as-principal purchasing/resale route. SalesOrderItems.DropShipPurchaseOrderItem binds independently approved vendor supply to exact customer demand. Supplier dispatch, contract title transfer and customer-delivery/acceptance evidence are validated against that scope; required quality checks need independent Quality Inspector evidence even when performed at the supplier/customer location. Buyer assembles the vendor evidence; an assigned Warehouse Operator independent of the PO buyer confirms DropShipReceipt and DropShipShipment against approved title/fulfilment rules and required Quality Inspector release. Controller approves the accounting/title policy. No seller GoodsReceipt or GoodsReceiptItem is invented. A configured Warehouses location of type InTransitOut represents economic ownership rather than physical warehouse custody: DropShipReceipt posts owned goods/GRNI at the evidenced title point and creates traced StockLayers; DropShipShipment issues the same quantity/cost to COGS only at the evidenced customer-fulfilment point. These can occur together, producing zero ending owned stock, but each has distinct source/effect identity. BillMatchAllocations.DirectDeliveryEvent consumes only that accepted vendor scope, and ShipmentItems/InvoiceItems use the actual direct-delivery evidence and accepted customer billing terms without a warehouse pick reservation. Direct returns retain original event/quantity/cost and determine whether title/ownership returns to the seller; no stock reversal/restock occurs without that evidence. VendorReturns.DirectReceiptEvent provides the origin when no GoodsReceiptItem exists. Agency/commission accounting is separately configured and cannot silently use this principal inventory/revenue policy.

- Every regular Invoices document with DocumentType Invoice follows Draft → PendingApproval → Approved before any local receivable/revenue posting or outbound invoice issue. Finance Clerk prepares and submits the exact immutable CurrentRevision. A matching Approvals row has DocumentType Invoice, DocumentID identifying that invoice, the same Entity and Revision, and Decision Approved by an eligible independent Controller actual actor. ConflictCheckJSON excludes the originating person, preparer and every material editor; delegation or holding both roles does not remove that exclusion. Rejected requests return to Draft through a new working revision; any amount, customer, line, tax, source or coding change invalidates approval and requires a newly reviewed revision. Finance Clerk may execute the approved revision after rechecking still-unbilled source scope, current entity authority and eligible posting period; execution cannot supply approval or change the frozen request. Invoice Status Approved with PostingState Unposted remains an approved instruction, not posted receivable; posting and authenticated delivery retain their separate existing states. A status edit, skipped approval or a decision on another revision supplies no authority. These requirements govern regular invoices only; existing credit-note thresholds, returns and credit-application rules remain unchanged.

- InvoiceItems claim unbilled dispatched SalesAllocations or due DirectBilling ContractCycles; accepted quantity/net value and applicable tax are bounded cumulatively. Local invoice posting recognises Dr AR / Cr Revenue and tax independently of successful delivery; an IntegrationDelivery sends the frozen invoice and acknowledges actual transport. Credit documents retain positive magnitudes and original line/net/tax/cost lineage. Eligible routine below-threshold credits follow protected Finance Clerk policy; larger/disputed credits require independent Controller approval. A posted credit first creates customer-credit liability or vendor-credit asset; CreditApplications settle open debit items or retain surplus for later use/refund. Credits on a fully paid invoice preserve historical cash applications. No inventory restock occurs from financial credit alone.

### 9. Cash application and collections

Authenticated bank evidence or reviewed manual receipt creates PaymentsReceived and one Dr Bank / Cr Unapplied receipts liability even before customer identification. Cash application later debits that liability and credits the invoice with separate discount/write-off/withholding/FX legs, not another bank debit. PaymentApplications.AmountApplied consumes receipt-currency cash; CashInvoiceAmount, DiscountTaken, WriteOff and WithholdingAmount sum to InvoiceAmount in invoice currency. Thus an invoice 100 may settle from cash 98 plus discount 2 while only cash 98 reduces the receipt. Entity and customer must match; unidentified cash must first be attributed with evidence. Concurrent claims reserve both cash and document outstanding before posting.

- Functional settlement compares with the settled share's current CarryingAmountSettled including revaluation: SettlementFXDelta for AR = FunctionalAmount − carrying released; for AP = carrying released − FunctionalAmount. RevaluationReleased is the signed prior unrealised gain/loss included in carrying removal. A zero-net FXReclassificationJournal moves it from unrealised to realised once; RealisedGainLoss = SettlementFXDelta + RevaluationReleased, while only SettlementFXDelta adds net P&L. For original AR 110 revalued to 120 and settled for 125, clearing releases 120, new gain is 5, and reclassification moves prior gain 10 so realised is 15 and remaining unrealised is zero. The AP mirror yields incremental loss 5 and total realised loss 15. Original currency and dated rates remain, and partial settlement releases proportional carrying with final rounding remainder. Unapplied foreign cash liability and foreign bank disposal have their own carrying/FX effects. Dunning and credit exposure use remaining document balance, not cash-only AmountPaid.

- CreditApplications atomically reserve credit availability net posted uses and all active reservations. Refunds require independent Controller approval and exactly one funding source: unapplied payment cash or a CreditApplication surplus reservation. Credit-funded refund consumes that surplus and does not also reduce the original payment/application; payment-funded refund consumes only available unapplied cash. Returns/chargebacks add linked negative cash and allocation effects, reopening the affected outstanding balance once and preserving history. No refund/application may spend the same reserved balance concurrently.

### 10. Bill match and payment run

The Finance Clerk matches each BillItem through BillMatchAllocations to its approved PO price and unused accepted ReceiptAcceptance or ServiceAcceptance quantity. Cumulative reserved/posted matches cannot exceed accepted net scope, prior bill credits restore entitlement only once, and price variance compares only the allocated portion. Fully matched within-policy bills may auto-post using independently reviewed policy; unresolved quantity/price/non-PO exceptions require independent assigned cost-centre Employee within BillApprovalLimit or Controller, with the Buyer resolving commercial disputes through approved amendment/credit evidence. Stock bills debit GRNI, services/nonstock debit appropriate expense, capital debits the asset account, and recoverable/nonrecoverable tax follows original supply policy; inventory is not expensed twice.

- Finance Clerk prepares immutable PaymentRuns and reserved PaymentAllocations. Only an independent eligible Controller within converted PaymentReleaseLimit releases the run and its hash-bound PaymentInstructions, excluding every bill approver as well as the preparer. Released/Submitted/Accepted instructions do not post bank cash or mark bills paid. Confirmed settlement posts the cash/AP/noncash/FX effects once; the bank account's carried disposal FX is distinct from AP settlement FX. Rejection before settlement releases reservations without a cash reversal. A return after settlement compensates the original cash, allocation and its FX classification with original-scope lineage, reopening the bill once; any new bank fee or subsequent rate change is a distinct reviewed effect. Uncertain outcomes retain reservations until authoritative reconciliation; no instruction retry is inferred from a timeout. A retry after proven nonexecution preserves the economic OperationKey and links the new attempt. Company-bank and vendor-beneficiary changes require independent finance confirmation and reapproval of affected instructions.

- Capitalised bills create book-specific AssetBooks. DepreciationRuns freeze method, service date, residual, life/rate or production-unit inputs and post the Book charge once; Tax schedules remain separate. AssetEvents independently approve and reconcile impairment, disposal or intercompany transfer of cost/depreciation/impairment, with proceeds and gain/loss. A changed master entity is not a transfer journal.

### 11. Leave, time and payroll

HR Manager maintains effective employment, positions and work calendars. HR or Payroll Administrator proposes protected bank/identity/salary/rate changes in MasterChanges; the other role, a different actual person, approves before activation, and CompensationHistory preserves effective pay. Neither direct Manage nor Admin bypasses this rule. Employees submit daily LeaveEntries resolved from their calendar and HolidayCalendars, splitting years, excluding nonworking days and preventing overlap. A single working date with either or both half-day flags is one half-day. Submission reserves the balance once; manager approval retains the reservation, Taken releases it and adds taken once, leaving availability unchanged. Named independent Employee manager or Plant Manager approves time/leave; HR needs a valid scoped delegation when covering absence.

- TimesheetLines identify employee/day/interval/cost centre/work order/operation. Overlaps, impossible daily totals, unpaid-leave duplication and invalid operation assignments block submission; independently approved consumed lines are immutable. PayrollAllocations consume eligible hour/leave scope once and allocate cost centres explicitly. Corrections reference original lines and eligible posting/service periods.

- Payroll Administrator freezes the eligible entity/pay-calendar/service-date population, CompensationHistory, EmployeePayComponents, tax rule evidence, currency rates and approved time/leave into PayrollRuns and PayStatementLines. Ordinary earnings/deductions/taxes are positive magnitudes and NetPay = GrossPay − TotalDeductions; employer costs never reduce employee net. Retro/Correction records only the signed delta against original statement lines and adjusts YTD once. Missing rule, rate, bank or eligibility evidence blocks approval. Statements stay in pay currency and aggregates convert once to entity functional currency. PayrollOpeningBalances provide nonposting cutover YTD.

- Controller independently approves the exact run revision. Operational posting recognises payroll expense/liabilities and clears previously absorbed labour without adding WIP twice; approved PaymentInstructions are then independently released and actual bank settlement determines Paid. Controller and Finance Clerk review permitted aggregates and masked beneficiary hashes; HR/payroll/self retain scoped personal pay/bank/ID access. A Parallel run is calculation/comparison only: no journal, bank instruction, payable balance, operational time/leave consumption, YTD effect or cash-forecast obligation, even when reviewed and closed.

### 12. Period close and consolidation

Owners reconcile subledgers, accepted stock/custody, remaining WIP, bank cash and outstanding instructions, AR/AP, payroll, fixed assets, tax and intercompany balances at explicit cutoffs. Required bank/unapplied/open-item reconciliation precedes revaluation so later corrections invalidate stale snapshots. CloseTasks evidence covers source revisions and every CloseDependencies prerequisite; Complete or NotApplicable alone cannot waive missing evidence. Controller approves above-limit manual journals and all policy exceptions; an eligible low-limit Controller may self-post only under the explicit reviewed manual-journal policy, never to subledger control accounts without a designated source. AllocationRuns retain source pools, drivers, amounts and balanced journal; zero drivers block, and rounding remainder is assigned once.

- RevaluationRuns apply Delta remeasurement to remaining monetary balances using current carrying amounts and reviewed closing rates. Each source is revalued once: control-account totals already represented by open-item detail are reconciliation totals, not additional revaluation rows. No automatic next-period reversal is applied in this baseline; correction is a referenced reversal and new snapshot run. TaxFilings aggregate original posted liabilities and credits, distinguish recoverable/nonrecoverable/additive/withholding and employee versus employer tax, and do not accrue tax twice at filing. Independent Controller review and real filing/payment acknowledgement remain separate actions.

- Controller hard-closes each entity only when required current evidence is complete. ConsolidationEntities maps the parent reporting period to each local fiscal calendar and freezes closed ledgers, effective ownership and method. Foreign-operation presentation translation uses closing rates for assets and liabilities including nonmonetary assets, historical equity movement rates and actual income/expense rates or an appropriate average; volatile periods need an assessed alternative. This differs from entity monetary revaluation. Full consolidation, proportional inclusion and equity accounting have distinct contribution, investment/equity and NCI workings. ConsolidationAdjustments retain partner agreement and balanced elimination groups; an IntercompanyPartner tag alone is not an elimination. Controller reviews and locks the pack. Reversal/rerun creates new records, preserves the issued pack and respects eligible group posting periods. These are implementation requirements to be verified, not claims about an already running service. All state-changing commands validate current revision, actual actor, entity/role/limit, field access and source scope in one transaction. Submitted, approved, signed, posted or reconciled content is immutable; amendment requires a new DocumentRevision and invalidates stale decisions, signatures, reservations and unsent deliveries as appropriate without erasing already executed effects. Every approved amount conversion records pair, multiplier, date/type and source; missing conversion blocks rather than silently using a prior rate. Timestamps are offset-aware; original date fields remain business-date projections. Ledger journals balance in entity-functional precision, contain nonnegative debit/credit magnitudes with one side per nonzero line, and map source-specific control accounts through approved ProductPostingProfiles. Posted lines are append-only; corrections reverse exact traced effects with original tax/rate/cost evidence and valid new PostingDate. Fiscal periods are entity-specific. Cross-entity goods/asset movements require paired approved intercompany documents and balancing, not a same-entity transfer shortcut. Tax rate valuation differences are not automatically rounding; only actual decimal residuals use rounding policy. Stock mutation locks the exact source/destination identity and reservations, validates positive available quantity and valid serial ownership, then posts StockEvent, signed movements, cost layers and journal atomically. Same-entity transfer has equal quantity and value out/in legs; parent/descendant layers are provenance, not duplicate balances. Packing/picking does not issue ownership; actual shipment does. Count lock covers named scope and detects new identities as well as changed versions; unrelated warehouse movements do not invalidate an unchanged locked scope. Lock expiry or resumed movement requires fresh snapshot and recount. Quantity and percentage tolerances both apply; expected zero has unavailable percentage and independent review. Eligible below-threshold known-cost existing uncommitted count differences can be self-confirmed after required recount under policy; unknown/found/held/reserved/identity-changing or above-value scope requires independent Controller approval and known reviewed cost before posting. A recount need not make the physical difference disappear. Reversals trace remaining descendants and downstream financial/stock obligations and cannot create negatives or erase actual dispatch. A stable OperationKey plus content hash is unique for each economic action and destination; duplicate callbacks, repeated generation, retries and imports reuse the completed result, while conflicting content enters ReviewRequired. External IntegrationEvents authenticate before applying effects and bind the expected current source/version; obsolete/void/partial signature events are ignored or reviewed. IntegrationDeliveries retain intent, actual response and provider identity. Transport acknowledgement is distinct from financial settlement, signature completion, carrier dispatch, tax filing or local posting. Uncertain execution prevents blind retry and retains financial/stock reservations until authoritative reconciliation. Compensating events reference prior records and restore each quantity/value claim only once. MigrationBatches use one supported baseline: a single approved full opening GL including AR/AP, bank, stock/WIP, asset, payroll and other controls, plus nonposting detailed open-item/stock/book/payroll/leave imports that reconcile to it. Never post imported receipts, invoices, depreciation or payroll again over those opening controls. MigrationItems retain original IDs, dates, accepted/shipped/billed/settled-to-date scope, remaining commitments, unapplied balances, current carrying/revaluation and cost-layer history. Opening stock uses MigrationOpening StockEvents with no fresh GRNI/COGS journal; AssetBooks imports opening cost/depreciation/impairment; PayrollOpeningBalances and LeaveEntries Opening supply historical YTD/leave without new pay or accrual expense. Two-pass linking resolves entity/currency and employee-manager cycles. Approved cutoff watermarks suppress historical notifications and outbound side effects; repeated import keys reconcile rather than duplicate. Parallel payroll remains wholly nonposting. Reconciliation compares control totals and representative partial transactions before operational activation, retaining required independently approved exceptions and supported limitations.

## Roles and permissions

### Admin

Configures users, approved policies, workflows and connections while remaining outside operational finance signatures.

- Prepare all master configuration, Employees role/limit assignments, EnterprisePolicies, DocumentRevisions, AuthorityDelegations, CloseTemplates and integration configuration through MasterChanges

- Maintain reference mappings and number sequences

- View operational tables within entity and protected-field policy

- Inspect redacted IntegrationEvents, IntegrationDeliveries and MigrationBatches

- Cannot approve own master/policy change, close AccountingPeriods, lock ConsolidationRuns, approve PayrollRuns or release PaymentRuns/PaymentInstructions

- Cannot view employee salary, NationalID or bank fields merely by Admin role

- Cannot bypass immutable revisions, stock reservations or ledger controls

### Controller

Owns financial policy, independent finance decisions, reconciliation, the close and consolidation.

- Manage draft ChartOfAccounts, TaxCodes, CostCenters, ExchangeRates, PaymentTerms, BankAccounts, JournalEntries, JournalEntryLines, AccountingPeriods, CloseTasks, CloseDependencies, Budgets, BudgetLines, AllocationRuns, AllocationLines, FixedAssets, AssetBooks, AssetEvents, DepreciationRuns, DepreciationRunLines, RevaluationRuns, RevaluationLines, ConsolidationRuns, ConsolidationEntities, ConsolidationRunLines, ConsolidationAdjustments and TaxFilings through approved revision controls

- Approve financial EnterprisePolicies and MasterChanges independently

- Approve Bills with BillItems.MatchStatus exceptions above an eligible cost-centre manager limit or outside policy, never if preparer/material editor

- Approve eligible independent PurchaseOrders above Buyer limits and Requisitions escalation

- Approve SalesOrders above Sales Manager authority/credit capacity and separately decide CreditHold clearance

- Approve every regular Invoices DocumentType Invoice revision through Approvals DocumentType Invoice, independently of the originating person, preparer and all material editors, using the actual authenticated actor even under delegation

- Cannot approve an Invoice they prepared or materially edited

- Approve above-threshold/disputed credit notes, write-offs and all Refunds

- Release PaymentRuns and PaymentInstructions within own converted PaymentReleaseLimit, excluding preparer and every bill approver in the run

- Approve PayrollRuns independently of preparation/material editing

- Approve Budgets independently of preparer/material editor and lock the approved version

- Approve StockMovements/InventoryCounts requiring escalation, independently of counter/preparer

- Approve JournalEntries above preparer limit or outside self-post policy, and eligible AssetEvents/AllocationRuns

- Open and close AccountingPeriods and review/lock ConsolidationRuns independently where required

- View finance and operational records but only authorised aggregate payroll totals, masked employee beneficiary information and nonsensitive employee directory

- View vendor/company bank data only within finance entity scope

- Access financial, margin, inventory and consolidated reports without personal payroll detail

### Finance Clerk

Captures and reconciles finance transactions, prepares payments and performs only the narrow routine settlement actions allowed by policy.

- Manage draft Bills, BillItems, BillMatchAllocations, Invoices, InvoiceItems, PaymentsReceived, PaymentApplications, PaymentsMade, PaymentAllocations, PaymentRuns, PaymentInstructions, CreditApplications and Refunds

- Match accepted goods/service evidence and BankStatementLines

- Submit finance documents and payment proposals for approval

- Prepare and submit every regular Invoice revision for independent Controller approval

- Execute only the exact independently approved regular Invoice revision after current source eligibility and authority checks, preserving its amount, customer, lines, tax and accounting scope

- Cannot approve regular Invoices or use a second role, delegated identity or execution permission to approve own preparation/material edits

- Post eligible fully matched Bills under an independently activated automatic-match policy with no unresolved exception

- Apply customer cash and policy-eligible below-threshold discounts/write-offs, retaining evidence and Approvals where required

- Issue eligible routine below-threshold credits under reviewed policy, excluding disputed or refund actions

- Prepare customer/vendor bank MasterChanges and independently confirm another finance person's change only within designated bank-review policy

- View finance-scoped Accounts bank fields, ContactPersons, approved purchasing/sales/receipt/shipment records, FixedAssets, AccountingPeriods and CloseTasks

- Reconcile masked payroll instruction totals and authenticated bank outcomes without employee bank/pay detail

- Run dunning

- Cannot approve Bills as their clerk, release PaymentRuns/PaymentInstructions, alter posted journals or activate own bank change

- Access aging, cash and tax reports

### Sales Rep

Works owned customers, contacts, leads and opportunities and prepares quotes and orders.

- Manage owned Leads, ContactPersons, Opportunities, Activities and draft Quotes

- Manage draft QuoteItems only where parent Quotes.Owner = current user

- Create customer Accounts/ContactPersons within owned entity through reviewed master workflow

- Create draft SalesOrders/SalesOrderItems and submit for approval

- Approve own Quotes only when the exact frozen revision has known cost/margin, satisfies protected policy floor and own DiscountLimitPercent and has no exception

- View PriceBooks/PriceBookEntries, Products, sellable Inventory availability, own Contracts/ContractItems/ContractCycles, Invoices, Shipments and CustomerReturns

- Cannot view protected product/quote cost or Inventory.UnitCost/Valuation

- View own price/revenue pipeline and order results without an indirect margin-report cost disclosure

### Sales Manager

Owns commercial masters, customer contracts and the approved sales pipeline within entity authority.

- Manage entity Leads, ContactPersons, Opportunities, Activities, draft Quotes/QuoteItems, SalesOrders/SalesOrderItems, Contracts/ContractItems/ContractCycles, PriceBooks/PriceBookEntries and customer Accounts excluding bank fields through reviewed master controls

- Approve Quotes within own discount authority and protected margin policy independently when required

- Review unknown-cost/zero-price commercial exceptions under EnterprisePolicies with recorded pricing basis

- Verify complete SignatureRequests and accepted terms

- Approve SalesOrders within own SalesOrderApprovalLimit and available CreditExposures with no active hold

- Authorise CustomerReturns commercial scope

- Reassign commercial owners

- View finance result and protected commercial cost/margin for own entity

- Cannot lift CreditHold, bypass accepted SalesAllocations or exceed authority through contract cycle generation

- Access pipeline, forecast, margin and order reports

### Buyer

Owns supplier purchasing and independent purchase decisions within authority, without receiving or approving their own order.

- Manage draft Requisitions/RequisitionItems, PurchaseOrders/PurchaseOrderItems, VendorReturns and vendor Accounts/ContactPersons except bank fields through reviewed controls

- Submit purchasing documents

- Approve Requisitions and every PurchaseOrder only when another actual person prepared/materially edited the revision and within own converted POApprovalLimit

- Firm PlannedOrders of Type Purchase and resolve disputed bill evidence without altering the bill's approved accounting

- View Products, Inventory, MRPRuns, PlannedOrders, WorkOrderComponents, receipt/acceptance/inspection records and Bills

- Cannot receive a GoodsReceipt, approve own order, change bank details or resolve a price discrepancy by editing a posted source

- Access procurement and supplier performance reports

### Warehouse Operator

Handles physical goods in the assigned warehouse under accepted ownership and exact-stock claims.

- Prepare GoodsReceipts/GoodsReceiptItems, StockEvents/StockMovements, InventoryReservations, InventoryCounts/InventoryCountLines and Shipments/ShipmentItems in assigned warehouse

- Receive goods only when not the PO buyer

- Confirm eligible no-inspection ReceiptAcceptances and physically receive CustomerReturns/dispatch VendorReturns within approved scope

- Confirm DropShipReceipt/DropShipShipment economic effects in the assigned InTransitOut location from verified vendor/customer evidence, independently of the PO buyer and after required quality release

- Claim, pick, unpick, pack and tender shipments through guarded actions

- Self-confirm only policy-eligible below-threshold stock adjustments/count results for known-cost existing uncommitted stock after required recount, never found/identity-changing/held/reserved stock

- Submit escalated counts and adjustments for independent Controller approval

- View stock, approved order/purchase/work-order source records and Products

- Cannot mutate Inventory balances, accepted receipt history, source cost, policy or journals directly

### Production Planner

Owns production definitions, planning snapshots, work release and reviewed completion/close.

- Manage draft BOMs/BOMComponents, Routings/RoutingOperations, WorkCenters and technical master versions through owning-manager review

- Manage MRPRuns, PlannedOrders, draft WorkOrders/WorkOrderComponents/WorkOrderOperations

- Run MRP and firm/release WorkOrders using frozen technical/cost versions

- Review ProductionCompletions and close WorkOrders after accepted output, pending obligations and Controller variance approval where policy requires

- Create purchasing Requisitions

- View production stock, customer demand, purchase supply, inspections and work-order-charged time/cost allocations without personal compensation disclosure

- Cannot replace accepted quality decisions or post arbitrary completion quantity

- Access production, attainment and variance reports

### Plant Manager

Schedules and supervises production and independently approves eligible plant time and leave.

- Manage draft ProductionLog observations and assign WorkOrderOperations.Operator, WorkCenter, PlannedStart and PlannedEnd within released technical capability

- Place operations on hold and review feasible schedule changes

- Approve Timesheets and LeaveRequests only as named eligible manager/delegate and never own time/leave

- Review technical WorkCenters/BOM/routing MasterChanges within plant scope

- View production, inventory, inspections and scoped timesheet allocations

- Cannot disposition QualityInspections, release WorkOrders or activate financial rates without Controller policy review

- Access operational attainment and labour variance without individual pay-rate disclosure

### Quality Inspector

Independently dispositions exact incoming, in-process, first-article, final and returned-goods scope.

- Manage draft QualityInspections and sign immutable disposition evidence when independent of the producing operator

- Accept/reject partial ReceiptAcceptances requiring inspection

- Place operations and stock on quality hold and release only the reviewed identity/quantity scope

- Open VendorReturns and set CustomerReturns disposition through guarded evidence

- View Products, receipt, stock, operation, shipment and return provenance

- Cannot edit accepted source quantities, perform unreviewed financial credit or turn a first-article signoff into full finished output

### Operator

Executes assigned operations and records time, throughput and scrap without approving their own output quality.

- View assigned WorkOrderOperations and related WorkOrders/WorkOrderComponents

- Create/post immutable ProductionLog observations for own operations with valid intervals

- Record scrap reason

- Prepare IssueToWIP StockMovements against valid InventoryReservations and exact source cost

- Prepare terminal ProductionCompletions only within released/logged remaining quantity

- Execute completion StockEvents only after required quality and planner guards

- Cannot disposition own QualityInspections, approve own time or treat intermediate throughput as finished stock

### HR Manager

Owns employment and leave policy and independently confirms sensitive employee changes proposed by payroll.

- Manage nonsensitive Employees, Positions, Departments, WorkCalendars/WorkCalendarDays, LeaveTypes/HolidayCalendars and LeaveEntries through approved effective changes

- Propose employee BankAccount, NationalID, BaseSalary, HourlyRate, PayCurrency or compensation-basis changes in MasterChanges for a different Payroll Administrator to approve

- Approve those changes proposed by a different Payroll Administrator and retain CompensationHistory

- View protected employee pay/bank/ID and employment/leave/pay statements within HR scope

- Approve LeaveRequests/Timesheets only under a valid AuthorityDelegations grant or assigned manager authority, never own submission

- Cannot prepare/calculate operational PayrollRuns, edit limits or directly overwrite protected salary/bank values

- Access scoped HR and payroll detail reports

### Payroll Administrator

Prepares effective payroll calculations and independently confirms HR-proposed sensitive employee changes.

- Manage draft PayComponents/EmployeePayComponents, PayrollRuns, PayStatements/PayStatementLines, PayrollAllocations and PayrollOpeningBalances under reviewed rules

- Read approved time/leave and protected effective employee compensation/bank data within payroll scope

- Propose sensitive Employees changes through MasterChanges for a different HR Manager to approve and approve those proposed by a different HR Manager

- Submit exact PayrollRuns revisions for Controller approval

- Prepare payroll PaymentInstructions using approved beneficiary snapshots and authorised masked company-bank selection

- View relevant Positions, leave/calendars, CostCenters, tax rules, periods and close tasks

- Cannot approve/release own payroll, alter Employees directly or view unrestricted company/vendor bank configuration

- Access scoped payroll detail reports

### Employee

Uses own leave, time and pay records and acts on specifically assigned manager decisions within scope and limit.

- Create/submit own LeaveRequests and Timesheets/TimesheetLines

- View own Employees, PayStatements/PayStatementLines and LeaveBalances

- Update own Phone/Address through permitted self-service rules

- Approve another employee's LeaveRequests/Timesheets only as assigned eligible Approver or valid delegated actor

- Approve Requisitions as assigned cost-centre manager within POApprovalLimit and Bills as assigned cost-centre manager within BillApprovalLimit, excluding own preparation/material editing

- Confirm ServiceAcceptances as authorised requester without gaining PO/bill approval rights

- Act on Approvals only when ActualActor is authenticated and named assignment/delegation, eligible role, amount/currency and conflict checks all pass

- View applicable HolidayCalendars, WorkCalendars and LeaveTypes

- Cannot inspect other employees' protected pay/bank/ID or gain general finance access from a manager inbox

## Records and fields

### Entities

Legal entities under a reporting parent. Each entity owns its trial balance, functional currency, fiscal calendar, tax registration and consolidation method.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| EntityCode | text | Yes |  |
| Name | text | Yes |  |
| EntityType | select | Yes | Parent, Subsidiary, Branch, JointVenture |
| FunctionalCurrency | reference | Yes | → Currencies |
| ReportingCurrency | reference | Yes | → Currencies |
| ParentEntity | reference | No | → Entities (self) |
| OwnershipPercent | number | No | 0–100, held by the parent |
| ConsolidationMethod | select | Yes | Full, Proportional, Equity, NotConsolidated |
| TaxID | text | No |  |
| Country | select | Yes | ISO 3166 country code |
| Jurisdiction | reference | No | → TaxJurisdictions |
| FiscalYearStart | select | Yes | January, April, July, October |
| DefaultCostingMethod | select | Yes | Standard, WeightedAverage |
| EffectiveFrom | date | Yes |  |
| EffectiveTo | date | No |  |
| Active | toggle | Yes |  |
| Policy | reference | No | → EnterprisePolicies. Approved effective operating and posting policy |
| TimeZone | text | Yes | IANA timezone for business dates and local deadlines; persisted timestamps include UTC offset |
| OwnershipHistoryJSON | longtext | Yes | Approved ownership/method intervals; consolidation snapshots the applicable interval |

### Currencies

ISO currency codes used as functional, reporting and transaction currencies.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| Code | text | Yes | ISO 4217, e.g. USD, EUR, INR, JPY |
| Name | text | Yes |  |
| Symbol | text | No |  |
| DecimalPlaces | number | Yes | 2 by default, 0 for JPY |
| Active | toggle | Yes |  |

### ExchangeRates

Dated currency multipliers by source and type; required rates are reviewed and frozen on a transaction, with missing-rate exceptions blocking its financial action.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| FromCurrency | reference | Yes | → Currencies |
| ToCurrency | reference | Yes | → Currencies |
| RateType | select | Yes | Spot, Average, Closing, Budget |
| EffectiveDate | date | Yes |  |
| Rate | number | Yes | 1 FromCurrency = Rate ToCurrency |
| Source | select | No | ECB, OANDA, Manual, Integration |

### ChartOfAccounts

The account master, shared across entities, with a self-parenting tree for summary accounts, control flags for subledger accounts and an intercompany flag for elimination.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| AccountCode | text | Yes |  |
| AccountName | text | Yes |  |
| AccountType | select | Yes | Asset, Liability, Equity, Revenue, Expense |
| AccountSubType | select | No | CurrentAsset, FixedAsset, Inventory, WIP, CurrentLiability, LongTermLiability, COGS, OperatingExpense, Payroll, OtherIncome, OtherExpense |
| ParentAccount | reference | No | → ChartOfAccounts (self) |
| NormalBalance | select | Yes | Debit, Credit |
| IsControl | toggle | Yes | Posted only through a subledger (AR, AP, Inventory, WIP, FA, Tax, Payroll, Bank) |
| IsIntercompany | toggle | Yes | Balances eliminate in consolidation |
| Currency | reference | No | → Currencies (currency-specific accounts) |
| Active | toggle | Yes |  |

### AccountingPeriods

Fiscal periods per entity with the open and close state the close checklist drives.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| Entity | reference | Yes | → Entities |
| PeriodName | text | Yes | e.g. FY26-04 |
| PeriodType | select | Yes | Month, Quarter, Year |
| StartDate | date | Yes |  |
| EndDate | date | Yes |  |
| Status | select | Yes | Future, Open, SoftClose, HardClose, Archived. SoftClose accepts only specifically approved adjustment source classes; HardClose/Archived reject all posting |
| ChecklistTasksOpen | number | Yes | Derived from required active CloseTasks and unresolved CloseDependencies for frozen template; never editable authority |
| ClosedBy | reference | No | → Employees |
| ClosedAt | date | No |  |
| Template | reference | No | → CloseTemplates |
| LedgerRevision | number | Yes | Monotonic posted ledger revision for reconciliation/source snapshots |
| ClosedTimestamp | datetime | No | Actual Controller signoff time |

### TaxJurisdictions

Authorities that levy tax and receive filings: country, state, province, city.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| JurisdictionCode | text | Yes |  |
| Name | text | Yes |  |
| Country | text | Yes |  |
| Region | text | No | State or province |
| FilingFrequency | select | Yes | Monthly, Quarterly, SemiAnnual, Annual |
| Active | toggle | Yes |  |

### TaxCodes

Named tax rates for a jurisdiction and direction, with the account they post to.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| Code | text | Yes |  |
| Name | text | Yes |  |
| Jurisdiction | reference | Yes | → TaxJurisdictions |
| Direction | select | Yes | Sales, Purchase, Payroll, Both |
| Rate | number | Yes | Percentage (5 means 5%); effective configured jurisdiction rule, not an assurance that all statutory calculation is represented |
| TaxType | select | Yes | Sales, Use, VAT, GST, Withholding, PayrollTax. Withholding is a settlement/liability classification and is not added as sales tax |
| RecoverablePercent | number | No | 0–100 purchase recovery percentage; remainder capitalises or expenses with the underlying supply under policy |
| GLAccount | reference | Yes | → ChartOfAccounts (tax payable or receivable) |
| EffectiveFrom | date | Yes |  |
| EffectiveTo | date | No |  |
| Active | toggle | Yes |  |
| CalculationPolicyJSON | longtext | Yes | Additive/withholding/employer versus employee tax, taxable basis, exemption evidence, rounding, effective rule and authority source |
| ReviewedRevision | reference | No | → DocumentRevisions |

### PaymentTerms

One list of terms shared by customers, vendors, invoices and bills, so the due date and the early-payment discount are computed the same way on both sides.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| Code | text | Yes | e.g. NET30, 2-10NET30, PREPAID |
| Name | text | Yes |  |
| DueDays | number | Yes | 0 for prepaid |
| DiscountPercent | number | No | Early-payment discount |
| DiscountDays | number | No | Days within which the discount applies |
| Active | toggle | Yes |  |

### BankAccounts

The company's own bank accounts per entity: where customer cash lands, where payment runs and payroll are paid from, and what the statement feed reconciles to.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| Code | text | Yes |  |
| Entity | reference | Yes | → Entities |
| BankName | text | Yes |  |
| AccountNumber | text | Yes | Protected Controller/Finance Clerk configuration; payroll sees only authorised masked bank selection and payment outcome |
| IBAN | text | No | Masked |
| SWIFT | text | No |  |
| Currency | reference | Yes | → Currencies |
| GLAccount | reference | Yes | → ChartOfAccounts (bank control account) |
| FileFormat | select | Yes | ISO20022, NACHA, BACS, SEPA, Custom |
| StatementFeed | toggle | Yes | Configured connection intent only; IntegrationEvents record authenticated arrivals and actual processing, no guaranteed feed availability |
| Active | toggle | Yes |  |
| ApprovedRevision | reference | No | → DocumentRevisions |
| ReconciledBankBalance | currency | No | Bank-currency balance from opening GL plus posted bank effects through ReconciledAt, reconciled to the statement and outstanding items |
| StatementClosingBalance | currency | No | Bank-currency statement ending balance for the evidenced statement cutoff; movement lines alone are insufficient |
| ReconciledAt | datetime | No | Exact finance-approved balance cutoff used by cash forecasting |
| BalanceEvidenceJSON | longtext | No | Statement ID/opening/ending totals, posted ledger revision, outstanding reconciling items and reviewer; currency conversion shown separately |

### CostCenters

Departments, projects, business units and locations that expense, budget and payroll are charged to.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| CostCenterCode | text | Yes |  |
| Name | text | Yes |  |
| Type | select | Yes | Department, Project, BusinessUnit, Location |
| Entity | reference | Yes | → Entities |
| Parent | reference | No | → CostCenters (self) |
| Manager | reference | No | → Employees (approves bills coded to it within BillApprovalLimit) |
| Active | toggle | Yes |  |

### Departments

Organisational departments per entity: Finance, Sales, Procurement, Production, Warehousing, HR, IT.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| DepartmentCode | text | Yes |  |
| Name | text | Yes |  |
| Entity | reference | Yes | → Entities |
| Parent | reference | No | → Departments (self) |
| Head | reference | No | → Employees |
| CostCenter | reference | No | → CostCenters |
| Active | toggle | Yes |  |

### Positions

Approved positions in the organisation chart. Headcount is planned and filled against positions, and a position carries the grade and reporting line an employee inherits.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| PositionCode | text | Yes |  |
| Title | text | Yes |  |
| Entity | reference | Yes | → Entities |
| Department | reference | Yes | → Departments |
| CostCenter | reference | No | → CostCenters |
| ReportsTo | reference | No | → Positions (self) |
| Grade | select | Yes | G1, G2, G3, G4, G5, G6, G7, Executive |
| EmploymentType | select | Yes | FullTime, PartTime, Contractor, Intern |
| Headcount | number | Yes | Planned authorised capacity under an approved MasterChanges version; not itself an enforced recruitment workflow |
| FilledCount | number | Yes | As-of employed occupants within effective hire/termination and position-assignment intervals; excludes future hires and terminated employees |
| Status | select | Yes | Open, Filled, Frozen, Closed |
| EffectiveFrom | date | Yes |  |
| ApprovedRevision | reference | No | → DocumentRevisions. Position/budget authorisation evidence where configured |

### Employees

Effective employment, role, limit and protected pay reference data. HR/payroll proposals and independent activation history govern sensitive fields; derived summaries do not overwrite the history.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| EmployeeID | text | Yes |  |
| FullName | text | Yes |  |
| Email | text | Yes |  |
| Phone | text | No | Employee may edit |
| Address | text | No | Employee may edit |
| Entity | reference | Yes | → Entities (home entity) |
| Department | reference | Yes | → Departments |
| Position | reference | No | → Positions |
| Role | select | Yes | Admin, Controller, FinanceClerk, SalesRep, SalesManager, Buyer, WarehouseOperator, ProductionPlanner, PlantManager, QualityInspector, Operator, HRManager, PayrollAdministrator, Employee. Display labels use the declared spaced role names |
| Manager | reference | No | → Employees (self; approves leave and time) |
| Warehouse | reference | No | → Warehouses (assigned warehouse for operators) |
| Status | select | Yes | Onboarding, Active, OnLeave, Notice, Terminated |
| POApprovalLimit | currency | No | Numeric ceiling in the employee home entity functional currency; amount conversion retains pair/type/date/rate and eligible role/scope. A null limit grants no monetary authority; an explicit zero only permits zero-value policy-eligible actions |
| BillApprovalLimit | currency | No | Numeric ceiling in the employee home entity functional currency; amount conversion retains pair/type/date/rate and eligible role/scope. A null limit grants no monetary authority; an explicit zero only permits zero-value policy-eligible actions |
| PaymentReleaseLimit | currency | No | Numeric ceiling in the employee home entity functional currency; amount conversion retains pair/type/date/rate and eligible role/scope. A null limit grants no monetary authority; an explicit zero only permits zero-value policy-eligible actions |
| SalesOrderApprovalLimit | currency | No | Numeric ceiling in the employee home entity functional currency; amount conversion retains pair/type/date/rate and eligible role/scope. A null limit grants no monetary authority; an explicit zero only permits zero-value policy-eligible actions |
| JournalApprovalLimit | currency | No | Numeric ceiling in the employee home entity functional currency; amount conversion retains pair/type/date/rate and eligible role/scope. A null limit grants no monetary authority; an explicit zero only permits zero-value policy-eligible actions |
| DiscountLimitPercent | number | No | Largest derived line discount the eligible role may approve, subject to protected margin/exception policy; missing limit is no authority, not unlimited |
| PayType | select | No | Salaried, Hourly |
| PayrollCalendar | select | No | Weekly, BiWeekly, SemiMonthly, Monthly |
| PayrollJurisdiction | reference | No | → TaxJurisdictions (where statutory deductions apply) |
| OnPayroll | toggle | Yes | False for contractors; excluded from PayrollRuns |
| NationalID | text | No | Protected HR Manager, Payroll Administrator and employee-self visibility, including reports/exports; symmetric independent HR/payroll change approval |
| BankAccount | text | No | Protected HR Manager, Payroll Administrator and employee-self visibility; either HR/payroll proposes and a different actual person in the other role approves MasterChanges before application |
| HireDate | date | No |  |
| TerminationDate | date | No |  |
| BaseSalary | currency | No | Protected amount per salary basis in PayCurrency; applied only from approved CompensationHistory |
| HourlyRate | currency | No | Protected amount per payable hour in PayCurrency; approved effective history |
| SalaryEffectiveFrom | date | No | Start date of the currently projected approved compensation interval |
| Active | toggle | Yes |  |
| UserID | text | No | Unique authenticated principal; role changes never create a second person for segregation checks |
| Roles | longtext | Yes | Assigned declared role set; effective entity scope and limits are Admin-maintained through reviewed MasterChanges |
| PayCurrency | reference | Yes | → Currencies. Salary/hourly basis; statement conversion is explicit |
| WorkCalendar | reference | No | → WorkCalendars |
| EmploymentHistoryJSON | longtext | Yes | Effective entity, position, status, calendar and service intervals; preserved for as-of headcount and payroll |

### Accounts

Customer and vendor companies. A counterparty on both sides is one record with Type Both, with terms kept separately for each direction. A group entity that trades with this one is marked intercompany.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| AccountNumber | text | Yes |  |
| Name | text | Yes |  |
| Type | select | Yes | Customer, Vendor, Both |
| Entity | reference | No | → Entities (primary billing entity) |
| IntercompanyEntity | reference | No | → Entities (set when the counterparty is a group entity) |
| Industry | select | No | Manufacturing, Distribution, Retail, Services, Technology, Healthcare, Public, Other |
| AccountOwner | reference | No | → Employees (sales owner for customers) |
| PaymentTerms | reference | No | → PaymentTerms (as a customer) |
| VendorPaymentTerms | reference | No | → PaymentTerms (as a vendor) |
| Currency | reference | No | → Currencies (default for transactions) |
| TaxID | text | No |  |
| DefaultTaxCode | reference | No | → TaxCodes |
| Jurisdiction | reference | No | → TaxJurisdictions |
| Website | text | No |  |
| BillingAddress | text | No |  |
| ShippingAddress | text | No |  |
| RemitToAddress | text | No | Vendors |
| CreditLimit | currency | No | Limit in CreditCurrency for this entity/customer scope; exposure converts with a retained rate snapshot |
| CreditHold | toggle | No | Separate controlled hold; an amount exception does not lift it |
| VendorRating | select | No | A, B, C, Unrated; from receipt lines and inspections |
| BankName | text | No | Vendors; finance only |
| BankAccountNumber | text | No | Masked except Controller and Finance Clerk with scoped finance access; independently reviewed MasterChanges required |
| IBAN | text | No | Same finance-only field scope and independent bank-change review |
| SWIFT | text | No | Same finance-only bank-change scope |
| Active | toggle | Yes |  |
| CreditCurrency | reference | No | → Currencies. Required for customer credit checking |
| CreditPolicy | reference | No | → EnterprisePolicies |
| BankVersion | text | No | Immutable approved beneficiary snapshot identity used by payment instructions |

### ContactPersons

The people at an account: the buyer, the decision maker, the accounts-payable clerk, the engineer. Calls are logged against a person, quotes are addressed to one, and a lead converts into one.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| ContactNumber | text | Yes |  |
| Account | reference | Yes | → Accounts |
| FullName | text | Yes |  |
| Title | text | No |  |
| Email | text | No |  |
| Phone | text | No |  |
| Role | select | Yes | DecisionMaker, Influencer, Buyer, AccountsPayable, Technical, Other |
| Primary | toggle | Yes | One per account |
| Owner | reference | No | → Employees |
| SourceLead | reference | No | → Leads |
| LastActivityDate | date | No | Rollup from Activities |
| Active | toggle | Yes |  |

### PriceBooks

Named price lists per currency and entity, with effective dates.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| Name | text | Yes |  |
| Currency | reference | Yes | → Currencies |
| Entity | reference | No | → Entities |
| EffectiveFrom | date | Yes |  |
| EffectiveTo | date | No |  |
| Active | toggle | Yes |  |
| ApprovedRevision | reference | No | → DocumentRevisions. Immutable activated master version; editing requires a reviewed successor |

### Warehouses

Physical stock locations: raw stores, WIP buffers, finished goods, quarantine, in-transit.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| WarehouseCode | text | Yes |  |
| Name | text | Yes |  |
| Entity | reference | Yes | → Entities |
| Location | text | Yes |  |
| WarehouseType | select | Yes | Raw, WIP, FG, Mixed, Quarantine, TransitIn, TransitOut, Returns |
| Manager | reference | No | → Employees |
| Active | toggle | Yes |  |

### Products

Everything bought, made or sold: finished goods, sub-assemblies, raw materials, components, consumables and services.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| SupplyPurpose | text | No | Campus operating purpose, such as classroom consumables, workshop materials or administrative supply packs; no learner records. |
| SKU | text | Yes |  |
| Name | text | Yes |  |
| Description | text | No |  |
| ItemType | select | Yes | FinishedGood, SubAssembly, Raw, Component, Consumable, Service |
| ProductFamily | select | No | Set per company; used for reporting roll-ups |
| UOM | select | Yes | EA, KG, L, M, Hour, Seat |
| CostingMethod | select | Yes | Standard, WeightedAverage; defaults from Entities.DefaultCostingMethod |
| StandardCost | currency | Yes | Reference standard per UOM in StandardCostCurrency for StandardCostEntity; transacting entity uses effective ProductPostingProfiles cost snapshot |
| ListPrice | currency | No | Reference only; effective PriceBookEntries supplies authorised currency/entity list price |
| LeadTimeDays | number | Yes |  |
| MakeOrBuy | select | Yes | Make, Buy |
| SafetyStock | number | No | Demand for MRP when on hand falls below |
| InspectOnReceipt | toggle | Yes | Receipt line waits for QC |
| LotControlled | toggle | Yes |  |
| SerialControlled | toggle | Yes |  |
| DefaultWarehouse | reference | No | → Warehouses |
| PreferredVendor | reference | No | → Accounts (Vendor) |
| Active | toggle | Yes |  |
| StandardCostCurrency | reference | No | → Currencies |
| StandardCostEntity | reference | No | → Entities |
| BaseConversionJSON | longtext | Yes | Positive dimensionally valid UOM conversions with effective evidence; no implicit weight/length conversion |

### BOMs

Bill of material header: the recipe for a made product, versioned by engineering revision.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| BOMNumber | text | Yes |  |
| Product | reference | Yes | → Products (FinishedGood or SubAssembly) |
| Version | text | Yes | e.g. Rev A |
| Status | select | Yes | Draft, Active, Obsolete |
| EffectiveFrom | date | Yes |  |
| EffectiveTo | date | No |  |
| ApprovedRevision | reference | No | → DocumentRevisions. Immutable activated master version; editing requires a reviewed successor |

### BOMComponents

Each raw material, component or sub-assembly consumed to build one unit of the parent.

Parent record: BOMs.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| BOM | reference | Yes | → BOMs |
| Component | reference | Yes | → Products (Raw, Component, SubAssembly) |
| QuantityPer | number | Yes | Per one parent |
| UOM | select | Yes | EA, KG, L, M |
| ScrapPercent | number | No | Expected scrap, default 0 |

### Routings

Routing header: the sequence of operations to build a product, versioned with the BOM.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| RoutingNumber | text | Yes |  |
| Product | reference | Yes | → Products |
| Version | text | Yes |  |
| Status | select | Yes | Draft, Active, Obsolete |
| EffectiveFrom | date | Yes |  |
| ApprovedRevision | reference | No | → DocumentRevisions. Immutable activated master version; editing requires a reviewed successor |

### RoutingOperations

Each operation in the routing: where it runs, how long setup and run take, whether it needs inspection.

Parent record: Routings.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| Routing | reference | Yes | → Routings |
| OperationNumber | number | Yes | Sequence, e.g. 10, 20, 30 |
| Description | text | Yes |  |
| WorkCenter | reference | Yes | → WorkCenters |
| SetupTimeMinutes | number | Yes |  |
| RunTimeMinutesPerUnit | number | Yes |  |
| QualityCheckRequired | toggle | Yes |  |

### WorkCenters

Machines, cells and assembly stations with capacity and a burdened hourly rate.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| WorkCenterCode | text | Yes |  |
| Name | text | Yes |  |
| Entity | reference | Yes | → Entities |
| Department | reference | Yes | → Departments |
| Supervisor | reference | No | → Employees (the Plant Manager for the cell) |
| CapacityHoursPerDay | number | Yes |  |
| EfficiencyPercent | number | Yes | 0–100, default 85 |
| HourlyRate | currency | Yes | Approved combined labour-plus-overhead hourly reference; must equal LaborRate + OverheadRate on the same basis and never be added again |
| Active | toggle | Yes |  |
| LaborRate | currency | Yes | Entity-functional currency per approved labour hour |
| OverheadRate | currency | Yes | Entity-functional currency per approved burden-basis hour |
| RateBasis | select | Yes | LaborHours, MachineHours. LaborRate remains labour-hour based; OverheadRate uses this declared basis |
| RateVersion | text | Yes | Effective approved snapshot retained when a work order is released |

### LeaveTypes

Leave policy per entity: what is paid, how it accrues, how much carries over, whether evidence is required.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| Code | text | Yes | e.g. VAC, SICK, PARENTAL |
| Name | text | Yes |  |
| Entity | reference | Yes | → Entities |
| Paid | toggle | Yes | Unpaid types reduce the pay statement |
| AccrualRule | select | Yes | Annual, Monthly, PerHour, None |
| AccrualRate | number | No | Days per year, per month, or per hour worked |
| MaxCarryoverDays | number | No |  |
| RequiresAttachment | toggle | Yes | e.g. a medical certificate |
| Active | toggle | Yes |  |
| ApprovedRevision | reference | No | → DocumentRevisions. Immutable activated master version; editing requires a reviewed successor |

### HolidayCalendars

Public holidays per entity or country, one row per holiday, used to count leave days and to set pay dates.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| Entity | reference | Yes | → Entities |
| Country | text | Yes |  |
| HolidayDate | date | Yes |  |
| Name | text | Yes |  |
| Year | text | Yes |  |

### PayComponents

Earning, deduction, employer-contribution and tax codes per jurisdiction, each with the account it posts to. The payroll engine computes a statement as a set of these.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| Code | text | Yes | e.g. BASE, OT150, PAYE, PENSION-EE, PENSION-ER |
| Name | text | Yes |  |
| ComponentType | select | Yes | Earning, Deduction, EmployerContribution, Tax. Ordinary amounts are positive magnitudes; correction deltas may be signed with original-line lineage |
| CalculationBasis | select | Yes | Fixed, Hourly, PercentOfGross, StatutoryTable. Each requires effective parameters, eligibility, calculation base and reviewed source in EmployeePayComponents |
| Taxable | toggle | Yes |  |
| Statutory | toggle | Yes | Rate or table maintained by the payroll tax service |
| Jurisdiction | reference | No | → TaxJurisdictions (blank for company-wide components) |
| GLAccount | reference | Yes | → ChartOfAccounts |
| Active | toggle | Yes |  |
| ApprovedRevision | reference | No | → DocumentRevisions. Immutable activated master version; editing requires a reviewed successor |
| LiabilityAccount | reference | No | → ChartOfAccounts. Required where a deduction/tax/contribution creates a liability |
| EmployerTax | toggle | Yes | True only for statutory employer tax; pensions/benefits remain EmployerContribution without being reported as employer tax |

### AssetCategories

Asset classes with the three accounts each posts to and the default method and life, so a depreciation run builds its journal from the category.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| Code | text | Yes |  |
| Name | text | Yes | Buildings, Machinery, Vehicles, IT, Furniture, Land |
| AssetAccount | reference | Yes | → ChartOfAccounts |
| AccumulatedDepreciationAccount | reference | Yes | → ChartOfAccounts |
| DepreciationExpenseAccount | reference | Yes | → ChartOfAccounts |
| DefaultMethod | select | Yes | StraightLine, DecliningBalance, DoubleDeclining, UnitsOfProduction, None |
| DefaultUsefulLifeMonths | number | No | Blank for land |
| Active | toggle | Yes |  |
| ApprovedRevision | reference | No | → DocumentRevisions. Immutable activated master version; editing requires a reviewed successor |

### Leads

Unqualified interest from a person at a company, before it is worth an opportunity. Converting it creates or matches the account, the contact person and the opportunity.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| LeadNumber | text | Yes |  |
| Entity | reference | Yes | → Entities |
| CompanyName | text | Yes |  |
| ContactName | text | Yes |  |
| Title | text | No |  |
| Email | text | No |  |
| Phone | text | No |  |
| Source | select | Yes | Web, Referral, Event, Partner, Outbound, InboundCall, Import |
| Status | select | Yes | New, Contacted, Qualified, Unqualified, Converted |
| Owner | reference | Yes | → Employees |
| CreatedDate | date | Yes |  |
| LastActivityDate | date | No | Rollup from Activities |
| QualifiedDate | date | No |  |
| ConvertedAccount | reference | No | → Accounts |
| ConvertedContactPerson | reference | No | → ContactPersons |
| ConvertedOpportunity | reference | No | → Opportunities |
| UnqualifiedReason | select | No | NoBudget, NoFit, Competitor, NoResponse, Duplicate |
| Notes | longtext | No |  |

### Opportunities

A qualified deal with an account and a primary contact, an amount, a stage and an expected close date. The forecast is built from these.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| OpportunityNumber | text | Yes |  |
| Name | text | Yes |  |
| Entity | reference | Yes | → Entities |
| Account | reference | Yes | → Accounts (Customer or Both) |
| PrimaryContact | reference | No | → ContactPersons |
| Stage | select | Yes | Qualify, Discovery, Proposal, Negotiation, ClosedWon, ClosedLost |
| Amount | currency | Yes |  |
| Currency | reference | Yes | → Currencies |
| Probability | number | Yes | 0–100, defaulted from Stage, editable |
| ForecastCategory | select | Yes | Pipeline, BestCase, Commit, Closed, Omitted |
| ExpectedCloseDate | date | Yes |  |
| CreatedDate | date | Yes |  |
| ClosedDate | date | No |  |
| Owner | reference | Yes | → Employees |
| SourceLead | reference | No | → Leads |
| PriceBook | reference | No | → PriceBooks |
| LostReason | select | No | Price, Competitor, NoDecision, Timing, Fit |
| NextStep | text | No |  |

### Activities

Calls, emails, meetings and tasks logged against a person at an account, and related to a lead, opportunity, quote, contract or order.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| ActivityNumber | text | Yes |  |
| ActivityType | select | Yes | Call, Email, Meeting, Task, Note |
| Subject | text | Yes |  |
| RelatedType | select | Yes | Lead, Opportunity, Account, Quote, Contract, SalesOrder, Invoice |
| RelatedID | text | Yes | Number of the related record |
| Account | reference | No | → Accounts |
| ContactPerson | reference | No | → ContactPersons (who was spoken to) |
| Owner | reference | Yes | → Employees |
| DueDate | date | Yes |  |
| CompletedAt | date | No |  |
| Status | select | Yes | Open, Completed, Cancelled |
| Outcome | longtext | No |  |

### Quotes

An immutable submitted offer revision with authorised list/cost/tax evidence and the eligible quote decision; customer acceptance binds exactly that revision.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| QuoteNumber | text | Yes |  |
| Entity | reference | Yes | → Entities |
| Customer | reference | Yes | → Accounts |
| ContactPerson | reference | No | → ContactPersons (addressed to) |
| Opportunity | reference | No | → Opportunities |
| QuoteDate | date | Yes |  |
| ValidUntil | date | Yes |  |
| Status | select | Yes | Draft, Submitted, Approved, Sent, Accepted, Rejected, Expired, Converted |
| Currency | reference | Yes | → Currencies |
| ExchangeRate | number | Yes | To the entity's functional currency on QuoteDate |
| PriceBook | reference | Yes | → PriceBooks |
| Subtotal | formula | Yes | Sum of QuoteItems.LineTotal at offered net unit price; line discounts already included |
| TaxTotal | formula | Yes | Sum of frozen additive tax only; withholding retained as settlement classification |
| GrandTotal | formula | Yes | Subtotal + TaxTotal, with approved rounding; no second discount deduction |
| FunctionalTotal | formula | Yes | fx: GrandTotal × ExchangeRate |
| MaxDiscountPercent | formula | No | Nullable maximum derived discount over all offered lines; any unknown/zero authorised list makes the aggregate unavailable and requires an explicit independently bounded pricing exception |
| MinMarginPercent | formula | No | Nullable minimum across all offered lines; any MarginKnown false keeps the aggregate unavailable and the exact unknown line in independent exception review |
| Owner | reference | Yes | → Employees |
| ApprovedBy | reference | No | → Employees |
| ConvertedOrder | reference | No | → SalesOrders |
| RevisionNumber | number | Yes | Monotonic working revision; submitted/accepted/posted content is immutable |
| CurrentRevision | reference | No | → DocumentRevisions. Exact frozen submitted or posted content and source snapshots |
| CreatedBy | reference | No | → Employees. Actual originating person, retained across role changes |
| SentAt | datetime | No | Actual provider/manual dispatch evidence for this revision; outbound intent is not sent evidence |
| AcceptedRevision | reference | No | → DocumentRevisions. Exact accepted scope and commercial values |
| SignatureRequest | reference | No | → SignatureRequests. Complete accepted evidence, not a recipient-signed notification |
| MarginReviewStatus | select | Yes | Known, ReviewRequired, ReviewedException |

### QuoteItems

Quote lines with list price, offered price, discount, tax, and the standard cost and margin the approving manager sees.

Parent record: Quotes.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| Quote | reference | Yes | → Quotes |
| LineNumber | number | Yes |  |
| Product | reference | Yes | → Products |
| Description | text | No |  |
| Quantity | number | Yes |  |
| ListPrice | currency | No | Nullable authorised effective PriceBookEntries price in quote currency; ListPriceKnown false blocks owner self-approval and routes a documented independent pricing exception, never substitutes zero |
| UnitPrice | currency | Yes | Offered net unit price in quote currency, after all line discount; copied unchanged to accepted order/invoice allocation |
| DiscountPercent | number | No | Derived percentage against ListPrice, not a second adjustment to UnitPrice |
| LineTotal | formula | Yes | fx: Quantity × UnitPrice |
| StandardCost | currency | No | Nullable entity-specific cost converted to quote currency; CostKnown false retains unavailable margin and requires independent reviewed exception rather than a fabricated zero |
| MarginPercent | formula | No | fx: 100 × (UnitPrice − StandardCost) / UnitPrice only when UnitPrice > 0 and CostKnown; otherwise null and MarginKnown false, with independent Sales Manager review |
| TaxCode | reference | No | → TaxCodes |
| TaxAmount | formula | Yes | fx: reviewed eligible LineTotal tax basis × effective additive rate / 100, rounded by policy; withholding recorded separately |
| PriceBookEntry | reference | No | → PriceBookEntries |
| CostProfile | reference | No | → ProductPostingProfiles |
| CostRate | reference | No | → ExchangeRates. Required if profile cost currency differs |
| TaxSnapshotJSON | longtext | Yes | Jurisdiction, supply facts, date, rate, exemption, taxable base and rounding; missing evidence blocks release |
| ListPriceKnown | toggle | Yes | True only with reviewed authorised price source; zero is a known price, not an unknown sentinel |
| CostKnown | toggle | Yes | True only with reviewed entity/currency cost source; legitimate zero cost remains distinct from unknown |
| MarginKnown | toggle | Yes | True only when UnitPrice > 0 and CostKnown; nullable MarginPercent otherwise |

### Contracts

Executed customer terms and effective line schedules. Unique cycle records control delivery versus direct billing, amendment and renewal without overlapping entitlement.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| ContractNumber | text | Yes |  |
| Entity | reference | Yes | → Entities |
| Customer | reference | Yes | → Accounts |
| ContactPerson | reference | No | → ContactPersons (signatory) |
| ContractType | select | Yes | Supply, Maintenance, Subscription, Framework |
| Status | select | Yes | Draft, PendingSignature, Active, Renewed, Terminated, Expired |
| StartDate | date | Yes |  |
| EndDate | date | Yes |  |
| TotalContractValue | formula | Yes | Sum of accepted effective ContractItems.LineValue; superseded/cancelled future cycles excluded, historical earned scope retained |
| Currency | reference | Yes | → Currencies |
| PriceBook | reference | No | → PriceBooks |
| NextBillingDate | date | No | Earliest ContractItems.NextOrderDate |
| AutoRenew | toggle | Yes |  |
| RenewalNoticeDays | number | No |  |
| RenewedTo | reference | No | → Contracts (self; the successor version) |
| Owner | reference | Yes | → Employees |
| SignedAt | date | No | Business-date projection of complete valid SignatureRequests completion |
| RevisionNumber | number | Yes | Monotonic working revision; submitted/accepted/posted content is immutable |
| CurrentRevision | reference | No | → DocumentRevisions. Exact frozen submitted or posted content and source snapshots |
| CreatedBy | reference | No | → Employees. Actual originating person, retained across role changes |
| AcceptedRevision | reference | No | → DocumentRevisions |
| SignatureRequest | reference | No | → SignatureRequests |
| AmendsContract | reference | No | → Contracts. Successor signed delta/replacement scope; no overlapping active billing entitlement |
| RenewalPolicyJSON | longtext | Yes | Accepted term end, notice, frequency, eligible recurring lines and agreed price basis; no automatic double uplift |

### ContractItems

What the contract delivers: product, quantity per cycle, price, billing frequency and the next date an order or invoice is generated.

Parent record: Contracts.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| Contract | reference | Yes | → Contracts |
| LineNumber | number | Yes |  |
| Product | reference | Yes | → Products |
| Quantity | number | Yes | Per cycle |
| UnitPrice | currency | Yes | Accepted net unit price per BillingFrequency cycle in contract currency; no monthly normalisation is applied to invoice price |
| BillingFrequency | select | Yes | Monthly, Quarterly, Annual, OnDelivery |
| StartDate | date | Yes |  |
| EndDate | date | Yes |  |
| NextOrderDate | date | No | Projection of next unconsumed DeliveryOrder cycle; DirectBilling cycles use their own due dates |
| Cycles | number | Yes | Number of accepted scheduled cycles; actual unique occurrences are ContractCycles, no duplicate order and direct bill for one occurrence |
| LineValue | formula | Yes | fx: Quantity × UnitPrice × Cycles |
| Status | select | Yes | Active, Suspended, Ended |
| TaxCode | reference | No | → TaxCodes |
| CyclePolicyJSON | longtext | Yes | Exclusive start/inclusive or exclusive end convention, partial-period proration, quantity, rounding and delivery-versus-direct-billing route agreed in signed revision |

### SalesOrders

A confirmed customer order that drives allocation, production, shipment and invoicing, in the customer's currency with the rate to the entity's functional currency.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| CampusCode | text | No | Reviewed operating-campus dimension within Entity; never a legal-entity or access-control substitute. |
| AcademicTerm | text | No | Reviewed term label for operating commitments; dates and fiscal periods remain independently authoritative. |
| ExternalAcademicBillingReference | text | No | Purpose-limited opaque identifier from the authoritative academic billing source; no tuition calculation or student-record payload. |
| SalesOrderNumber | text | Yes |  |
| Entity | reference | Yes | → Entities |
| Customer | reference | Yes | → Accounts (Customer or Both) |
| ContactPerson | reference | No | → ContactPersons |
| SourceQuote | reference | No | → Quotes |
| Contract | reference | No | → Contracts |
| OrderDate | date | Yes |  |
| RequestedDeliveryDate | date | Yes |  |
| PromiseDate | date | No | Set by availability or MRP |
| Status | select | Yes | Draft, Submitted, OnCreditHold, Approved, InProduction, Allocated, Picked, PartiallyShipped, Shipped, Invoiced, Closed, Cancelled |
| Currency | reference | Yes | → Currencies |
| ExchangeRate | number | Yes | To functional currency on OrderDate |
| PriceBook | reference | No | → PriceBooks |
| TotalAmount | formula | Yes | Sum of canonical net SalesOrderItems.LineTotal; accepted allocation amounts round exactly to accepted quote/contract scope |
| TaxTotal | formula | Yes | fx: SUM(SalesOrderItems.TaxAmount) |
| GrandTotal | formula | Yes | fx: TotalAmount + TaxTotal |
| FunctionalTotal | formula | Yes | fx: GrandTotal × ExchangeRate |
| SalesRep | reference | Yes | → Employees (owner; commission and margin reporting) |
| SalesManager | reference | Yes | → Employees |
| ApprovedBy | reference | No | → Employees |
| Fulfilment | select | Yes | Stock, MakeToOrder, DropShip |
| IntercompanyPartnerOrder | reference | No | → PurchaseOrders (the buying entity's order when the customer is a group entity) |
| RevisionNumber | number | Yes | Monotonic working revision; submitted/accepted/posted content is immutable |
| CurrentRevision | reference | No | → DocumentRevisions. Exact frozen submitted or posted content and source snapshots |
| CreatedBy | reference | No | → Employees. Actual originating person, retained across role changes |
| CreditExposure | reference | No | → CreditExposures |
| CreditException | reference | No | → Approvals. Specific amount/currency/expiry exception; separate from hold clearance |

### SalesOrderItems

Order lines with price, discount, source warehouse, tax, promise date, and the allocated, shipped and invoiced quantities.

Parent record: SalesOrders.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| SalesOrder | reference | Yes | → SalesOrders |
| LineNumber | number | Yes |  |
| Product | reference | Yes | → Products |
| Quantity | number | Yes |  |
| UnitPrice | currency | Yes |  |
| DiscountPercent | number | No | Derived disclosure copied from accepted quote; never deducted again |
| LineTotal | formula | Yes | fx: Quantity × UnitPrice rounded once; UnitPrice is already net, so DiscountPercent is disclosure only |
| Warehouse | reference | No | → Warehouses (source) |
| TaxCode | reference | No | → TaxCodes |
| TaxAmount | formula | Yes | fx: frozen eligible LineTotal taxable basis × effective additive TaxCode rate / 100, rounded once; withholding is separate settlement classification, nonrecoverable purchase tax follows the supply posting class |
| QuantityAllocated | number | Yes | Active InventoryReservations attributed to this line, excluding issued/released claims |
| QuantityShipped | number | Yes | BaselineShippedQuantity plus net new actual dispatch; returns tracked separately and do not erase dispatch history |
| QuantityInvoiced | number | Yes | BaselineInvoicedQuantity plus net posted new billing allocations, bounded by authorised remaining entitlement |
| WorkOrder | reference | No | → WorkOrders (make-to-order lines) |
| PromiseDate | date | No |  |
| Status | select | Yes | Open, Allocated, PartiallyShipped, Shipped, Invoiced, Cancelled |
| SourceQuoteItem | reference | No | → QuoteItems |
| ContractCycle | reference | No | → ContractCycles |
| OriginalPromiseAt | datetime | No | Original accepted delivery/dispatch cutoff retained for performance |
| CancelledQuantity | number | Yes | Approved unfulfilled cancellation only; cannot cancel dispatched/invoiced scope without linked correction |
| BaselineShippedQuantity | number | Yes | Nonposting cutover actual dispatched quantity; new dispatch cannot exceed remaining scope |
| BaselineInvoicedQuantity | number | Yes | Nonposting cutover billed quantity; prior net values/source IDs retained in MigrationItems |
| DropShipPurchaseOrderItem | reference | No | → PurchaseOrderItems. Required for DropShip; approved same-entity vendor supply linked to this exact customer demand and net remaining quantity |

### Shipments

Outbound deliveries against a sales order, with carrier, tracking and proof of delivery. The lines say which order lines, lots and serials went out.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| ShipmentNumber | text | Yes |  |
| Entity | reference | Yes | → Entities |
| SalesOrder | reference | Yes | → SalesOrders |
| Customer | reference | Yes | → Accounts |
| Warehouse | reference | Yes | → Warehouses. Actual dispatch warehouse for held goods; designated InTransitOut economic ownership location for DropShip, with no implied seller physical custody |
| ShipDate | date | Yes |  |
| Carrier | select | Yes | UPS, FedEx, DHL, USPS, Freight, Own |
| TrackingNumber | text | No |  |
| FreightCost | currency | No |  |
| Status | select | Yes | Planned, Picked, Packed, Shipped, Delivered, Returned |
| PackedBy | reference | No | → Employees |
| DeliveredAt | date | No |  |
| ProofOfDelivery | attachment | No |  |
| JournalEntry | reference | No | → JournalEntries (cost of sales) |
| DispatchedAt | datetime | No | Actual carrier handover, sole shipment inventory issue evidence |
| DeliveredTimestamp | datetime | No | Actual customer delivery evidence; delivery is not another stock issue |
| Event | reference | No | → IntegrationEvents |

### ShipmentItems

One line per order line shipped: quantity, lot, serial and the warehouse it left, so partial shipment, recall and shipment-based invoicing all work from the line.

Parent record: Shipments.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| Shipment | reference | Yes | → Shipments |
| SalesOrderItem | reference | Yes | → SalesOrderItems |
| Product | reference | Yes | → Products |
| QuantityShipped | number | Yes |  |
| LotNumber | text | No | Required when Product.LotControlled |
| SerialNumber | text | No | Required when Product.SerialControlled |
| Warehouse | reference | Yes | → Warehouses. Same location rule as Shipment; DropShip uses the approved InTransitOut ownership location |
| UnitCost | currency | Yes | At the costing method; posts cost of sales |
| StockMovement | reference | No | → StockMovements |
| Reservation | reference | No | → InventoryReservations. Required for owned-stock picking; absent only for evidence-bound DropShip fulfilment without warehouse picking |
| StockEvent | reference | No | → StockEvents |

### Invoices

Customer debit invoices and positive-magnitude credit documents with separate posting, delivery, settlement and credit-allocation evidence.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| CampusCode | text | No | Campus dimension inherited from the accepted source or independently reviewed billing mapping. |
| AcademicTerm | text | No | Retained source term label; does not alter contractual due dates or accounting recognition. |
| ExternalAcademicBillingReference | text | No | Reviewed external source identifier; claimed source scope cannot also be reissued as a local academic charge. |
| InvoiceNumber | text | Yes |  |
| DocumentType | select | Yes | Invoice, CreditNote |
| CreditFor | reference | No | → Invoices (self; the invoice a credit note reduces) |
| Entity | reference | Yes | → Entities |
| Customer | reference | Yes | → Accounts |
| ContactPerson | reference | No | → ContactPersons (billing contact) |
| SourceOrder | reference | No | → SalesOrders |
| Shipment | reference | No | → Shipments |
| Contract | reference | No | → Contracts (contract billing) |
| SalesRep | reference | No | → Employees |
| InvoiceDate | date | Yes |  |
| DueDate | date | Yes | From PaymentTerms.DueDays |
| Period | reference | Yes | → AccountingPeriods |
| Currency | reference | Yes | → Currencies |
| ExchangeRate | number | Yes | To functional currency on InvoiceDate |
| Status | select | Yes | Draft, PendingApproval, Approved, Sent, PartiallyPaid, Paid, Disputed, Void, WrittenOff |
| Subtotal | formula | Yes | fx: SUM(InvoiceItems.LineTotal) |
| TaxTotal | formula | Yes | fx: SUM(InvoiceItems.TaxAmount) |
| TotalAmount | formula | Yes | Positive debit or credit-document magnitude in Currency; ledger sign is determined by DocumentType, never a second negative credit multiplication |
| FunctionalTotal | formula | Yes | Original functional carrying value at posting, immutable; CurrentCarryingAmount includes subsequent open-item revaluation |
| AmountPaid | currency | Yes | BaselineCashPaid plus net new cash portions in invoice currency; excludes discounts/write-offs/withholding/credits, and credit documents do not overwrite original cash |
| AmountOutstanding | formula | Yes | fx: debit TotalAmount − AmountPaid − SettlementDiscounts − SettlementWriteOffs − WithholdingSettled − CreditsApplied, including retained cutover baseline plus net new effects; CreditNote uses CreditAvailable separately |
| PaymentTerms | reference | Yes | → PaymentTerms |
| DunningLevel | number | No | 0 to 3, raised by the dunning run |
| ApprovedBy | reference | No | → Employees (independent Controller for every regular Invoice revision; credit-note authority follows its separate existing policy) |
| JournalEntry | reference | No | → JournalEntries |
| RevisionNumber | number | Yes | Monotonic working revision; submitted/accepted/posted content is immutable |
| CurrentRevision | reference | No | → DocumentRevisions. Exact frozen submitted or posted content and source snapshots |
| CreatedBy | reference | No | → Employees. Actual originating person, retained across role changes |
| SettlementDiscounts | currency | Yes | Posted approved discounts in document currency |
| SettlementWriteOffs | currency | Yes | Posted approved write-offs in document currency |
| CreditsApplied | currency | Yes | Posted CreditApplications against this debit invoice |
| CurrentCarryingAmount | currency | Yes | Functional value of remaining open balance, including unreversed RevaluationLines |
| CreditAvailable | currency | Yes | Credit-note magnitude less posted applications/refunds; active reservations also reduce allocatable credit |
| PostedAt | datetime | No | Local receivable/credit posting time; sending is separately acknowledged |
| PostingDate | date | No | Actual date in Period; original InvoiceDate retained |
| TaxSnapshotJSON | longtext | Yes | Frozen tax policy/bases and effective evidence |
| WithholdingSettled | currency | Yes | Approved withholding portion settled in invoice currency, credited against AR to withholding receivable |
| PostingState | select | Yes | Unposted, Posted, Reversed, MigrationOpening. Independent of send/paid lifecycle |
| BaselineCashPaid | currency | Yes | Approved nonposting cutover cash applied in document currency, zero for native invoice |
| BaselineNonCashSettled | currency | Yes | Approved cutover discount/write-off/withholding totals with component split in MigrationItems |
| BaselineCreditsApplied | currency | Yes | Approved cutover credit usage; prior source IDs retained |

### InvoiceItems

Invoice lines with the shipment line they bill, the revenue account, cost centre and tax code they post to.

Parent record: Invoices.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| Invoice | reference | Yes | → Invoices |
| LineNumber | number | Yes |  |
| Product | reference | No | → Products |
| ShipmentItem | reference | No | → ShipmentItems (blank for contract and service lines) |
| ContractItem | reference | No | → ContractItems |
| Description | text | Yes |  |
| Quantity | number | Yes |  |
| UnitPrice | currency | Yes | Canonical net price from accepted SalesAllocations or ContractCycles; no second line discount |
| LineTotal | formula | Yes | fx: Quantity × UnitPrice rounded with last-allocation remainder so billed net never exceeds accepted scope |
| RevenueAccount | reference | Yes | → ChartOfAccounts |
| CostCenter | reference | No | → CostCenters |
| TaxCode | reference | No | → TaxCodes |
| TaxAmount | formula | Yes | fx: frozen eligible net taxable basis × additive rate / 100; credit reverses original tax proportionally |
| SalesAllocation | reference | No | → SalesAllocations |
| ContractCycle | reference | No | → ContractCycles |
| OriginalInvoiceItem | reference | No | → InvoiceItems. Credit/correction lineage |
| StandardCostSnapshot | currency | No | Original entity-functional standard cost of billed quantity |
| ActualCostSnapshot | currency | No | Carried shipment cost of billed quantity; service cost uses reviewed source evidence |

### PaymentsReceived

A real receipt recognises bank cash once against an unapplied-receipts liability; later allocation reclassifies that liability to the customer invoice.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| PaymentNumber | text | Yes |  |
| Entity | reference | Yes | → Entities |
| Customer | reference | No | → Accounts (blank until identified) |
| PaymentDate | date | Yes |  |
| Period | reference | Yes | → AccountingPeriods |
| Method | select | Yes | ACH, Wire, Check, Card, Cash, Other |
| Amount | currency | Yes |  |
| Currency | reference | Yes | → Currencies |
| ExchangeRate | number | Yes | To functional currency on PaymentDate |
| FunctionalAmount | formula | Yes | fx: Amount × ExchangeRate |
| BankAccount | reference | Yes | → BankAccounts |
| BankStatementLine | reference | No | → BankStatementLines |
| AmountApplied | currency | Yes | Approved cutover applied receipt-currency cash plus net new posted PaymentApplications.AmountApplied; historical applications are nonposting |
| AmountUnapplied | formula | Yes | fx: Amount − AmountApplied − payment-funded refunds, including cutover baseline; availability further subtracts active reservations |
| Status | select | Yes | Unapplied, PartiallyApplied, Applied, Reversed |
| Reference | text | No | Remittance reference |
| JournalEntry | reference | No | → JournalEntries. Receipt posts once Dr Bank / Cr Unapplied receipts liability, including when Customer is not yet known |
| PostedAt | datetime | No | Actual local cash posting time |
| ReversalOf | reference | No | → PaymentsReceived. Compensating entry; original cash record remains immutable |
| Event | reference | No | → IntegrationEvents. Authenticated source or recorded manual evidence |
| BankCarryingAmount | currency | No | Functional bank-lot value consumed for outbound cash; bank disposal FX is separate from bill settlement FX |
| ReservedAmount | currency | Yes | Active application/refund reservations in receipt currency |
| AvailableAmount | currency | Yes | AmountUnapplied − ReservedAmount, validated nonnegative |
| UnappliedCarryingAmount | currency | Yes | Functional carrying value of unapplied liability remaining; revalue separately where applicable |

### PaymentApplications

Invoice settlement using separate payment-currency cash and invoice-currency cash/discount/write-off amounts, with current-carrying FX and reversal lineage.

Parent record: PaymentsReceived.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| Payment | reference | Yes | → PaymentsReceived |
| Invoice | reference | Yes | → Invoices |
| AmountApplied | currency | Yes | Cash consumed in payment currency only; never subtract an invoice-currency amount from the receipt |
| DiscountTaken | currency | No | Positive approved discount in invoice currency; not cash consumed |
| WriteOff | currency | No | Positive approved write-off in invoice currency; not cash consumed |
| FunctionalAmount | currency | Yes | Functional settlement value of cash plus approved noncash invoice portions at their retained valuation |
| RealisedGainLoss | formula | Yes | fx: SettlementFXDelta + RevaluationReleased, signed gain-positive total on settled scope; reclassification moves RevaluationReleased from unrealised to realised with zero net P&L |
| AppliedAt | date | Yes | Business date of PostedAt |
| AppliedBy | reference | Yes | → Employees (or the matcher's service account) |
| InvoiceAmount | currency | Yes | CashInvoiceAmount + DiscountTaken + WriteOff + WithholdingAmount in invoice currency |
| CashInvoiceAmount | currency | Yes | Invoice-currency value funded by AmountApplied cash |
| PaymentRate | reference | No | → ExchangeRates |
| DocumentRate | reference | No | → ExchangeRates |
| CarryingAmountSettled | currency | Yes | Proportionate current functional carrying amount released atomically |
| RevaluationReleased | currency | Yes | Signed gain-positive prior unrealised amount attributable to settled invoice scope, included in carrying removal; reclassified once, never recognised as an additional net gain |
| Status | select | Yes | Reserved, Posted, Reversed, Cancelled |
| PostedAt | datetime | No | Actual application posting time |
| ReversalOf | reference | No | → PaymentApplications |
| Decision | reference | No | → Approvals. Required for noncash exception outside eligible policy |
| OperationKey | text | Yes | Unique effect identity; repeats return the same result |
| JournalEntry | reference | No | → JournalEntries. Dr unapplied liability and noncash expense / Cr AR, plus incremental FX |
| WithholdingAmount | currency | Yes | Approved invoice-currency withholding receivable; separately evidenced, neither cash nor write-off |
| SettlementFXDelta | currency | Yes | FunctionalAmount − CarryingAmountSettled, the only additional net AR settlement gain/loss |
| FXReclassificationJournal | reference | No | → JournalEntries. Equal and opposite unrealised-to-realised lines for RevaluationReleased; zero net P&L |

### CustomerReturns

A return authorisation against a shipped line: what came back, why, what was done with it, and the credit note it produced.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| RMANumber | text | Yes |  |
| Entity | reference | Yes | → Entities |
| Customer | reference | Yes | → Accounts |
| ShipmentItem | reference | Yes | → ShipmentItems |
| Product | reference | Yes | → Products |
| Quantity | number | Yes | Cumulative return cannot exceed dispatched quantity net prior returns; credit/restock are separate authorised effects |
| LotNumber | text | No |  |
| Reason | select | Yes | Damaged, Defective, WrongItem, NotOrdered, Warranty, Other |
| Status | select | Yes | Requested, Authorised, Received, Inspected, Credited, Closed, Rejected |
| RequestedDate | date | Yes |  |
| ReceivedDate | date | No |  |
| Warehouse | reference | No | → Warehouses (Returns) |
| Disposition | select | No | Pending, Restock, Scrap, Repair, ReturnToVendor |
| CreditNote | reference | No | → Invoices. Actual approved credit scope; return request does not itself erase AR or shipment |
| AuthorisedBy | reference | No | → Employees |
| ReceivedAt | datetime | No | Actual return custody arrival |
| StockEvent | reference | No | → StockEvents. Accepted restock at traced original carried cost |
| ReturnScopeJSON | longtext | Yes | Original shipment identities, condition, inspection, prior returns and credit allocation |

### Requisitions

A request to buy, from a person or from an MRP planned order, approved before a buyer acts on it.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| RequisitionNumber | text | Yes |  |
| Entity | reference | Yes | → Entities |
| RequestedBy | reference | Yes | → Employees |
| CostCenter | reference | Yes | → CostCenters |
| NeedDate | date | Yes |  |
| Source | select | Yes | MRP, Manual |
| PlannedOrder | reference | No | → PlannedOrders (when Source is MRP) |
| Status | select | Yes | Draft, Submitted, Approved, Rejected, Ordered, Cancelled |
| TotalEstimate | formula | Yes | fx: SUM(RequisitionItems.LineEstimate) |
| Currency | reference | Yes | → Currencies |
| ApprovedBy | reference | No | → Employees (the cost centre manager or the Buyer's approver within POApprovalLimit) |
| SubmittedAt | date | No |  |
| Justification | longtext | No |  |
| RevisionNumber | number | Yes | Monotonic working revision; submitted/accepted/posted content is immutable |
| CurrentRevision | reference | No | → DocumentRevisions. Exact frozen submitted or posted content and source snapshots |
| CreatedBy | reference | No | → Employees. Actual originating person, retained across role changes |

### RequisitionItems

What is wanted: a product or a description, quantity, estimated cost, where it goes, and the purchase order line that eventually covered it.

Parent record: Requisitions.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| Requisition | reference | Yes | → Requisitions |
| LineNumber | number | Yes |  |
| Product | reference | No | → Products |
| Description | text | Yes |  |
| Quantity | number | Yes |  |
| UOM | select | Yes | EA, KG, L, M, Hour |
| EstimatedUnitCost | currency | Yes | From the last purchase or the preferred vendor's price |
| LineEstimate | formula | Yes | fx: Quantity × EstimatedUnitCost |
| NeedDate | date | Yes |  |
| ExpenseAccount | reference | No | → ChartOfAccounts (non-stock lines) |
| Warehouse | reference | No | → Warehouses (stock lines) |
| PurchaseOrderItem | reference | No | → PurchaseOrderItems (once ordered) |
| Status | select | Yes | Open, Ordered, Cancelled |

### PurchaseOrders

Orders to vendors for materials, services and capital, built from approved requisitions, in the vendor's currency with the rate to the entity's functional currency.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| PurchaseOrderNumber | text | Yes |  |
| Entity | reference | Yes | → Entities |
| Vendor | reference | Yes | → Accounts (Vendor or Both) |
| VendorContact | reference | No | → ContactPersons |
| OrderDate | date | Yes |  |
| RequiredDate | date | Yes |  |
| Status | select | Yes | Draft, Submitted, Approved, Sent, Acknowledged, PartiallyReceived, Received, Closed, Cancelled |
| Currency | reference | Yes | → Currencies |
| ExchangeRate | number | Yes | To functional currency on OrderDate |
| TotalAmount | formula | Yes | fx: SUM(PurchaseOrderItems.LineTotal) |
| FunctionalTotal | formula | Yes | fx: TotalAmount × ExchangeRate |
| PaymentTerms | reference | Yes | → PaymentTerms (from Accounts.VendorPaymentTerms) |
| Buyer | reference | Yes | → Employees |
| ApprovedBy | reference | No | → Employees. Eligible independent Buyer or Controller on every PO; cannot be Buyer or material editor of this revision |
| POType | select | Yes | Standard, Blanket, Capital, Service |
| RequestedBy | reference | No | → Employees (requisitioner) |
| IntercompanyPartnerOrder | reference | No | → SalesOrders (the selling entity's order when the vendor is a group entity) |
| RevisionNumber | number | Yes | Monotonic working revision; submitted/accepted/posted content is immutable |
| CurrentRevision | reference | No | → DocumentRevisions. Exact frozen submitted or posted content and source snapshots |
| CreatedBy | reference | No | → Employees. Actual originating person, retained across role changes |
| OriginalApprovedAmount | currency | No | Initial approved commitment in authority currency |
| CumulativeGrossIncreases | currency | Yes | Sum of positive line-level amendment increases converted on retained authority basis; decreases never hide new exposure |
| RoutingAmount | currency | Yes | max(current proposed commitment, OriginalApprovedAmount + CumulativeGrossIncreases) |

### PurchaseOrderItems

Order lines with the requisition line they cover, destination warehouse, account coding for non-stock lines, tax, and the received and billed quantities.

Parent record: PurchaseOrders.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| PurchaseOrder | reference | Yes | → PurchaseOrders |
| LineNumber | number | Yes |  |
| RequisitionItem | reference | No | → RequisitionItems |
| Product | reference | No | → Products |
| Description | text | Yes |  |
| QuantityOrdered | number | Yes |  |
| QuantityReceived | number | Yes | BaselineAcceptedQuantity plus net new accepted stock/service tranches or evidenced DropShipReceipt quantity; pending/rejected custody excluded and returns separately tracked |
| QuantityBilled | number | Yes | BaselineBilledQuantity plus net new posted BillMatchAllocations; credit restoration recorded once |
| UnitCost | currency | Yes |  |
| LineTotal | formula | Yes | fx: QuantityOrdered × UnitCost |
| RequiredDate | date | No |  |
| Warehouse | reference | No | → Warehouses (destination) |
| ExpenseAccount | reference | No | → ChartOfAccounts (non-inventory lines) |
| CostCenter | reference | No | → CostCenters |
| TaxCode | reference | No | → TaxCodes |
| Status | select | Yes | Open, PartiallyReceived, Received, Closed, Cancelled |
| OriginalQuantity | number | Yes | Initially approved quantity |
| RevisionHistoryJSON | longtext | Yes | Approved line amendments preserve fulfilled scope; gross increases and new coding route without netting unrelated decreases |
| AcceptedReturnedQuantity | number | Yes | Posted accepted-goods returns, separate from unaccepted custody return |
| BaselineAcceptedQuantity | number | Yes | Nonposting cutover accepted goods/services, including traced remaining GRNI |
| BaselineBilledQuantity | number | Yes | Nonposting cutover billed quantity; carried accepted/billed allocation identities retained |
| OriginalRequiredDate | date | Yes | First approved delivery promise; later rescheduling does not reset supplier performance |

### GoodsReceipts

Immutable arrival evidence for goods in custody; partial acceptance and owned-stock/GRNI recognition are separate records.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| ReceiptNumber | text | Yes |  |
| PurchaseOrder | reference | Yes | → PurchaseOrders |
| Entity | reference | Yes | → Entities |
| Warehouse | reference | Yes | → Warehouses |
| ReceiptDate | date | Yes |  |
| ReceivedBy | reference | Yes | → Employees (never the order's Buyer) |
| VendorDeliveryNote | text | No |  |
| Status | select | Yes | Pending, PendingQC, PartiallyAccepted, Accepted, Rejected, Posted. Receipt arrival remains immutable; acceptance/posting is tracked by partial ReceiptAcceptances |
| LineCount | number | Yes | Rollup from GoodsReceiptItems |
| JournalEntry | reference | No | → JournalEntries. Summary link only; each accepted tranche has its own stock/GRNI effect |
| ArrivedAt | datetime | Yes | Actual custody arrival time; source replay cannot create another receipt |
| Event | reference | No | → IntegrationEvents |

### GoodsReceiptItems

Received physical quantity, lot/serial and custody state, with cumulative independent acceptance and rejection evidence.

Parent record: GoodsReceipts.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| Receipt | reference | Yes | → GoodsReceipts |
| PurchaseOrderItem | reference | Yes | → PurchaseOrderItems |
| Product | reference | Yes | → Products |
| QuantityReceived | number | Yes | Immutable arrived quantity; never overwritten by acceptance, movement, return or subsequent shipment |
| QuantityAccepted | number | Yes | Cumulative accepted ReceiptAcceptances, never more than received; accepted returns retained separately |
| QuantityRejected | number | Yes | Cumulative rejected inspection disposition; accepted + rejected <= received |
| LotNumber | text | No | Required when Product.LotControlled |
| SerialNumber | text | No |  |
| ExpiryDate | date | No |  |
| Warehouse | reference | Yes | → Warehouses (Quarantine while PendingQC) |
| Status | select | Yes | Pending, PendingQC, Accepted, PartiallyAccepted, Rejected |
| ReceivedOnTime | toggle | Yes | Arrival against PurchaseOrderItems.OriginalRequiredDate for this quantity; report labels distinguish physical arrival, accepted supply and inspection delay |
| StockMovement | reference | No | → StockMovements. Optional first accepted movement; all partial effects are ReceiptAcceptances/StockEvents |
| CustodyOutstanding | number | Yes | Arrived less accepted less unaccepted quantities physically returned; quarantined custody is excluded from owned inventory |
| AcceptanceVersion | number | Yes | Atomic revision for cumulative acceptance and serial/lot checks |

### VendorReturns

Rejected or surplus material going back to the vendor, from a receipt line, with the vendor credit note that closes it.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| ReturnNumber | text | Yes |  |
| Entity | reference | Yes | → Entities |
| Vendor | reference | Yes | → Accounts |
| GoodsReceiptItem | reference | No | → GoodsReceiptItems. Required for ordinary received-stock return; absent only when DirectReceiptEvent supplies traced DropShip origin |
| QualityInspection | reference | No | → QualityInspections |
| Product | reference | Yes | → Products |
| Quantity | number | Yes | Bounded actual return scope; unaccepted custody return has no inventory/AP reversal, accepted return uses original cost and billed entitlement |
| LotNumber | text | No |  |
| Reason | select | Yes | Rejected, Damaged, OverDelivery, WrongItem, Other |
| Status | select | Yes | Open, Authorised, Shipped, Credited, Closed. Unaccepted custody return may close on physical acknowledgement without fictitious vendor credit |
| ReturnDate | date | No |  |
| Warehouse | reference | Yes | → Warehouses. Actual custody location for ordinary returns; designated InTransitOut ownership location for evidenced vendor-direct return, not proof the seller physically received goods |
| VendorCreditNote | reference | No | → Bills (DocumentType VendorCreditNote) |
| OpenedBy | reference | Yes | → Employees |
| Acceptance | reference | No | → ReceiptAcceptances. Present only for return of previously accepted goods |
| StockEvent | reference | No | → StockEvents |
| ReturnEvidence | attachment | No | Actual dispatch and supplier acknowledgement, plus credit settlement where financially due |
| DirectReceiptEvent | reference | No | → StockEvents. Alternative original posted DropShipReceipt; exact source quantity/cost and subsequent shipment/return/credit scope retained |

### Bills

Vendor debit and credit documents with line-level accepted-scope matches, independent exception approval and separate settlement components.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| BillNumber | text | Yes |  |
| DocumentType | select | Yes | Bill, VendorCreditNote |
| CreditFor | reference | No | → Bills (self; the bill a credit note reduces) |
| Entity | reference | Yes | → Entities |
| Vendor | reference | Yes | → Accounts |
| VendorInvoiceNumber | text | Yes | The vendor's own number |
| BillDate | date | Yes |  |
| DueDate | date | Yes | From PaymentTerms.DueDays |
| Period | reference | Yes | → AccountingPeriods |
| Currency | reference | Yes | → Currencies |
| ExchangeRate | number | Yes | To functional currency on BillDate |
| Status | select | Yes | Draft, Matching, Disputed, PendingApproval, Approved, Scheduled, PartiallyPaid, Paid, Void |
| Source | select | Yes | Portal, EDI, Manual |
| Subtotal | formula | Yes | fx: SUM(BillItems.LineTotal) |
| TaxTotal | formula | Yes | fx: SUM(BillItems.TaxAmount) |
| TotalAmount | formula | Yes | Positive bill or vendor-credit magnitude in Currency; posting sign follows DocumentType |
| FunctionalTotal | formula | Yes | Original posted functional amount, immutable |
| AmountPaid | currency | Yes | BaselineCashPaid plus net new cash portions in bill currency; noncash settlement components are separate |
| AmountOutstanding | formula | Yes | fx: TotalAmount − AmountPaid − SettlementDiscounts − WithholdingSettled − SettlementWriteOffs − CreditsApplied, subject to bounded atomic allocations |
| PurchaseOrder | reference | No | → PurchaseOrders (convenience; the match is on the lines) |
| MatchVariance | formula | Yes | Sum of BillMatchAllocations price/quantity variances on allocated accepted portions, not subtraction of full PO or receipt totals |
| ApprovedBy | reference | No | → Employees (blank when approved by the match; never the PaymentRun's releaser) |
| PaymentTerms | reference | Yes | → PaymentTerms |
| JournalEntry | reference | No | → JournalEntries |
| RevisionNumber | number | Yes | Monotonic working revision; submitted/accepted/posted content is immutable |
| CurrentRevision | reference | No | → DocumentRevisions. Exact frozen submitted or posted content and source snapshots |
| CreatedBy | reference | No | → Employees. Actual originating person, retained across role changes |
| SettlementDiscounts | currency | Yes | Posted approved discounts in bill currency |
| WithholdingSettled | currency | Yes | Posted withholding obligations in bill currency |
| SettlementWriteOffs | currency | Yes | Posted approved noncash adjustments in bill currency |
| CreditsApplied | currency | Yes | Posted vendor-credit applications |
| CurrentCarryingAmount | currency | Yes | Remaining AP functional value including unreversed revaluation |
| CreditAvailable | currency | Yes | Vendor credit magnitude less posted usage/refund; active reservations also reduce availability |
| PostingDate | date | No | Date in eligible Entity Period, preserving supplier BillDate |
| PostedAt | datetime | No | Local AP posting time, independent of external accounting acknowledgement |
| TaxSnapshotJSON | longtext | Yes | Tax recovery/withholding and original supply facts retained |
| PostingState | select | Yes | Unposted, Posted, Reversed, MigrationOpening |
| BaselineCashPaid | currency | Yes | Approved nonposting cutover cash settlement in bill currency |
| BaselineNonCashSettled | currency | Yes | Approved cutover discount/withholding/write-off totals with component split in MigrationItems |
| BaselineCreditsApplied | currency | Yes | Approved cutover credit allocation |

### BillItems

Bill lines with the purchase order line and receipt line they were matched to, the match result, and the expense or asset account, cost centre and tax code they post to.

Parent record: Bills.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| Bill | reference | Yes | → Bills |
| LineNumber | number | Yes |  |
| Product | reference | No | → Products |
| Description | text | Yes |  |
| PurchaseOrderItem | reference | No | → PurchaseOrderItems |
| GoodsReceiptItem | reference | No | → GoodsReceiptItems |
| MatchStatus | select | Yes | Matched, PriceVariance, QuantityVariance, NoReceipt, NonPO. Derived from accepted allocated scope and reviewed tolerance snapshot |
| Quantity | number | Yes |  |
| UnitCost | currency | Yes |  |
| LineTotal | formula | Yes | fx: Quantity × UnitCost |
| ExpenseAccount | reference | Yes | → ChartOfAccounts. Existing required coding retained; posting class decides GRNI, expense, asset and nonrecoverable-tax destination, never expense inventory a second time |
| CostCenter | reference | No | → CostCenters |
| TaxCode | reference | No | → TaxCodes |
| TaxAmount | formula | Yes | fx: frozen eligible LineTotal taxable basis × effective additive TaxCode rate / 100, rounded once; withholding is separate settlement classification, nonrecoverable purchase tax follows the supply posting class |
| FixedAsset | reference | No | → FixedAssets (when capitalised) |
| PostingClass | select | Yes | StockGRNI, ServiceExpense, NonStockExpense, CapitalAsset |
| ServiceAcceptance | reference | No | → ServiceAcceptances. Services use this evidence rather than fabricated product/warehouse receipt |
| OriginalBillItem | reference | No | → BillItems. Vendor credit/correction source |

### PaymentRuns

An approved payment proposal whose immutable instructions are released, transmitted, reconciled and settled separately; a bank file does not mean payment occurred.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| RunNumber | text | Yes |  |
| Entity | reference | Yes | → Entities |
| BankAccount | reference | Yes | → BankAccounts |
| PaymentDate | date | Yes |  |
| DueThrough | date | Yes | Bills due on or before this date were selected |
| Method | select | Yes | ACH, Wire, Check, SEPA |
| Currency | reference | Yes | → Currencies |
| Status | select | Yes | Draft, PendingRelease, Released, Sent, Cleared, Cancelled. Sent is transport acknowledgement, Cleared requires confirmed settlement for all active instructions |
| PaymentCount | number | Yes | Rollup from PaymentsMade |
| TotalAmount | currency | Yes | Rollup from PaymentsMade |
| PreparedBy | reference | Yes | → Employees (the Finance Clerk) |
| ReleasedBy | reference | No | → Employees (within PaymentReleaseLimit; never the preparer or a bill approver in the run) |
| ReleasedAt | date | No | Business-date summary of actual release decision |
| BankFile | attachment | No | Immutable generated payment proposal; generation, transmission or acceptance is not proof of cash settlement |
| JournalEntry | reference | No | → JournalEntries. Optional clearing/reconciliation journal; release alone does not post cash |
| RevisionNumber | number | Yes | Monotonic working revision; submitted/accepted/posted content is immutable |
| CurrentRevision | reference | No | → DocumentRevisions. Exact frozen submitted or posted content and source snapshots |
| CreatedBy | reference | No | → Employees. Actual originating person, retained across role changes |
| ReleasedTimestamp | datetime | No | Exact independent Controller release time |
| InstructionSnapshot | attachment | No | Hash-bound approved beneficiary/payment totals |

### PaymentsMade

One payment per vendor in a run, or a single payment outside a run. The allocations say which bills it settled.

Parent record: PaymentRuns.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| PaymentNumber | text | Yes |  |
| PaymentRun | reference | No | → PaymentRuns (blank for a single payment) |
| Entity | reference | Yes | → Entities |
| Vendor | reference | Yes | → Accounts |
| PaymentDate | date | Yes |  |
| Period | reference | Yes | → AccountingPeriods |
| Method | select | Yes | ACH, Wire, Check, Card, Cash, SEPA |
| Amount | currency | Yes |  |
| Currency | reference | Yes | → Currencies |
| ExchangeRate | number | Yes | To functional currency on PaymentDate |
| FunctionalAmount | formula | Yes | fx: Amount × ExchangeRate |
| BankAccount | reference | Yes | → BankAccounts |
| BankStatementLine | reference | No | → BankStatementLines (when cleared) |
| AmountApplied | currency | Yes | Rollup from PaymentAllocations |
| Status | select | Yes | Draft, Scheduled, Released, Cleared, Voided, Bounced. Released reserves cash/application scope; Cleared requires settlement evidence; Bounced reverses prior settled effect only once |
| ReleasedBy | reference | No | → Employees |
| Reference | text | No | Cheque number or ACH trace |
| JournalEntry | reference | No | → JournalEntries. Confirmed cash settlement or linked compensating bank return, not file creation |
| PostedAt | datetime | No | Actual local cash posting time |
| ReversalOf | reference | No | → PaymentsMade. Compensating entry; original cash record remains immutable |
| Event | reference | No | → IntegrationEvents. Authenticated source or recorded manual evidence |
| BankCarryingAmount | currency | No | Functional bank-lot value consumed for outbound cash; bank disposal FX is separate from bill settlement FX |
| Instruction | reference | No | → PaymentInstructions |

### PaymentAllocations

Bill settlement using separate payment-currency cash and bill-currency funded/noncash amounts, posted only on confirmed settlement and reversed through linked compensation.

Parent record: PaymentsMade.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| Payment | reference | Yes | → PaymentsMade |
| Bill | reference | Yes | → Bills |
| AmountApplied | currency | Yes | Cash consumed in PaymentsMade.Currency; BillAmount is independent document-currency settlement |
| DiscountTaken | currency | No | Positive approved discount in bill currency |
| FunctionalAmount | currency | Yes | Functional settlement value of cash and noncash bill portions at retained rates |
| RealisedGainLoss | formula | Yes | fx: SettlementFXDelta + RevaluationReleased, signed gain-positive total; prior unrealised reclassification has zero net P&L |
| AppliedAt | date | Yes | Business-date projection of actual PostedAt |
| BillAmount | currency | Yes | CashBillAmount + DiscountTaken + WithholdingAmount + WriteOff in bill currency |
| CashBillAmount | currency | Yes | Bill-currency portion funded by AmountApplied |
| WithholdingAmount | currency | Yes | Approved withholding liability in bill currency, not extra cash or additive sales tax |
| WriteOff | currency | Yes | Approved bill settlement adjustment in bill currency |
| PaymentRate | reference | No | → ExchangeRates |
| DocumentRate | reference | No | → ExchangeRates |
| CarryingAmountSettled | currency | Yes | Current functional liability removed, including carried revaluation |
| RevaluationReleased | currency | Yes | Signed gain-positive prior unrealised amount for settled AP scope (loss is negative); reclassify once from unrealised to realised, already included in carrying removal |
| Status | select | Yes | Reserved, Posted, Reversed, Cancelled |
| PostedAt | datetime | No | Only when evidence satisfies the settlement policy |
| ReversalOf | reference | No | → PaymentAllocations |
| OperationKey | text | Yes | Unique settlement effect |
| JournalEntry | reference | No | → JournalEntries |
| SettlementFXDelta | currency | Yes | CarryingAmountSettled − FunctionalAmount, the only additional net AP gain/loss |
| FXReclassificationJournal | reference | No | → JournalEntries. Equal and opposite unrealised/realised classifications, zero net P&L |

### Inventory

Derived owned-stock positions by entity, warehouse and identity; pending receipt custody and blocked stock do not contribute available quantity.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| Product | reference | Yes | → Products |
| Warehouse | reference | Yes | → Warehouses |
| LotNumber | text | No | Required when Product.LotControlled |
| SerialNumber | text | No | Required when Product.SerialControlled |
| QuantityOnHand | number | Yes | Net posted StockMovements for this entity/warehouse/lot/serial position; received custody is separate |
| QuantityAllocated | number | Yes | Active Soft, Hard and Picked InventoryReservations physically remaining at this position, counted once |
| QuantityAvailable | formula | Yes | fx: max(0, QuantityOnHand − active reservations) only for eligible accepted, nonheld, nonexpired, nonquarantined stock; otherwise zero. Negative underlying balances/claims fail validation rather than being hidden by display clamping |
| UnitCost | currency | Yes | Entity-functional carried cost per base UOM, supported by StockLayers; standard/weighted-average policy applied consistently |
| Valuation | formula | Yes | fx: QuantityOnHand × UnitCost; same masking |
| ExpiryDate | date | No | Lot-controlled products with shelf life |
| LastUpdated | date | Yes | Business-date summary of LastUpdatedAt |
| Entity | reference | Yes | → Entities. Must equal Warehouse.Entity |
| HoldStatus | select | Yes | Available, QualityHold, Quarantine, Expired, CountLocked |
| VersionNumber | number | Yes | Atomic position revision |
| LastUpdatedAt | datetime | Yes | Actual stock event timestamp |

### StockMovements

Every physical movement of stock, each with a reason, a reference and the journal entry it posted.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| MovementNumber | text | Yes |  |
| Product | reference | Yes | → Products |
| Warehouse | reference | Yes | → Warehouses |
| LotNumber | text | No |  |
| SerialNumber | text | No |  |
| MovementType | select | Yes | Receipt, IssueToWIP, Completion, Transfer, Scrap, Shipment, CustomerReturn, VendorReturn, Adjustment, CountVariance |
| Quantity | number | Yes | Signed quantity in frozen product base UOM; serial-controlled movement uses one unique identity per unit |
| UnitCost | currency | Yes | Carried source-layer cost, or independently reviewed found-stock valuation; never an unexplained current list cost |
| ReferenceType | select | No | WorkOrder, PurchaseOrder, SalesOrder, Shipment, GoodsReceipt, CustomerReturn, VendorReturn, Manual. Typed pointer must resolve exact source revision/scope |
| ReferenceID | text | No |  |
| MovementDate | date | Yes |  |
| Status | select | Yes | Draft, PendingApproval, Posted, Reversed. Posted row immutable; reversal is new linked compensating movement after downstream checks |
| Operator | reference | No | → Employees |
| JournalEntry | reference | No | → JournalEntries |
| Event | reference | No | → StockEvents |
| Layer | reference | No | → StockLayers |
| Reservation | reference | No | → InventoryReservations |
| ReversalOf | reference | No | → StockMovements |
| PostedAt | datetime | No | Actual inventory/ledger posting time |
| BaseUOM | text | Yes | Frozen product base UOM |
| InventoryVersion | number | No | Expected source/destination position version at posting |

### PlannedOrders

What the MRP run proposed: a work order for a made item or a purchase for a bought item, pegged to the demand that caused it, with the exception the planner or buyer has to act on.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| PlannedOrderNumber | text | Yes |  |
| Entity | reference | Yes | → Entities |
| MRPRunDate | date | Yes | Business date of MRPRun snapshot |
| Type | select | Yes | WorkOrder, Purchase |
| Product | reference | Yes | → Products |
| Quantity | number | Yes | Remaining uncovered net demand, excluding already firmed/released supply and demand transferred to generated contract orders |
| NeedDate | date | Yes |  |
| ReleaseDate | date | Yes | NeedDate less lead time |
| PeggedType | select | Yes | SalesOrderItem, WorkOrderComponent, ContractItem, SafetyStock |
| PeggedID | text | Yes |  |
| Exception | select | Yes | None, Short, ReleaseDatePassed, PastDue, Excess, Reschedule |
| Status | select | Yes | Proposed, Firmed, Released, Cancelled |
| Owner | reference | Yes | → Employees (Production Planner for work orders, Buyer for purchases) |
| WorkOrder | reference | No | → WorkOrders (once released) |
| Requisition | reference | No | → Requisitions (once released) |
| MRPRun | reference | No | → MRPRuns |
| DemandKey | text | Yes | Stable source revision/line/cycle identity across reruns; replaces only unfirmed proposals |

### WorkOrders

Released BOM/routing/cost snapshots, material and labour provenance, accepted terminal output and reviewed remaining WIP/variance close.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| WorkOrderNumber | text | Yes |  |
| Entity | reference | Yes | → Entities |
| Product | reference | Yes | → Products (FinishedGood or SubAssembly) |
| BOM | reference | Yes | → BOMs |
| Routing | reference | Yes | → Routings |
| QuantityOrdered | number | Yes |  |
| QuantityCompleted | number | Yes | Net accepted terminal ProductionCompletions only; intermediate operation good counts never sum into finished quantity |
| QuantityScrapped | number | Yes | Net unique scrapped units by traced production scope; avoid summing the same rejected unit at several operations |
| SourceSalesOrder | reference | No | → SalesOrders (make-to-order) |
| PlannedOrder | reference | No | → PlannedOrders |
| PlannedStart | date | Yes |  |
| PlannedEnd | date | Yes |  |
| ActualStart | date | No |  |
| ActualEnd | date | No |  |
| Status | select | Yes | Planned, Released, InProgress, Completed, Closed, Cancelled |
| Planner | reference | Yes | → Employees |
| StandardCost | formula | Yes | Frozen release quantity × entity-specific approved standard unit cost, not live Products.StandardCost |
| MaterialCost | currency | Yes | Net posted issue/return values from WorkOrderCostEntries, following actual source layers |
| LabourCost | currency | Yes | Approved direct labour allocation value only; OverheadCost is separate |
| ActualCost | formula | Yes | MaterialCost + LabourCost + OverheadCost + OtherCost, with completed cost transferred out once |
| JournalEntry | reference | No | → JournalEntries (variances at close) |
| ReleaseRevision | reference | No | → DocumentRevisions |
| OverheadCost | currency | Yes | Posted burden cost on frozen basis; combined HourlyRate not charged again |
| OtherCost | currency | Yes | Reviewed outside/other production cost with source evidence |
| CompletedCost | currency | Yes | Cost transferred to accepted finished output |
| OpenWIP | currency | Yes | BaselineWIP + net post-cutover WIP cost additions − completed/scrap/variance transfers; native orders use zero baseline, and historical completed cost is never charged again |
| OriginalPlannedEnd | datetime | No | First approved completion cutoff for attainment |
| BaselineCompletedQuantity | number | Yes | Nonposting cutover accepted finished output; intermediate operation throughput excluded |
| BaselineWIP | currency | Yes | Reviewed cutover remaining WIP cost, included once in OpenWIP with component breakdown in MigrationItems |

### WorkOrderComponents

Exploded bill demand for a work order: what is needed, from where, and how much has been issued.

Parent record: WorkOrders.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| WorkOrder | reference | Yes | → WorkOrders |
| Component | reference | Yes | → Products |
| QuantityRequired | number | Yes |  |
| QuantityIssued | number | Yes | Rollup from StockMovements |
| Warehouse | reference | Yes | → Warehouses (source) |
| RequiredDate | date | No |  |
| Status | select | Yes | Open, Allocated, Issued, Short |

### WorkOrderOperations

Exploded routing steps for a work order: what runs where, in what sequence, by whom.

Parent record: WorkOrders.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| WorkOrder | reference | Yes | → WorkOrders |
| OperationNumber | number | Yes |  |
| Description | text | Yes |  |
| WorkCenter | reference | Yes | → WorkCenters |
| Operator | reference | No | → Employees |
| SetupTimeMinutes | number | Yes |  |
| RunTimeMinutesPerUnit | number | Yes |  |
| PlannedStart | date | Yes |  |
| PlannedEnd | date | Yes |  |
| ActualStart | date | No |  |
| ActualEnd | date | No |  |
| QualityCheckRequired | toggle | Yes | Copied from the routing |
| Status | select | Yes | Pending, InProgress, OnHold, Completed |
| SourceRoutingOperation | reference | No | → RoutingOperations |
| RateSnapshotJSON | longtext | Yes | Labour, overhead, basis, standard time, cost currency and approved source version |
| TerminalOperation | toggle | Yes | Exactly one declared finished-output operation per released route; byproducts separately scoped |
| ActualStartedAt | datetime | No | Exact start timestamp |
| ActualEndedAt | datetime | No | Exact completion timestamp after quality guards |

### ProductionLog

Timestamped operation throughput, time and scrap observations. Intermediate throughput is not finished production.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| LogNumber | text | Yes |  |
| WorkOrder | reference | Yes | → WorkOrders |
| OperationNumber | number | Yes |  |
| Operator | reference | Yes | → Employees |
| WorkCenter | reference | Yes | → WorkCenters |
| StartTime | date | Yes | Original date field retained as business-date projection; StartedAt stores actual time |
| EndTime | date | Yes | Original date field retained as business-date projection; EndedAt stores actual time |
| QuantityGood | number | Yes | Operation throughput only; finished inventory comes from accepted terminal ProductionCompletions |
| QuantityScrapped | number | Yes |  |
| ScrapReason | select | No | Setup, Material, Machine, Operator, Other |
| Status | select | Yes | Open, Posted. Posted input immutable; correction links original via a new record |
| Notes | text | No |  |
| Operation | reference | Yes | → WorkOrderOperations. Must match WorkOrder and OperationNumber |
| StartedAt | datetime | Yes | Actual offset-aware start |
| EndedAt | datetime | No | Actual end later than start; incomplete intervals excluded from labour productivity |
| ReversalOf | reference | No | → ProductionLog |
| OperationKey | text | Yes | Unique source/effect identity |

### QualityInspections

Inspections on a receipt line, an operation, a customer return or a final release, with the disposition that moves the stock or the operation.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| InspectionNumber | text | Yes |  |
| InspectionType | select | Yes | Incoming, InProcess, Final, FirstArticle, Return |
| ReferenceType | select | Yes | GoodsReceiptItem, WorkOrderOperation, ShipmentItem, CustomerReturn, PurchaseOrderItem. PurchaseOrderItem supports independently reviewed vendor-direct evidence without a fictitious warehouse receipt |
| ReferenceID | text | Yes |  |
| Product | reference | Yes | → Products |
| LotNumber | text | No |  |
| InspectedBy | reference | Yes | → Employees (the Quality Inspector) |
| InspectionDate | date | Yes |  |
| QuantityInspected | number | Yes | Actual unique scope inspected; cumulative accepted/rejected tranches cannot exceed source custody or produced lot |
| QuantityAccepted | number | Yes | Released portion only; first-article acceptance authorises continuation and is not whole-order completion |
| QuantityRejected | number | Yes | Rejected portion, disjoint from accepted; reinspection cites prior disposition rather than counting the same units twice |
| Status | select | Yes | Open, Dispositioned. Dispositioned scope is immutable; correction is a linked successor with independent evidence |
| Disposition | select | Yes | Pending, Accept, Reject, Rework, ReturnToVendor |
| DefectCode | select | No | Dimensional, Cosmetic, Functional, Documentation, Packaging, Other |
| Notes | text | No |  |
| Revision | reference | No | → DocumentRevisions |
| InspectedAt | datetime | No | Actual inspection/signoff timestamp |
| SourceScopeJSON | longtext | Yes | Exact source line, lot, serial set, operation, quantities and prior inspection lineage |
| ReplacesInspection | reference | No | → QualityInspections |

### JournalEntries

Balanced immutable general ledger entries from validated eligible subledger effects or approved manual adjustments; drafts and transport events do not post automatically.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| JournalEntryNumber | text | Yes |  |
| Entity | reference | Yes | → Entities |
| Period | reference | Yes | → AccountingPeriods |
| Date | date | Yes | Original document/effective date retained; PostingDate determines eligible entity period |
| Description | text | Yes |  |
| EntryType | select | Yes | Standard, Adjusting, Closing, Reversing, Recurring, Elimination, Consolidation |
| Source | select | Yes | Manual, AP, AR, Inventory, WIP, FixedAssets, Depreciation, Allocation, Revaluation, Consolidation, Tax, Payroll, Bank |
| Status | select | Yes | Draft, PendingApproval, Posted, Reversed, Rejected. Posted and reversed originals remain immutable; reversal adds balanced new entry |
| TotalDebit | formula | Yes | Sum of nonnegative functional debits; must equal TotalCredit in currency precision |
| TotalCredit | formula | Yes | Sum of nonnegative functional credits; each line has one positive side only |
| Currency | reference | Yes | → Currencies |
| ReferenceType | select | No | Bill, Invoice, PaymentReceived, PaymentRun, StockMovement, WorkOrder, Shipment, GoodsReceipt, DepreciationRun, RevaluationRun, ConsolidationRun, PayrollRun, TaxFiling, Manual |
| ReferenceID | text | No |  |
| PreparedBy | reference | Yes | → Employees |
| ApprovedBy | reference | No | → Employees (manual entries above JournalApprovalLimit) |
| PostedBy | reference | No | → Employees |
| PostedAt | date | No | Business-date projection of PostedTimestamp |
| ReversalOf | reference | No | → JournalEntries (self) |
| RevisionNumber | number | Yes | Monotonic working revision; submitted/accepted/posted content is immutable |
| CurrentRevision | reference | No | → DocumentRevisions. Exact frozen submitted or posted content and source snapshots |
| CreatedBy | reference | No | → Employees. Actual originating person, retained across role changes |
| PostingDate | date | Yes | Within Period.StartDate/EndDate and Period.Entity = Entity |
| PostedTimestamp | datetime | No | Actual ledger posting time |
| OperationKey | text | Yes | Unique source revision/action/sequence; replay returns existing balanced entry |
| Policy | reference | No | → EnterprisePolicies |
| SourceSnapshotJSON | longtext | Yes | Posting class, control mappings, source revision, tax/rate/cost basis and original transaction IDs |

### JournalEntryLines

Debits and credits by account, cost centre and tax code, with the foreign amount when the entry is not in functional currency and the partner entity when the line is intercompany.

Parent record: JournalEntries.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| JournalEntry | reference | Yes | → JournalEntries |
| LineNumber | number | Yes |  |
| Account | reference | Yes | → ChartOfAccounts |
| CostCenter | reference | No | → CostCenters |
| IntercompanyPartner | reference | No | → Entities (required when Account.IsIntercompany) |
| Description | text | No |  |
| Debit | currency | Yes | Nonnegative entity-functional amount; exactly one of Debit and Credit positive on a posted nonzero line |
| Credit | currency | Yes | Nonnegative entity-functional amount; exactly one of Debit and Credit positive |
| TaxCode | reference | No | → TaxCodes |
| ForeignAmount | currency | No | Amount before conversion |
| ForeignCurrency | reference | No | → Currencies |
| ExchangeRate | number | No | Positive foreign-to-functional multiplier consistent with ForeignCurrency and journal entity currency; rate date/type/evidence in parent snapshot |
| SourceAllocationKey | text | No | Exact source line/allocation, retained for reconciliation and reversal |

### Budgets

Budget or forecast version per entity and fiscal year, approved by an independent Controller and locked as an immutable reporting version.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| BudgetNumber | text | Yes |  |
| Version | text | Yes | e.g. FY26 Original, FY26 Forecast Q2 |
| Entity | reference | Yes | → Entities |
| FiscalYear | text | Yes |  |
| Currency | reference | Yes | → Currencies |
| Status | select | Yes | Draft, InReview, Approved, Locked |
| TotalRevenue | formula | Yes | fx: SUM(BudgetLines where Account.AccountType = Revenue) |
| TotalExpense | formula | Yes | fx: SUM(BudgetLines where Account.AccountType = Expense) |
| Owner | reference | Yes | → Employees |
| SubmittedAt | date | No |  |
| ApprovedBy | reference | No | → Employees. Independently assigned Controller budget approver, not an undeclared CFO/board role and not preparer/material editor |
| LockedAt | date | No |  |
| LockedBy | reference | No | → Employees. Controller locks an approved immutable version; approval remains independent |
| RevisionNumber | number | Yes | Monotonic working revision; submitted/accepted/posted content is immutable |
| CurrentRevision | reference | No | → DocumentRevisions. Exact frozen submitted or posted content and source snapshots |
| CreatedBy | reference | No | → Employees. Actual originating person, retained across role changes |
| RateSnapshotJSON | longtext | Yes | Budget currency to functional/reporting conversion by period, source rates and locked version |

### BudgetLines

Amount per account, cost centre and period within a budget version.

Parent record: Budgets.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| Budget | reference | Yes | → Budgets |
| Account | reference | Yes | → ChartOfAccounts |
| CostCenter | reference | No | → CostCenters |
| Period | reference | Yes | → AccountingPeriods |
| BudgetAmount | currency | Yes |  |
| Notes | text | No |  |

### FixedAssets

The asset register: capitalised from bill lines, depreciated monthly by category, transferred, impaired and disposed.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| AssetNumber | text | Yes |  |
| Name | text | Yes |  |
| Entity | reference | Yes | → Entities |
| AssetCategory | reference | Yes | → AssetCategories |
| DepreciationMethod | select | Yes | StraightLine, DecliningBalance, DoubleDeclining, UnitsOfProduction, None |
| AcquisitionDate | date | Yes |  |
| InServiceDate | date | Yes |  |
| Cost | currency | Yes | Capitalised cost |
| SalvageValue | currency | Yes | Default 0 |
| UsefulLifeMonths | number | Yes |  |
| AccumulatedDepreciation | currency | Yes | Projection of designated Book AssetBooks balance only; Tax book does not overwrite it |
| NetBookValue | formula | Yes | fx: designated Book cost − accumulated depreciation − accumulated impairment; disposal/transfer supported by AssetEvents |
| Location | text | No |  |
| CostCenter | reference | No | → CostCenters |
| Custodian | reference | No | → Employees |
| Status | select | Yes | UnderConstruction, InService, Impaired, Disposed, Transferred |
| DisposalDate | date | No |  |
| DisposalProceeds | currency | No |  |
| SourceBill | reference | No | → Bills |
| PrimaryBook | reference | No | → AssetBooks |
| AccumulatedImpairment | currency | Yes | Designated Book impairment balance |

### DepreciationRuns

Monthly depreciation batch per entity, period and book, posted as one journal grouped by asset category with a line per asset behind it.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| RunNumber | text | Yes |  |
| Entity | reference | Yes | → Entities |
| Period | reference | Yes | → AccountingPeriods |
| Book | select | Yes | Book, Tax |
| RunDate | date | Yes |  |
| Status | select | Yes | Draft, Calculated, Posted, Reversed |
| AssetsProcessed | number | Yes | Rollup from DepreciationRunLines |
| TotalDepreciation | currency | Yes | Rollup from DepreciationRunLines |
| JournalEntry | reference | No | → JournalEntries |
| PreparedBy | reference | Yes | → Employees |
| PostedBy | reference | No | → Employees |
| PostedAt | date | No |  |
| ReversalOf | reference | No | → DepreciationRuns |
| PostedTimestamp | datetime | No | Actual posting time; Tax schedules do not post a second Book depreciation journal |

### DepreciationRunLines

The charge per asset in a run, with accumulated depreciation and net book value after it, which is what the register and the auditor read.

Parent record: DepreciationRuns.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| Run | reference | Yes | → DepreciationRuns |
| Asset | reference | Yes | → FixedAssets |
| PeriodDepreciation | currency | Yes |  |
| AccumulatedAfter | currency | Yes | Result for the linked AssetBook only |
| NetBookValueAfter | currency | Yes | AssetBook cost less depreciation and impairment after this run, never below allowed residual floor |
| CostCenter | reference | No | → CostCenters (from the asset) |
| AssetBook | reference | Yes | → AssetBooks |
| OpeningRevision | number | Yes | Expected book balance version |
| CalculationJSON | longtext | Yes | Cost, residual, life, service dates, method, period fraction, declining rate or units produced/capacity and rounding |

### RevaluationRuns

Current-carrying monetary revaluation with item-level delta workings and immutable correction/rerun evidence. The baseline does not automatically reverse the prior month and recognise it twice.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| RunNumber | text | Yes |  |
| Entity | reference | Yes | → Entities |
| Period | reference | Yes | → AccountingPeriods |
| RunDate | date | Yes |  |
| RateType | select | Yes | Closing. Missing required closing rate blocks posting; no silent stale-rate fallback |
| Status | select | Yes | Draft, Calculated, Posted, Reversed |
| AccountsRevalued | number | Yes | Receivables, payables, bank and intercompany accounts in foreign currency |
| UnrealisedGainLoss | currency | Yes | Sum of signed incremental deltas in RevaluationLines; baseline uses current-carrying Delta method without automatic next-period reversal |
| JournalEntry | reference | No | → JournalEntries (Source Revaluation) |
| PreparedBy | reference | Yes | → Employees |
| PostedBy | reference | No | → Employees |
| Method | select | Yes | Delta. Revalue remaining monetary balances from current carrying value; corrections use linked reversal/rerun |
| SourceLedgerRevision | number | Yes | Entity ledger revision and open-item snapshot at calculation |
| ReversalOf | reference | No | → RevaluationRuns |
| PostedAt | datetime | No | Actual posting time |

### ConsolidationRuns

A reporting-period pack with entity-specific closed-period snapshots, effective ownership/method, account-specific translation and reviewed balanced eliminations.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| RunNumber | text | Yes |  |
| ReportingParent | reference | Yes | → Entities |
| Period | reference | Yes | → AccountingPeriods. Reporting-parent period; each included entity maps its own periods in ConsolidationEntities |
| RunDate | date | Yes |  |
| ReportingCurrency | reference | Yes | → Currencies |
| TranslationRateType | select | Yes | Spot, Average, Closing. Display preference only; line-specific approved translation policy controls applicable rates |
| Status | select | Yes | Draft, Calculated, Locked, Reversed |
| EntitiesIncluded | number | Yes | Entities with ConsolidationMethod other than NotConsolidated |
| TranslationAdjustment | currency | Yes | Rollup from ConsolidationRunLines; posted to cumulative translation adjustment |
| IntercompanyEliminated | currency | Yes | Rollup from ConsolidationRunLines.Elimination |
| MinorityInterest | currency | No | Reviewed non-controlling interest for Full consolidation; not applied as the same calculation to Equity/Proportional methods |
| PreparedBy | reference | Yes | → Employees |
| LockedBy | reference | No | → Employees |
| LockedAt | date | No |  |
| Revision | reference | No | → DocumentRevisions |
| ReversalOf | reference | No | → ConsolidationRuns |
| GroupJournal | reference | No | → JournalEntries. Approved eligible reporting-parent journal where group adjustments are posted |
| LockedTimestamp | datetime | No | Actual Controller lock time |

### ConsolidationRunLines

One line per entity and account in the run: the local balance, the translated balance, the elimination applied and the consolidated result, so the pack can be traced back.

Parent record: ConsolidationRuns.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| Run | reference | Yes | → ConsolidationRuns |
| Entity | reference | Yes | → Entities |
| Account | reference | Yes | → ChartOfAccounts |
| LocalCurrency | reference | Yes | → Currencies |
| LocalAmount | currency | Yes |  |
| RateUsed | number | Yes | Specific reviewed translation rate for this account/movement policy, never one uniform rate for all accounts |
| TranslatedAmount | currency | Yes | In the reporting currency |
| Elimination | currency | Yes | Signed sum of linked ConsolidationAdjustments for this line |
| ConsolidatedAmount | formula | Yes | fx: method-adjusted TranslatedAmount + Elimination; Full, Proportional and Equity contributions are calculated distinctly |
| EntitySnapshot | reference | Yes | → ConsolidationEntities |
| TranslationPolicy | select | Yes | Closing, Historical, Actual, AppropriateAverage, EquityMethod |
| RateEvidenceJSON | longtext | Yes | Dated rates, historical layers/movements and average suitability; assets/liabilities closing includes nonmonetary assets |

### TaxFilings

Returns to an authority for a period: sales, use, VAT, GST, withholding and payroll tax.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| FilingNumber | text | Yes |  |
| Entity | reference | Yes | → Entities |
| Jurisdiction | reference | Yes | → TaxJurisdictions |
| Period | reference | Yes | → AccountingPeriods |
| TaxType | select | Yes | Sales, Use, VAT, GST, Withholding, PayrollTax |
| Status | select | Yes | Draft, InReview, Filed, Paid, Amended |
| TaxableSales | currency | No |  |
| TaxablePurchases | currency | No |  |
| OutputTax | currency | No | Sales-side tax; blank for PayrollTax |
| InputTax | currency | No | Recoverable purchase-side tax; blank for PayrollTax |
| PayrollTaxTotal | currency | No | Statutory employee and employer tax liability only from posted operational payroll; excludes pension/benefit EmployerContribution and Parallel runs |
| NetLiability | formula | Yes | Signed reviewed liability from original tax postings, credits, recoverable input and withholding classifications; filing does not accrue the same tax a second time |
| DueDate | date | Yes |  |
| FiledAt | date | No |  |
| FiledBy | reference | No | → Employees |
| ConfirmationNumber | text | No |  |
| JournalEntry | reference | No | → JournalEntries (settlement) |
| SourceRevision | reference | No | → DocumentRevisions |
| SupersedesFiling | reference | No | → TaxFilings |
| ReviewedBy | reference | No | → Employees. Eligible independent Controller |
| ReviewedAt | datetime | No | Review of exact filing content and authority evidence |

### CloseTasks

The close checklist per entity and period: each task with its owner, its dependency, its due date and the evidence attached when it is done.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| TaskNumber | text | Yes |  |
| Period | reference | Yes | → AccountingPeriods |
| Entity | reference | Yes | → Entities |
| TaskName | text | Yes |  |
| Category | select | Yes | Cutoff, Reconciliation, Accrual, Depreciation, Allocation, Revaluation, Tax, Intercompany, Review, SignOff |
| Owner | reference | Yes | → Employees |
| DependsOn | reference | No | → CloseTasks. Legacy single dependency retained; all dependencies are CloseDependencies |
| DueDate | date | Yes |  |
| Status | select | Yes | Open, InProgress, Complete, NotApplicable. Complete requires reviewed evidence; NotApplicable requires approved waiver, neither clears unresolved dependencies |
| CompletedAt | date | No |  |
| CompletedBy | reference | No | → Employees |
| Evidence | attachment | No | The reconciliation, the journal, the sign-off |
| Template | reference | No | → CloseTemplates |
| SourceRevision | number | No | Ledger/subledger revision covered by evidence |
| Decision | reference | No | → Approvals |
| CompletedTimestamp | datetime | No | Actual evidence acceptance time |

### BankStatementLines

Lines imported from the bank statement per bank account, matched to a payment, a payroll run or a journal and reconciled at close.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| LineNumber | text | Yes | Bank reference plus sequence |
| BankAccount | reference | Yes | → BankAccounts |
| StatementDate | date | Yes |  |
| ValueDate | date | No |  |
| Amount | currency | Yes | Signed: positive in, negative out |
| Currency | reference | Yes | → Currencies |
| Reference | text | No | Remittance or payment reference |
| Counterparty | text | No | As given by the bank |
| MatchedType | select | No | PaymentReceived, PaymentMade, PaymentRun, PayrollRun, JournalEntry |
| MatchedID | text | No | Validated typed source key; partial/multiple matches retained in IntegrationEvents.EffectSnapshotJSON rather than fabricating a single settled payment |
| Status | select | Yes | Unmatched, Matched, Reconciled. Matched proposal is not final settlement; reconciliation requires same entity/bank/currency/amount and no duplicate source effect |
| ReconciledAt | date | No |  |
| SourceKey | text | Yes | Unique bank/account/statement/line identity |
| Event | reference | No | → IntegrationEvents |
| ReconciledTimestamp | datetime | No | Actual reconciliation time |

### Approvals

One row per approval step on any document: who was asked, who acted (and for whom, when delegated), what they decided and why.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| ApprovalNumber | text | Yes |  |
| DocumentType | select | Yes | Requisition, PurchaseOrder, Bill, PaymentRun, SalesOrder, Quote, Invoice, CreditNote, JournalEntry, PayrollRun, LeaveRequest, Timesheet, Budget, MasterDataChange, StockAdjustment, ReceiptAcceptance, QualityInspection, PeriodClose, Consolidation, TaxFiling, CreditException, Refund, AssetEvent, Allocation, WorkOrderClose |
| DocumentID | text | Yes | Number of the document |
| Entity | reference | Yes | → Entities |
| Step | number | Yes | 1 for the first approver, 2 for the next |
| Approver | reference | Yes | → Employees (who the step was routed to) |
| DelegateFor | reference | No | → Employees. Original authority holder only when ActualActor acts under a valid AuthorityDelegations grant; never a permission test by this field alone |
| Decision | select | Yes | Pending, Approved, Rejected, Skipped. A delegated approval is Approved with provenance; Skipped needs policy evidence and supplies no authority |
| RequestedAt | date | Yes |  |
| DecidedAt | date | No |  |
| Amount | currency | No | Frozen routed amount in AuthorityCurrency, including cumulative commitment basis where required |
| LimitApplied | text | No | Which limit routed this step, e.g. POApprovalLimit |
| Comment | longtext | No | Required on rejection |
| Revision | reference | Yes | → DocumentRevisions. Exact immutable reviewed content |
| ActualActor | reference | No | → Employees. Actual authenticated decision-maker |
| Delegation | reference | No | → AuthorityDelegations |
| AuthorityCurrency | reference | No | → Currencies |
| RateSnapshotJSON | longtext | No | Amount currency pair, type, date, multiplier and source; missing conversion blocks routing |
| LimitSnapshot | currency | No | Actual actor/delegator applicable ceiling, intersection of grant and role scope |
| RequestedTimestamp | datetime | Yes | Actual request time |
| DecidedTimestamp | datetime | No | Actual decision time |
| ConflictCheckJSON | longtext | Yes | Preparer, owner, material editors, prior bill approvers and exact policy pairwise exclusions at decision |
| Policy | reference | Yes | → EnterprisePolicies |

### LeaveRequests

Calendar-resolved daily leave scope reserved on submission and approved by a distinct eligible manager or formally delegated actor.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| RequestNumber | text | Yes |  |
| Employee | reference | Yes | → Employees |
| LeaveType | reference | Yes | → LeaveTypes |
| StartDate | date | Yes |  |
| EndDate | date | Yes |  |
| HalfDayStart | toggle | Yes | First day is a half day |
| HalfDayEnd | toggle | Yes | Last day is a half day |
| Days | formula | Yes | fx: sum of LeaveEntries day fractions for scheduled working days; a single working day with either/both half-day flags is 0.5, never zero; overlap and calendar rules validated |
| Status | select | Yes | Draft, Submitted, Approved, Rejected, Cancelled, Taken |
| Reason | text | No |  |
| Attachment | attachment | No | Required when LeaveType.RequiresAttachment |
| Approver | reference | Yes | → Employees. Named manager/eligible plant approver frozen at submission; delegation requires actual grant |
| ApprovedAt | date | No |  |
| SubmittedAt | date | No |  |
| Revision | reference | No | → DocumentRevisions |
| SubmittedTimestamp | datetime | No | Actual submission time |
| ApprovedTimestamp | datetime | No | Actual manager decision time |

### LeaveBalances

Accrued, taken and available leave per employee, leave type and year.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| Employee | reference | Yes | → Employees |
| LeaveType | reference | Yes | → LeaveTypes |
| Year | text | Yes |  |
| Entitlement | number | Yes | Annual entitlement reference; accrued availability never adds Entitlement a second time |
| CarriedOver | number | No | Capped at LeaveTypes.MaxCarryoverDays |
| Accrued | number | Yes | Accrued to date |
| Taken | number | Yes | Sum of posted Taken LeaveEntries by employee/type/year |
| Pending | number | Yes | Sum of Reserved LeaveEntries for Submitted/Approved requests; approved-to-taken moves buckets once |
| Available | formula | Yes | fx: Accrued + CarriedOver − Taken − Pending; opening/accrual/correction effects are unique LeaveEntries |
| LastAccrualDate | date | Yes |  |
| VersionNumber | number | Yes | Atomic balance version for concurrent leave reservations |

### Timesheets

Hours per employee per pay period, approved by the manager before payroll picks them up. The lines carry the split by day, cost centre and work order.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| TimesheetNumber | text | Yes |  |
| Employee | reference | Yes | → Employees |
| Entity | reference | Yes | → Entities |
| PeriodStart | date | Yes |  |
| PeriodEnd | date | Yes |  |
| RegularHours | number | Yes | Rollup from TimesheetLines where HoursType = Regular |
| OvertimeHours | number | Yes | Rollup from TimesheetLines where HoursType = Overtime |
| LeaveHours | number | Yes | Rollup from TimesheetLines where HoursType = Leave |
| TotalHours | formula | Yes | fx: RegularHours + OvertimeHours + LeaveHours |
| CostCenter | reference | Yes | → CostCenters (default for lines without one) |
| Status | select | Yes | Draft, Submitted, Approved, Rejected, Processed |
| Approver | reference | Yes | → Employees (Employees.Manager, or the Plant Manager for plant staff) |
| ApprovedAt | date | No |  |
| SubmittedAt | date | No |  |
| PayrollRun | reference | No | → PayrollRuns. Optional first consuming run; all partial/correction consumption is PayrollAllocations |
| Revision | reference | No | → DocumentRevisions |
| SubmittedTimestamp | datetime | No | Actual submission time |
| ApprovedTimestamp | datetime | No | Independent actual-person approval time |

### TimesheetLines

One line per day and charge: the hours, their type, and the cost centre, work order and operation they charge.

Parent record: Timesheets.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| Timesheet | reference | Yes | → Timesheets |
| WorkDate | date | Yes |  |
| HoursType | select | Yes | Regular, Overtime, Leave |
| Hours | number | Yes | Nonnegative duration; overlap, schedule and daily-total limits checked across all submissions and leave |
| CostCenter | reference | No | → CostCenters (defaults from the header) |
| WorkOrder | reference | No | → WorkOrders. Must belong to entity and eligible operation/employee assignment |
| OperationNumber | number | No | The operation on the work order |
| LeaveRequest | reference | No | → LeaveRequests (Leave lines) |
| Notes | text | No |  |
| Operation | reference | No | → WorkOrderOperations. Must match WorkOrder and OperationNumber |
| StartedAt | datetime | No | Actual interval when available; otherwise reviewed daily allocation evidence must establish no overlap |
| EndedAt | datetime | No | Later than StartedAt; incomplete intervals cannot supply payable duration |
| SourceKey | text | Yes | Unique employee/source/day/interval/charge identity |
| OriginalLine | reference | No | → TimesheetLines. Correction lineage; already consumed hours are not edited |

### PayrollRuns

Effective eligible payroll population and calculation snapshot per entity/pay calendar, reviewed independently and posted only for an operational run.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| RunNumber | text | Yes |  |
| Entity | reference | Yes | → Entities |
| PeriodStart | date | Yes |  |
| PeriodEnd | date | Yes |  |
| PayDate | date | Yes |  |
| Period | reference | Yes | → AccountingPeriods |
| Frequency | select | Yes | Weekly, BiWeekly, SemiMonthly, Monthly |
| RunType | select | Yes | Regular, OffCycle, Retro, Correction, Bonus, Parallel |
| Status | select | Yes | Draft, Calculating, PendingApproval, Approved, Posted, Paid, Closed. Parallel may be reviewed/Closed but never Posted/Paid or operationally consumed |
| EmployeeCount | number | Yes | Actual eligible statement population: entity, pay calendar and employed service interval intersecting period, OnPayroll at applicable effective dates; not every employee |
| GrossTotal | currency | Yes | Rollup from PayStatements |
| DeductionsTotal | currency | Yes | Rollup from PayStatements |
| EmployerTaxTotal | currency | Yes | Statutory employer tax only; other employer contributions are separate |
| NetTotal | currency | Yes | Rollup from PayStatements |
| BankAccount | reference | Yes | → BankAccounts (paid from) |
| BankFile | attachment | No | Generated approved instruction artifact only; no payment or Paid status from file generation |
| PreparedBy | reference | Yes | → Employees (the Payroll Administrator) |
| ApprovedBy | reference | No | → Employees (the Controller) |
| JournalEntry | reference | No | → JournalEntries |
| RevisionNumber | number | Yes | Monotonic working revision; submitted/accepted/posted content is immutable |
| CurrentRevision | reference | No | → DocumentRevisions. Exact frozen submitted or posted content and source snapshots |
| CreatedBy | reference | No | → Employees. Actual originating person, retained across role changes |
| Currency | reference | Yes | → Currencies. Entity functional aggregation currency |
| EmployerContributionTotal | currency | Yes | Non-tax employer contribution total |
| OriginalRun | reference | No | → PayrollRuns. Required for Retro/Correction delta scope |
| CalculationSnapshotJSON | longtext | Yes | Population, effective compensation, component rules, calendars, rates, tax source, source hashes and run/correction scope |
| PostedAt | datetime | No | Operational payroll liability posting only |
| PaidAt | datetime | No | All required payment instructions confirmed settled |

### PayStatements

Per-employee pay-currency totals with explicit conversion to functional payroll aggregates and separately confirmed payment instructions.

Parent record: PayrollRuns.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| PayrollRun | reference | Yes | → PayrollRuns |
| StatementNumber | text | Yes |  |
| Employee | reference | Yes | → Employees |
| PayType | select | Yes | Salaried, Hourly; from Employees |
| RegularHours | number | No | From approved Timesheets where hourly |
| OvertimeHours | number | No |  |
| GrossPay | currency | Yes | Rollup from PayStatementLines of ComponentType Earning |
| TotalDeductions | currency | Yes | Rollup from PayStatementLines of ComponentType Deduction and Tax |
| EmployerTax | currency | Yes | Statutory employer tax only, not all EmployerContribution lines |
| NetPay | formula | Yes | fx: GrossPay − TotalDeductions; ordinary component amounts use positive magnitudes, correction deltas preserve signs once |
| Currency | reference | Yes | → Currencies. Statement pay currency; converted totals use ExchangeRate into run functional currency |
| CostCenter | reference | No | → CostCenters |
| PaymentMethod | select | Yes | Bank, Cheque, Wallet |
| Status | select | Yes | Draft, Calculated, Approved, Paid |
| ExchangeRate | reference | No | → ExchangeRates. Required when statement currency differs from run currency |
| EmployerContribution | currency | Yes | Non-tax employer contributions, excluded from employee NetPay |
| FunctionalNetPay | currency | Yes | NetPay converted once at frozen payroll rate |
| OriginalStatement | reference | No | → PayStatements |
| PaymentInstruction | reference | No | → PaymentInstructions |

### PayStatementLines

Effective component calculations and signed correction lineage, with operational YTD totals and exact time/leave allocations.

Parent record: PayStatements.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| PayStatement | reference | Yes | → PayStatements |
| PayComponent | reference | Yes | → PayComponents |
| Hours | number | No | Hourly components |
| Rate | number | No | Hourly rate or percentage |
| Amount | currency | Yes | Ordinary positive magnitude for earnings, deductions, employee tax and employer cost; Retro/Correction signed delta against OriginalLine, never subtract a negative deduction again |
| YTDAmount | currency | Yes | Posted operational same employee/component/tax-year totals plus PayrollOpeningBalances and signed corrections; excludes Parallel, drafts and reversed net effects |
| CostCenter | reference | No | → CostCenters (defaults from the statement) |
| Assignment | reference | No | → EmployeePayComponents |
| OriginalLine | reference | No | → PayStatementLines. Required delta lineage for retro/correction |
| EmployerTax | toggle | Yes | True only for statutory employer-tax line |
| TaxYear | text | Yes | Effective jurisdiction tax year |
| CalculationJSON | longtext | Yes | Effective compensation/rule dates, amount basis, statutory evidence, hours/proration and rounding |

### EnterprisePolicies

Versioned entity authority, costing, matching and operating rules; inactive or unreviewed policy cannot authorise an action.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| PolicyNumber | text | Yes | Unique policy/version |
| Entity | reference | Yes | → Entities |
| EffectiveFrom | date | Yes | Inclusive start |
| EffectiveTo | date | No | Exclusive end |
| Status | select | Yes | Draft, Active, Retired |
| AuthorityCurrency | reference | Yes | → Currencies |
| RoutingRulesJSON | longtext | Yes | Named eligible users/roles and document/entity/category/cost-centre/amount routing; each exceptional unknown-price/cost quote has an independently approved absolute amount/currency ceiling and explicit risk reason. Missing eligible approver or ceiling blocks |
| SegregationRulesJSON | longtext | Yes | Exact pairwise exclusions and explicit quote-owner/eligible journal self-confirmation exceptions; no blanket role bypass |
| DiscountFloorPercent | number | Yes | Protected minimum known margin; zero/unknown price or cost requires review |
| PriceTolerancePercent | number | Yes | Reviewed variance on matched quantity; cannot authorise unreceived quantity |
| CountQuantityTolerance | number | Yes | Absolute count difference threshold |
| CountPercentTolerance | number | Yes | Relative threshold when expected quantity > 0; zero expected uses unavailable percentage and review |
| StockAdjustmentLimit | currency | Yes | Maximum eligible below-threshold value; no unknown-cost auto-post |
| CreditNoteLimit | currency | Yes | Eligible routine Finance Clerk credit threshold; disputed/refund exceptions need Controller |
| WriteOffLimit | currency | Yes | Eligible Finance Clerk noncash settlement threshold |
| PolicyJSON | longtext | Yes | Rounding, source-specific soft-close permission, rate policy, expiry/stock eligibility, match, revenue/billing and below-threshold approval eligibility |
| ApprovedBy | reference | No | → Employees. Independent Controller for financial/rate/limit rules, owning manager for technical scope under joint review |
| ApprovedAt | datetime | No | Activation decision time |

### DocumentRevisions

Immutable submitted, accepted, approved or posted snapshot; lifecycle changes cannot alter its content or human authority.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| RevisionNumber | text | Yes | Unique typed-document revision identity |
| Entity | reference | Yes | → Entities |
| DocumentType | text | Yes | Validated existing table name |
| DocumentID | text | Yes | Stable existing document key |
| Version | number | Yes | Monotonic per document |
| Status | select | Yes | Frozen, Superseded, Accepted, Posted, Cancelled |
| FrozenAt | datetime | Yes | Actual freeze time |
| ContentHash | text | Yes | Canonical snapshot hash |
| SnapshotJSON | longtext | Yes | Header, line IDs, quantities, UOM, net/tax amounts, terms, rates, bank/coding/stock identities, master versions and source references |
| MaterialEditorsJSON | longtext | Yes | Actual user IDs that created or materially changed this version |
| FrozenBy | reference | Yes | → Employees |
| Supersedes | reference | No | → DocumentRevisions |
| Policy | reference | Yes | → EnterprisePolicies |

### AuthorityDelegations

Approved limited delegation preserves the actual actor, grantor and role scope; absence alone grants no authority.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| DelegationNumber | text | Yes | Unique grant |
| Entity | reference | Yes | → Entities |
| Grantor | reference | Yes | → Employees |
| Delegate | reference | Yes | → Employees. Must possess eligible declared role for action |
| DocumentTypes | longtext | Yes | Explicit allowed actions/types and cost-centre/department scope |
| Currency | reference | Yes | → Currencies |
| MaximumAmount | currency | Yes | Intersection with grantor/delegate limits after frozen conversion |
| ValidFrom | datetime | Yes | Inclusive |
| ValidTo | datetime | Yes | Exclusive |
| Status | select | Yes | Draft, Active, Revoked, Expired |
| ApprovedBy | reference | Yes | → Employees. Independent authorised policy owner |
| ApprovedAt | datetime | Yes | Actual grant approval |

### MasterChanges

Proposed old/new effective master values and independent activation; protected fields never change by generic Manage permission.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| ChangeNumber | text | Yes | Unique change |
| Entity | reference | Yes | → Entities |
| Revision | reference | Yes | → DocumentRevisions |
| TargetTable | text | Yes | Validated master table |
| TargetID | text | Yes | Existing or provisional master key |
| OldValuesJSON | longtext | Yes | Prior values, protected by field policy |
| NewValuesJSON | longtext | Yes | Proposed values with same protected visibility |
| EffectiveFrom | datetime | Yes | Prospective activation; retroactive effects need separately reviewed correction |
| Status | select | Yes | Draft, Submitted, Approved, Applied, Rejected, Superseded |
| ProposedBy | reference | Yes | → Employees |
| ApprovedBy | reference | No | → Employees. Independent opposite HR/payroll role for sensitive employee fields; Controller/Finance Clerk peer for bank fields under policy |
| Approval | reference | No | → Approvals |
| AppliedAt | datetime | No | Atomic activation time |

### PriceBookEntries

Effective authorised list price per price book, product, currency and entity, including quantity break and unit basis.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| EntryNumber | text | Yes | Unique version |
| PriceBook | reference | Yes | → PriceBooks |
| Product | reference | Yes | → Products |
| Entity | reference | Yes | → Entities |
| Currency | reference | Yes | → Currencies |
| UOM | text | Yes | Price unit compatible with product base UOM |
| MinimumQuantity | number | Yes | Break lower bound |
| UnitPrice | currency | Yes | Nonnegative authorised list price |
| EffectiveFrom | date | Yes | Inclusive |
| EffectiveTo | date | No | Exclusive |
| Status | select | Yes | Draft, Active, Retired |
| Revision | reference | Yes | → DocumentRevisions |

### ProductPostingProfiles

Entity-specific effective cost and posting mapping for products and nonstock source classes.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| ProfileNumber | text | Yes | Unique version |
| Entity | reference | Yes | → Entities |
| Product | reference | No | → Products. Empty only for configured default posting class |
| Currency | reference | Yes | → Currencies. Entity functional currency |
| StandardUnitCost | currency | No | Known reviewed standard per product base UOM |
| EffectiveFrom | date | Yes | Inclusive |
| EffectiveTo | date | No | Exclusive |
| Status | select | Yes | Draft, Active, Retired |
| InventoryAccount | reference | No | → ChartOfAccounts |
| GRNIAccount | reference | No | → ChartOfAccounts |
| WIPAccount | reference | No | → ChartOfAccounts |
| COGSAccount | reference | No | → ChartOfAccounts |
| RevenueAccount | reference | No | → ChartOfAccounts |
| VarianceAccount | reference | No | → ChartOfAccounts |
| ARAccount | reference | No | → ChartOfAccounts |
| APAccount | reference | No | → ChartOfAccounts |
| UnappliedAccount | reference | No | → ChartOfAccounts |
| LaborAbsorptionAccount | reference | No | → ChartOfAccounts |
| OverheadAbsorptionAccount | reference | No | → ChartOfAccounts |
| FXGainLossAccount | reference | No | → ChartOfAccounts |
| Policy | reference | Yes | → EnterprisePolicies |
| Revision | reference | Yes | → DocumentRevisions |

### SignatureRequests

Customer acceptance binds the complete current commercial revision and all required signers, with authenticated event or reviewed manual evidence.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| SignatureNumber | text | Yes | Unique request |
| Revision | reference | Yes | → DocumentRevisions |
| ProviderID | text | No | Unique provider/account/envelope identity |
| RequiredSignersJSON | longtext | Yes | Expected signer identities/capacity and completion rules |
| Status | select | Yes | Prepared, Sent, PartiallySigned, Completed, Declined, Voided, Expired, ReviewRequired |
| RequestedAt | datetime | Yes | Actual request time |
| CompletedAt | datetime | No | All required valid signatures complete; one recipient signed is insufficient |
| Event | reference | No | → IntegrationEvents |
| Artifact | attachment | No | Signed immutable content and hash |
| VerifiedBy | reference | No | → Employees. Sales Manager verifies accepted terms and authorised customer identity |

### ContractCycles

One unique accepted term/line/cycle occurrence; delivery-order and direct-billing paths are mutually exclusive.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| CycleNumber | text | Yes | Unique contract revision/line/occurrence key |
| ContractItem | reference | Yes | → ContractItems |
| Revision | reference | Yes | → DocumentRevisions |
| PeriodStart | date | Yes | Inclusive service/delivery interval start |
| PeriodEnd | date | Yes | Exclusive end |
| DueDate | date | Yes | Agreed action date |
| Route | select | Yes | DeliveryOrder, DirectBilling |
| Quantity | number | Yes | Accepted cycle quantity after proration |
| NetAmount | currency | Yes | Accepted net in contract currency, with rounding remainder allocation |
| Status | select | Yes | Scheduled, Reserved, Ordered, PartiallyBilled, Billed, Suspended, Cancelled |
| SalesOrderItem | reference | No | → SalesOrderItems. Only DeliveryOrder; creating it transfers MRP demand identity |
| InvoicedQuantity | number | Yes | Posted quantity across eligible SalesAllocations |
| InvoicedAmount | currency | Yes | Posted net across eligible allocations |
| OperationKey | text | Yes | Unique generation identity |

### SalesAllocations

Atomic accepted-scope/order/shipment/invoice allocation prevents staged conversion or billing beyond approved quantity and net amount.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| AllocationNumber | text | Yes | Unique allocation |
| Revision | reference | Yes | → DocumentRevisions |
| QuoteItem | reference | No | → QuoteItems |
| ContractCycle | reference | No | → ContractCycles |
| SalesOrderItem | reference | No | → SalesOrderItems |
| ShipmentItem | reference | No | → ShipmentItems |
| InvoiceItem | reference | No | → InvoiceItems |
| Kind | select | Yes | OrderCommitment, ShipmentBilling, DirectBilling, CreditRestoration |
| Quantity | number | Yes | Positive eligible quantity, net prior posted corrections |
| NetAmount | currency | Yes | Allocated accepted net in source currency, final tranche absorbs only rounding remainder |
| Status | select | Yes | Reserved, Posted, Released, Reversed |
| CreatedAt | datetime | Yes | Atomic claim time |
| PostedAt | datetime | No | Final local effect time |
| ReversalOf | reference | No | → SalesAllocations |
| OperationKey | text | Yes | Unique source/action identity |

### CreditExposures

Atomic entity/customer credit exposure includes approved uninvoiced commitments and open receivables without counting an invoice twice.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| ExposureNumber | text | Yes | Unique entity/customer/currency scope |
| Entity | reference | Yes | → Entities |
| Customer | reference | Yes | → Accounts |
| Currency | reference | Yes | → Currencies |
| OpenReceivables | currency | Yes | Net open debit balances after applied credits; unapplied credits/cash offset only under approved policy |
| ApprovedCommitments | currency | Yes | Approved unbilled order amount net cancellations and transferred invoice portions |
| ReservedCommitments | currency | Yes | Concurrent pending approval reservations |
| LimitAmount | currency | Yes | Frozen authorised credit limit |
| VersionNumber | number | Yes | Atomic compare-and-update version |
| Status | select | Yes | WithinLimit, ReviewRequired, OnHold |
| CheckedAt | datetime | Yes | Actual evaluation time |
| RateSnapshotJSON | longtext | Yes | Document-to-limit currency rates/type/date and source; missing rate blocks |
| SourceSnapshotJSON | longtext | Yes | Exact invoice/order/allocation IDs and amounts |

### ReceiptAcceptances

Immutable partial acceptance of arrived stock; only accepted scope creates owned inventory and GRNI.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| AcceptanceNumber | text | Yes | Unique receipt tranche |
| ReceiptItem | reference | Yes | → GoodsReceiptItems |
| Inspection | reference | No | → QualityInspections. Required when inspection policy applies |
| Quantity | number | Yes | Positive accepted base quantity within remaining custody and authorised PO scope |
| IdentityJSON | longtext | Yes | Lot/serial/expiry/UOM and unique serial set; disjoint prior acceptance |
| UnitCost | currency | Yes | Reviewed PO cost converted into entity functional cost, retaining original currency/rate snapshot |
| Status | select | Yes | Prepared, Approved, Posted, Reversed |
| AcceptedBy | reference | Yes | → Employees. Quality Inspector for required inspection; eligible independent receiver otherwise |
| AcceptedAt | datetime | Yes | Actual acceptance evidence time |
| StockEvent | reference | No | → StockEvents |
| JournalEntry | reference | No | → JournalEntries. Dr inventory / Cr GRNI for accepted stock only |
| Revision | reference | Yes | → DocumentRevisions |
| ReversalOf | reference | No | → ReceiptAcceptances |
| OperationKey | text | Yes | Unique acceptance effect |

### ServiceAcceptances

Independent evidence of a completed nonstock service portion without fabricated product, lot or warehouse.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| AcceptanceNumber | text | Yes | Unique accepted service scope |
| PurchaseOrderItem | reference | Yes | → PurchaseOrderItems |
| Quantity | number | Yes | Accepted service units within approved remaining scope |
| NetAmount | currency | Yes | Accepted value in PO currency |
| ServiceDate | date | Yes | Actual supply date |
| Status | select | Yes | Draft, Submitted, Accepted, Reversed |
| AcceptedBy | reference | No | → Employees. Authorised requester may confirm own service delivery; cannot approve own PO/bill |
| AcceptedAt | datetime | No | Actual confirmation |
| Evidence | attachment | Yes | Completion/milestone deliverable |
| Revision | reference | Yes | → DocumentRevisions |
| ReversalOf | reference | No | → ServiceAcceptances |

### BillMatchAllocations

Cumulative matched bill portions reserve and consume accepted stock or service evidence once.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| AllocationNumber | text | Yes | Unique allocation |
| BillItem | reference | Yes | → BillItems |
| PurchaseOrderItem | reference | No | → PurchaseOrderItems |
| ReceiptAcceptance | reference | No | → ReceiptAcceptances. Ordinary received-stock accepted source |
| ServiceAcceptance | reference | No | → ServiceAcceptances. Service source; receipt-backed match uses exactly one ReceiptAcceptance, ServiceAcceptance or DirectDeliveryEvent |
| Quantity | number | Yes | Allocated accepted quantity after prior invoices/returns/credit restoration |
| ApprovedUnitPrice | currency | Yes | Approved PO revision price in bill currency using retained conversion |
| BillNetAmount | currency | Yes | Allocated bill net amount |
| PriceVariance | currency | Yes | BillNetAmount − allocated Quantity × ApprovedUnitPrice; unrelated full PO totals excluded |
| Status | select | Yes | Reserved, Matched, ReviewRequired, Posted, Released, Reversed |
| MatchedAt | datetime | Yes | Actual evaluation |
| Policy | reference | Yes | → EnterprisePolicies |
| Revision | reference | Yes | → DocumentRevisions |
| ReversalOf | reference | No | → BillMatchAllocations |
| DirectDeliveryEvent | reference | No | → StockEvents. Posted DropShipReceipt for the matched PO/customer-demand quantity; no fabricated GoodsReceiptItem |

### StockEvents

One atomic stock operation groups balanced position movements and any source ledger effect.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| EventNumber | text | Yes | Unique source/action identity |
| Entity | reference | Yes | → Entities |
| Kind | select | Yes | ReceiptAcceptance, Issue, Completion, Transfer, Pick, Unpick, Shipment, Return, Count, Adjustment, MigrationOpening, Correction, DropShipReceipt, DropShipShipment. Direct-shipping events represent economic ownership/title without physical warehouse custody |
| Status | select | Yes | Prepared, PendingApproval, Posted, Reversed, Rejected |
| OccurredAt | datetime | Yes | Actual physical/source occurrence |
| PostedAt | datetime | No | Atomic committed effect time |
| SourceRevision | reference | No | → DocumentRevisions |
| SourceKey | text | Yes | Stable typed source key |
| SourceWarehouse | reference | No | → Warehouses |
| DestinationWarehouse | reference | No | → Warehouses |
| Quantity | number | Yes | Positive moved base quantity; transfer has equal signed movement legs |
| Value | currency | Yes | Entity-functional carried amount; no profit from same-entity transfer |
| JournalEntry | reference | No | → JournalEntries |
| ReversalOf | reference | No | → StockEvents |
| Decision | reference | No | → Approvals |
| OperationKey | text | Yes | Unique event and effects; same key with different content is ReviewRequired |
| SalesOrderItem | reference | No | → SalesOrderItems. Required for DropShip economic movements |
| PurchaseOrderItem | reference | No | → PurchaseOrderItems. Required matching approved vendor supply for DropShip |
| FulfilmentEvidenceJSON | longtext | No | Supplier/customer source IDs, approved order revisions, title-transfer terms/time, actual dispatch/delivery proof, quantity/UOM/lot/serial, required independent quality release and principal accounting assessment |

### StockLayers

Immutable origin and carried-cost lineage with derived remaining quantity/value, including migration openings.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| LayerNumber | text | Yes | Unique receipt/completion/opening layer |
| Entity | reference | Yes | → Entities |
| Product | reference | Yes | → Products |
| OriginEvent | reference | Yes | → StockEvents |
| ParentLayer | reference | No | → StockLayers. Transfer/return descendant, not another ownership balance |
| OriginalQuantity | number | Yes | Base quantity at original recognition |
| OriginalValue | currency | Yes | Entity-functional origin value |
| RemainingQuantity | number | Yes | Direct quantity currently carried by this layer only; a transfer consumes source quantity and creates a descendant layer, so parent and descendant remaining balances never duplicate ownership |
| RemainingValue | currency | Yes | Direct carried value on this layer only; source transfers remove identical value, descendants inherit it; root-lineage analytics never add ancestor summary totals to child balances |
| CostMethod | select | Yes | Standard, WeightedAverage |
| CostEvidenceJSON | longtext | Yes | Original source/rates and weighted-average pool revision or standard-cost/variance evidence |
| Status | select | Yes | Open, Exhausted, Reversed |
| CreatedAt | datetime | Yes | Origin time |

### InventoryReservations

Versioned exact-stock or demand claim; Soft to Hard conversion replaces the existing claim rather than deducting twice.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| ReservationNumber | text | Yes | Unique claim |
| Inventory | reference | Yes | → Inventory |
| SalesOrderItem | reference | No | → SalesOrderItems |
| WorkOrderComponent | reference | No | → WorkOrderComponents. Exactly one owning demand |
| Quantity | number | Yes | Remaining base quantity held, positive while active |
| State | select | Yes | Soft, Hard, Picked, Issued, Released, Expired |
| Status | select | Yes | Active, Consumed, Released |
| CreatedAt | datetime | Yes | Actual claim time |
| ExpiresAt | datetime | No | Only unpicked policy-eligible claims may expire; picked stock requires evidenced unpick |
| VersionNumber | number | Yes | Atomic claim revision |
| InventoryVersion | number | Yes | Expected position revision |
| OperationKey | text | Yes | Unique allocation/conversion identity |

### InventoryCounts

Locked warehouse/location identity scope with movement-safe snapshot and independent review above configured thresholds.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| CountNumber | text | Yes | Unique count |
| Entity | reference | Yes | → Entities |
| Warehouse | reference | Yes | → Warehouses |
| ScopeJSON | longtext | Yes | Exact locked position/identity set and lock token; include newly found identities |
| Status | select | Yes | Prepared, Locked, Counting, ReviewRequired, Approved, Posted, Abandoned |
| LockedAt | datetime | No | Actual lock acquisition |
| LockExpiresAt | datetime | No | Expired/resumed movement invalidates evidence until a fresh snapshot/recount |
| SnapshotRevision | number | Yes | Warehouse/global evidence only; posting compares locked position versions, not unrelated bins |
| CountedBy | reference | Yes | → Employees |
| ReviewedBy | reference | No | → Employees. Independent Controller for escalation/unknown/found/committed stock |
| Policy | reference | Yes | → EnterprisePolicies |
| Revision | reference | No | → DocumentRevisions |
| PostedAt | datetime | No | Atomic variance event completion |

### InventoryCountLines

Per-position count and valuation evidence; unavailable percentage or cost cannot silently pass.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| LineNumber | text | Yes | Unique count/identity line |
| Count | reference | Yes | → InventoryCounts |
| Inventory | reference | No | → Inventory. Empty only for explicitly identified found stock |
| Product | reference | Yes | → Products |
| IdentityJSON | longtext | Yes | Lot, serial, expiry, base UOM and warehouse location |
| ExpectedQuantity | number | Yes | Frozen scope quantity |
| CountedQuantity | number | Yes | Nonnegative observed quantity |
| Difference | number | Yes | CountedQuantity − ExpectedQuantity |
| DifferencePercent | number | No | 100 × abs(Difference) / ExpectedQuantity; null when expected zero |
| UnitCost | currency | No | Reviewed entity-functional carried/found cost; unknown blocks posting |
| ValueDifference | currency | No | Difference × UnitCost, with full cost-layer effects |
| InventoryVersion | number | No | Expected position version; any in-scope movement/new identity forces fresh evidence |
| Status | select | Yes | Counted, RecountRequired, Reviewed, Posted, Abandoned |
| CountedAt | datetime | Yes | Actual observation time |
| StockEvent | reference | No | → StockEvents |

### MRPRuns

Reproducible entity/warehouse/horizon demand-and-supply snapshot with stable pegging and firm-order deduplication.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| RunNumber | text | Yes | Unique run |
| Entity | reference | Yes | → Entities |
| WarehouseScopeJSON | longtext | Yes | Eligible warehouses and reviewed transfer/lead-time/nearest-warehouse policy |
| HorizonStart | date | Yes | Inclusive |
| HorizonEnd | date | Yes | Inclusive |
| SnapshotJSON | longtext | Yes | Source revision IDs, remaining quantities, reservations, due contract cycles, generated order links, open supply and calendar/capacity |
| Status | select | Yes | Prepared, Calculated, Reviewed, Superseded |
| CalculatedAt | datetime | Yes | Actual snapshot calculation |
| PreparedBy | reference | Yes | → Employees |

### ProductionCompletions

Accepted terminal output is the only production source of finished quantity and cost transfer.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| CompletionNumber | text | Yes | Unique output tranche |
| WorkOrder | reference | Yes | → WorkOrders |
| Operation | reference | Yes | → WorkOrderOperations. TerminalOperation required for finished output |
| ProductionLog | reference | Yes | → ProductionLog |
| Inspection | reference | No | → QualityInspections. Required final release evidence, distinct from first-article continuation |
| Quantity | number | Yes | Positive accepted terminal good units within released remaining quantity, unused log scope and final quality; cumulative includes WorkOrders.BaselineCompletedQuantity |
| IdentityJSON | longtext | Yes | Finished lot/unique serial set and source material lineage |
| CostTransferred | currency | Yes | Reviewed WIP cost allocated to this output once |
| Status | select | Yes | Prepared, PendingQuality, Accepted, Posted, Reversed |
| AcceptedAt | datetime | No | Actual output release |
| StockEvent | reference | No | → StockEvents |
| ReversalOf | reference | No | → ProductionCompletions |
| OperationKey | text | Yes | Unique output effect |

### WorkOrderCostEntries

Append-only material, labour, burden, completion and variance effects retain original quantity and value sources.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| CostNumber | text | Yes | Unique source/cost-kind allocation |
| WorkOrder | reference | Yes | → WorkOrders |
| Operation | reference | No | → WorkOrderOperations |
| Kind | select | Yes | Material, Labor, Overhead, Other, CompletionTransfer, Scrap, Variance, Reversal |
| Amount | currency | Yes | Signed entity-functional WIP effect; completion/scrap transfers out are negative |
| StockMovement | reference | No | → StockMovements |
| TimesheetLine | reference | No | → TimesheetLines |
| PayrollAllocation | reference | No | → PayrollAllocations |
| Quantity | number | No | Source quantity/hours |
| RateSnapshotJSON | longtext | Yes | Frozen actual cost/rate/burden basis, source scope and residual rounding |
| Status | select | Yes | Prepared, Posted, Reversed |
| PostedAt | datetime | No | Actual cost posting |
| JournalEntry | reference | No | → JournalEntries |
| ReversalOf | reference | No | → WorkOrderCostEntries |
| OperationKey | text | Yes | Unique effect, preventing payroll and absorption adding the same WIP twice |

### CreditApplications

Allocates a posted AR or AP credit to a debit document or reserves its unapplied surplus for a refund.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| ApplicationNumber | text | Yes | Unique credit allocation |
| InvoiceCredit | reference | No | → Invoices. DocumentType CreditNote |
| BillCredit | reference | No | → Bills. DocumentType VendorCreditNote; exactly one credit source |
| TargetInvoice | reference | No | → Invoices |
| TargetBill | reference | No | → Bills. Settlement target of same entity/counterparty; none for refund reservation |
| Kind | select | Yes | DocumentSettlement, RefundReservation |
| CreditAmount | currency | Yes | Consumed amount in credit currency |
| DocumentAmount | currency | Yes | Settled target amount in target currency; zero for refund reservation |
| FunctionalAmount | currency | Yes | Carrying amounts and incremental FX reconcile in snapshot |
| RateSnapshotJSON | longtext | Yes | Credit/target currency rates, carrying release, original tax/net restoration and source revision |
| Status | select | Yes | Reserved, Posted, Released, Reversed |
| CreatedAt | datetime | Yes | Atomic reservation time |
| PostedAt | datetime | No | Actual effect |
| JournalEntry | reference | No | → JournalEntries |
| ReversalOf | reference | No | → CreditApplications |
| OperationKey | text | Yes | Unique allocation effect |

### Refunds

Independently approved return of customer cash or receipt of vendor credit cash, with exclusive credit-funded or unapplied-payment funding.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| RefundNumber | text | Yes | Unique refund |
| Entity | reference | Yes | → Entities |
| Account | reference | Yes | → Accounts |
| CreditApplication | reference | No | → CreditApplications. Reserved surplus credit funding |
| PaymentReceived | reference | No | → PaymentsReceived. Unapplied cash funding; exactly one of this or credit funding |
| Currency | reference | Yes | → Currencies |
| Amount | currency | Yes | Positive cash amount; cannot consume more available funding |
| Status | select | Yes | Draft, PendingApproval, Approved, Submitted, Uncertain, Settled, Rejected, Reversed |
| RequestedAt | datetime | Yes | Actual request |
| Approval | reference | No | → Approvals. Independent Controller; no routine-credit self-confirmation for refunds |
| Instruction | reference | No | → PaymentInstructions |
| JournalEntry | reference | No | → JournalEntries |
| ReversalOf | reference | No | → Refunds |
| OperationKey | text | Yes | Unique refund effect; credit-funded refund never also reduces original payment/application |

### RevaluationLines

Item-level monetary delta from current carrying amount, including bank, unapplied cash and other reconciled monetary balances, with traceable settlement release.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| LineNumber | text | Yes | Unique run/source position |
| Run | reference | Yes | → RevaluationRuns |
| Invoice | reference | No | → Invoices |
| Bill | reference | No | → Bills |
| BankAccount | reference | No | → BankAccounts. Bank foreign-balance source; choose exactly one monetary source class |
| PaymentReceived | reference | No | → PaymentsReceived. Unapplied liability source; choose exactly one monetary source class |
| ForeignCurrency | reference | Yes | → Currencies |
| ForeignOpenAmount | currency | Yes | Remaining monetary amount at source revision |
| CarryingBefore | currency | Yes | Current functional value before this delta |
| ClosingRate | reference | Yes | → ExchangeRates |
| CarryingAfter | currency | Yes | ForeignOpenAmount × closing multiplier |
| GainLoss | currency | Yes | Asset gain = after − before; liability gain = before − after |
| ReleasedAmount | currency | Yes | Signed gain-positive portion of this posted delta reclassified from unrealised to realised on settlement; derivative tracking plus zero-net classification journal, never another net gain |
| Status | select | Yes | Calculated, Posted, Reversed |
| CalculatedAt | datetime | Yes | Actual snapshot time |
| SourceVersion | text | Yes | Exact source/open-balance revision |
| Account | reference | No | → ChartOfAccounts. Other reconciled monetary GL balance source, with matching foreign-currency/source subledger detail |
| SourceLedgerLine | reference | No | → JournalEntryLines. Optional originating line for the chosen GL balance; not a second source balance |
| SourceSnapshotJSON | longtext | Yes | Exactly one Invoice/Bill/BankAccount/PaymentReceived/other Account source with original foreign amount, carrying layers, revision and asset-versus-liability sign. GRNI and other monetary control balances require reconciled detail; no second revaluation of the same subledger through its control account |

### PaymentInstructions

Approved immutable bank/payroll/refund instruction separates release, transport, acceptance, settlement and returns.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| InstructionNumber | text | Yes | Unique bank/source/attempt identity |
| Entity | reference | Yes | → Entities |
| BankAccount | reference | Yes | → BankAccounts |
| PaymentMade | reference | No | → PaymentsMade |
| PayStatement | reference | No | → PayStatements |
| Refund | reference | No | → Refunds. Exactly one payable source |
| Revision | reference | Yes | → DocumentRevisions |
| BeneficiarySnapshot | longtext | Yes | Protected approved beneficiary version/hash; payroll identity is visible only to authorised HR/payroll processors |
| Currency | reference | Yes | → Currencies. Bank cash currency, consistent with BankAccount.Currency; source payable currency may differ |
| Amount | currency | Yes | Positive approved bank-currency cash amount; source payable conversion and fees are separately frozen |
| Status | select | Yes | Prepared, Released, Submitted, Accepted, Uncertain, Settled, Rejected, Returned, Cancelled |
| ReleasedBy | reference | No | → Employees. Independent eligible Controller; effective grant/limit evidence retained |
| ReleasedAt | datetime | No | Actual release |
| SettledAt | datetime | No | Verified bank settlement time |
| ProviderID | text | No | Bank transaction identity |
| Delivery | reference | No | → IntegrationDeliveries |
| Event | reference | No | → IntegrationEvents |
| Supersedes | reference | No | → PaymentInstructions. Retry only after authoritative nonexecution/cancellation; uncertain outcome retains reservation |
| JournalEntry | reference | No | → JournalEntries |
| OperationKey | text | Yes | One economic settlement effect across transport retries |
| SourceCurrency | reference | Yes | → Currencies. Underlying payment/bill/pay-statement/refund denomination |
| SourceAmount | currency | Yes | Underlying obligation amount being paid; no subtraction of this from a different-currency bank balance |
| ConversionSnapshotJSON | longtext | Yes | Approved source-to-bank currency multiplier/date/type, contractual payout amount, source carrying share and separate fees; missing conversion blocks |

### IntegrationEvents

Authenticated inbound event or evidenced manual source; duplicate/late events cannot repeat financial or stock effects.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| EventNumber | text | Yes | Unique source/account/event identity |
| Entity | reference | Yes | → Entities |
| Provider | text | Yes | Configured provider or ManualEvidence |
| SourceKey | text | Yes | Immutable external identifier including account/entity scope |
| ContentHash | text | Yes | Hash of validated payload; same key/different content quarantines |
| Status | select | Yes | Received, Authenticated, ReviewRequired, Applied, Ignored, Rejected |
| OccurredAt | datetime | Yes | Provider/source occurrence time |
| ReceivedAt | datetime | Yes | Actual receipt time |
| AuthenticatedAt | datetime | No | Required before any external effect |
| EffectSnapshotJSON | longtext | Yes | Validated source revision, operation keys, created record IDs, settlement/cost quantities, acknowledgements and compensation lineage |
| AppliedAt | datetime | No | Atomic effect completion |
| MigrationBatch | reference | No | → MigrationBatches. Historical imports are suppressed, not replayed as new actions |

### IntegrationDeliveries

Durable outbound intent per destination and immutable source revision; transport success never proves the downstream business action.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| DeliveryNumber | text | Yes | Unique destination/source/action key |
| Entity | reference | Yes | → Entities |
| Revision | reference | Yes | → DocumentRevisions |
| Destination | text | Yes | Configured authorised connection |
| Action | text | Yes | Exact supported operation |
| OperationKey | text | Yes | Stable across retries, reused by destination when supported |
| ContentHash | text | Yes | Payload hash bound to revision |
| Status | select | Yes | Prepared, Submitted, Acknowledged, Uncertain, Reconciled, Rejected, Cancelled |
| PreparedAt | datetime | Yes | Intent time |
| SubmittedAt | datetime | No | Actual transport time |
| AcknowledgedAt | datetime | No | Actual response evidence |
| ProviderID | text | No | Returned external identifier |
| ResponseEvidence | attachment | No | Redacted acknowledgement/reconciliation evidence |
| Supersedes | reference | No | → IntegrationDeliveries |

### EmployeePayComponents

Effective employee eligibility and calculation parameters for pay, deductions, benefits and statutory components.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| AssignmentNumber | text | Yes | Unique effective assignment |
| Employee | reference | Yes | → Employees |
| PayComponent | reference | Yes | → PayComponents |
| EffectiveFrom | date | Yes | Inclusive service date |
| EffectiveTo | date | No | Exclusive |
| Currency | reference | Yes | → Currencies |
| ParametersJSON | longtext | Yes | Fixed amount, rate, eligible hours/gross base, caps, thresholds, year, jurisdiction evidence and proration |
| Status | select | Yes | Draft, Active, Ended |
| Revision | reference | Yes | → DocumentRevisions |

### CompensationHistory

Immutable approved effective salary/hourly and sensitive employment change history for calculation and retro deltas.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| HistoryNumber | text | Yes | Unique employee/change interval |
| Employee | reference | Yes | → Employees |
| Change | reference | Yes | → MasterChanges |
| EffectiveFrom | date | Yes | Inclusive |
| EffectiveTo | date | No | Exclusive |
| Currency | reference | Yes | → Currencies |
| BaseSalary | currency | No | Protected salary amount |
| HourlyRate | currency | No | Protected hourly amount |
| SalaryBasis | select | Yes | Annual, Monthly, PayPeriod, Hourly |
| Status | select | Yes | Approved, Superseded |
| RecordedAt | datetime | Yes | Actual approved history time |

### WorkCalendars

Effective employee workweek, hours and holiday jurisdiction; leave and payable time use the same daily basis.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| CalendarNumber | text | Yes | Unique version |
| Entity | reference | Yes | → Entities |
| TimeZone | text | Yes | IANA local timezone |
| EffectiveFrom | date | Yes | Inclusive |
| EffectiveTo | date | No | Exclusive |
| Status | select | Yes | Draft, Active, Retired |
| WeeklyPatternJSON | longtext | Yes | Working weekdays, hours, shift boundaries and overnight attribution |
| HolidayPolicyJSON | longtext | Yes | Applicable HolidayCalendars country/entity and local exceptions |
| Revision | reference | Yes | → DocumentRevisions |

### WorkCalendarDays

Resolved dated calendar overrides and scheduled hours support partial days, holidays and cross-year allocation.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| DayNumber | text | Yes | Unique calendar/date |
| Calendar | reference | Yes | → WorkCalendars |
| WorkDate | date | Yes | Local work date |
| ScheduledHours | number | Yes | Zero for nonworking day |
| Status | select | Yes | Working, Holiday, Nonworking |
| Evidence | text | Yes | Pattern/holiday/override source version |

### LeaveEntries

Append-only daily leave reservation, taken, accrual, carryover and correction effects by balance year.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| EntryNumber | text | Yes | Unique source/day/effect key |
| Employee | reference | Yes | → Employees |
| LeaveType | reference | Yes | → LeaveTypes |
| LeaveRequest | reference | No | → LeaveRequests |
| Balance | reference | Yes | → LeaveBalances |
| WorkDate | date | Yes | Calendar allocation date |
| Days | number | Yes | Positive day fraction, or signed accrual/correction with source lineage |
| Hours | number | Yes | Scheduled hours represented by day fraction |
| Kind | select | Yes | Accrual, Carryover, Reservation, Taken, Release, Correction, Opening |
| Status | select | Yes | Reserved, Posted, Reversed, Released |
| CalendarDay | reference | No | → WorkCalendarDays |
| CreatedAt | datetime | Yes | Actual unique effect time |
| ReversalOf | reference | No | → LeaveEntries |
| OperationKey | text | Yes | Unique event; Approved to Taken releases reserved days and adds taken once |

### PayrollAllocations

Exact time/leave/component scope consumed by an operational payroll line, with distinct WIP absorption and salary-clearing effects.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| AllocationNumber | text | Yes | Unique source/run/line/purpose identity |
| PayrollRun | reference | Yes | → PayrollRuns |
| PayStatementLine | reference | Yes | → PayStatementLines |
| TimesheetLine | reference | No | → TimesheetLines |
| LeaveEntry | reference | No | → LeaveEntries |
| WorkOrder | reference | No | → WorkOrders |
| CostCenter | reference | Yes | → CostCenters |
| Hours | number | Yes | Unique eligible consumed hours; correction uses signed original-scope delta |
| FunctionalAmount | currency | Yes | Functional payroll charge for this allocation |
| AbsorbedAmount | currency | Yes | Prior WorkOrderCostEntries labour absorption being cleared, not new WIP |
| Status | select | Yes | Reserved, Posted, Released, Reversed |
| CreatedAt | datetime | Yes | Claim time |
| PostedAt | datetime | No | Operational payroll posting |
| ReversalOf | reference | No | → PayrollAllocations |
| JournalEntry | reference | No | → JournalEntries |

### PayrollOpeningBalances

Approved nonposting cutover YTD amounts by employee, component and tax year; not a fresh payroll payment or GL charge.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| OpeningNumber | text | Yes | Unique employee/component/year/cutoff |
| Batch | reference | Yes | → MigrationBatches |
| Employee | reference | Yes | → Employees |
| PayComponent | reference | Yes | → PayComponents |
| TaxYear | text | Yes | Jurisdiction tax year |
| Currency | reference | Yes | → Currencies |
| Amount | currency | Yes | Approved historical YTD magnitude/delta |
| CutoffDate | date | Yes | Inclusive historical cutoff |
| Status | select | Yes | Prepared, Approved, Imported, Rejected |

### AssetBooks

Separate effective Book/Tax asset balances and depreciation parameters; only designated Book balances project to FixedAssets.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| BookNumber | text | Yes | Unique asset/book/version |
| Asset | reference | Yes | → FixedAssets |
| Entity | reference | Yes | → Entities |
| Book | select | Yes | Book, Tax |
| Currency | reference | Yes | → Currencies |
| Cost | currency | Yes | Current book-specific depreciable cost |
| AccumulatedDepreciation | currency | Yes | Book-specific accumulated charge |
| AccumulatedImpairment | currency | Yes | Book-specific impairment |
| ResidualValue | currency | Yes | Floor under approved method |
| Method | select | Yes | StraightLine, DecliningBalance, DoubleDeclining, UnitsOfProduction, None. Existing FixedAssets.DepreciationMethod vocabulary maps explicitly to these same methods; original field type/values remain |
| ParametersJSON | longtext | Yes | Life, service date, declining rate, production capacity/actual units, period fractions and method-change approval |
| VersionNumber | number | Yes | Atomic current book balance revision |
| Status | select | Yes | Active, Disposed, Transferred |
| EffectiveFrom | date | Yes | Start |
| OpeningBatch | reference | No | → MigrationBatches |

### AssetEvents

Reviewed capitalisation, impairment, disposal and transfer preserve book-specific opening, movement and closing evidence.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| EventNumber | text | Yes | Unique asset/book/action |
| AssetBook | reference | Yes | → AssetBooks |
| Kind | select | Yes | Capitalisation, Impairment, Disposal, TransferOut, TransferIn, Correction, Opening |
| EventDate | date | Yes | Actual effective date |
| Amount | currency | Yes | Signed book effect, with complete cost/depreciation/impairment components in snapshot |
| SnapshotJSON | longtext | Yes | Before/after cost, accumulated values, proceeds, gain/loss, entity/currency and counterpart transfer; never merely change Entity |
| Status | select | Yes | Draft, PendingApproval, Approved, Posted, Reversed |
| Approval | reference | No | → Approvals |
| JournalEntry | reference | No | → JournalEntries |
| Counterpart | reference | No | → AssetEvents |
| ReversalOf | reference | No | → AssetEvents |
| PostedAt | datetime | No | Actual posting |

### CloseTemplates

Approved versioned close checklist policy with task owners, dependencies and required evidence.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| TemplateNumber | text | Yes | Unique entity/template/version |
| Entity | reference | Yes | → Entities |
| Version | number | Yes | Immutable active version |
| EffectiveFrom | date | Yes | Inclusive |
| Status | select | Yes | Draft, Active, Retired |
| TasksJSON | longtext | Yes | Stable task keys, categories, eligible named owners, required evidence and acyclic dependency keys |
| Revision | reference | Yes | → DocumentRevisions |

### CloseDependencies

Every dependency of a period task, not just the retained single DependsOn summary field.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| DependencyNumber | text | Yes | Unique task/prerequisite |
| Task | reference | Yes | → CloseTasks |
| Prerequisite | reference | Yes | → CloseTasks. Same entity/period or explicitly approved cross-entity scope; graph acyclic |
| Status | select | Yes | Required, Satisfied, Waived |
| Decision | reference | No | → Approvals. Required waiver evidence |
| CheckedAt | datetime | Yes | Actual latest evidence check |

### AllocationRuns

Reviewed cost-centre/account allocations retain balanced source and driver workings and a unique posting.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| RunNumber | text | Yes | Unique entity/period/policy/revision |
| Entity | reference | Yes | → Entities |
| Period | reference | Yes | → AccountingPeriods |
| SourceLedgerRevision | number | Yes | Frozen posted source |
| Policy | reference | Yes | → EnterprisePolicies |
| Status | select | Yes | Draft, Calculated, Approved, Posted, Reversed |
| CalculatedAt | datetime | Yes | Actual calculation |
| Approval | reference | No | → Approvals |
| JournalEntry | reference | No | → JournalEntries |
| ReversalOf | reference | No | → AllocationRuns |

### AllocationLines

Driver and currency amounts for each allocation destination with exact remainder reconciliation.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| LineNumber | text | Yes | Unique run/source/destination |
| Run | reference | Yes | → AllocationRuns |
| SourceAccount | reference | Yes | → ChartOfAccounts |
| SourceCostCenter | reference | No | → CostCenters |
| DestinationAccount | reference | Yes | → ChartOfAccounts |
| DestinationCostCenter | reference | Yes | → CostCenters |
| SourceAmount | currency | Yes | Pool amount counted once by source group |
| DriverQuantity | number | Yes | Nonnegative documented driver |
| DriverTotal | number | Yes | Positive denominator for source group; zero blocks allocation |
| AllocatedAmount | currency | Yes | SourceAmount × DriverQuantity / DriverTotal; final line absorbs rounding only |
| EvidenceJSON | longtext | Yes | Source lines/driver observation dates and approved correction basis |

### ConsolidationEntities

Run-specific ownership/method, local-period and closed-ledger snapshot per included entity.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| EntityNumber | text | Yes | Unique run/entity |
| Run | reference | Yes | → ConsolidationRuns |
| Entity | reference | Yes | → Entities |
| ReportingPeriod | reference | Yes | → AccountingPeriods |
| LocalPeriodsJSON | longtext | Yes | Exact eligible entity period IDs spanning reporting interval; all required periods hard-closed |
| OwnershipPercent | number | Yes | Effective ownership at reporting date, including reviewed changes |
| Method | select | Yes | Full, Proportional, Equity, NotConsolidated |
| SourceLedgerRevision | number | Yes | Immutable source trial-balance version |
| SnapshotJSON | longtext | Yes | Ownership history, local functional currency, rate policies, NCI and equity-method workings; no universal ownership multiplier |
| Status | select | Yes | Prepared, Reviewed, Locked, Reversed |
| ReviewedAt | datetime | No | Actual review |

### ConsolidationAdjustments

Balanced group adjustment/elimination details retain partner agreement, method and signed line evidence.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| AdjustmentNumber | text | Yes | Unique run/adjustment/line |
| Run | reference | Yes | → ConsolidationRuns |
| RunLine | reference | Yes | → ConsolidationRunLines |
| PartnerEntity | reference | No | → Entities |
| Account | reference | Yes | → ChartOfAccounts |
| Kind | select | Yes | Intercompany, InvestmentEquity, NCI, TranslationReserve, EquityMethod, Correction |
| Amount | currency | Yes | Signed reporting-currency amount |
| CounterpartKey | text | Yes | Balanced adjustment group; differences remain review exceptions |
| SourceEvidenceJSON | longtext | Yes | Partner source lines, agreed difference handling, rate/currency and method workings |
| Status | select | Yes | Prepared, Reviewed, Locked, Reversed |
| ReviewedBy | reference | No | → Employees. Independent eligible Controller |
| ReviewedAt | datetime | No | Actual review |

### MigrationBatches

Approved cutover manifest and nonposting import policy preserve history and suppress operational replays.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| BatchNumber | text | Yes | Unique source/entity/cutoff batch |
| Entity | reference | Yes | → Entities |
| CutoffAt | datetime | Yes | Exact source watermark/cutoff |
| Status | select | Yes | Prepared, Validated, Approved, Imported, Reconciled, Rejected |
| Manifest | attachment | Yes | Source totals, identifiers, hashes, currency/cost and original partial histories |
| OpeningJournal | reference | No | → JournalEntries. Single full opening GL; imported open items/stock/books/YTD are nonposting |
| PolicyJSON | longtext | Yes | Two-pass reference mapping, nonposting imports, historical event suppression, opening control mapping and rollback limits |
| ApprovedBy | reference | No | → Employees. Independent Controller plus HR/payroll review for protected balances |
| ApprovedAt | datetime | No | Cutover approval |
| ReconciledAt | datetime | No | Control reconciliation accepted |

### MigrationItems

Replay-safe source-to-target mapping and retained partial balances for each imported record.

| Field | Type | Required | Definition |
| --- | --- | --- | --- |
| ItemNumber | text | Yes | Unique batch/source table/source ID |
| Batch | reference | Yes | → MigrationBatches |
| SourceTable | text | Yes | Historical type |
| SourceID | text | Yes | Stable original key |
| ContentHash | text | Yes | Same key with conflicting content blocks |
| TargetTable | text | Yes | Validated existing table |
| TargetID | text | Yes | Mapped internal key |
| OriginalSnapshotJSON | longtext | Yes | Original quantities, accepted/shipped/billed/settled-to-date, remaining balances, carrying revaluation, cost layers and source timestamps |
| Status | select | Yes | Prepared, Validated, Imported, Reconciled, Rejected |
| ImportedAt | datetime | No | Actual load time |

## Relationships

- Currencies → Entities (one-to-many): Entities.FunctionalCurrency is a required reference; each child points to one parent.
- Currencies → Entities (one-to-many): Entities.ReportingCurrency is a required reference; each child points to one parent.
- Entities → Entities (one-to-many): Entities.ParentEntity is a optional reference; each child points to at most one parent.
- TaxJurisdictions → Entities (one-to-many): Entities.Jurisdiction is a optional reference; each child points to at most one parent.
- EnterprisePolicies → Entities (one-to-many): Entities.Policy is a optional reference; each child points to at most one parent.
- Currencies → ExchangeRates (one-to-many): ExchangeRates.FromCurrency is a required reference; each child points to one parent.
- Currencies → ExchangeRates (one-to-many): ExchangeRates.ToCurrency is a required reference; each child points to one parent.
- ChartOfAccounts → ChartOfAccounts (one-to-many): ChartOfAccounts.ParentAccount is a optional reference; each child points to at most one parent.
- Currencies → ChartOfAccounts (one-to-many): ChartOfAccounts.Currency is a optional reference; each child points to at most one parent.
- Entities → AccountingPeriods (one-to-many): AccountingPeriods.Entity is a required reference; each child points to one parent.
- Employees → AccountingPeriods (one-to-many): AccountingPeriods.ClosedBy is a optional reference; each child points to at most one parent.
- CloseTemplates → AccountingPeriods (one-to-many): AccountingPeriods.Template is a optional reference; each child points to at most one parent.
- TaxJurisdictions → TaxCodes (one-to-many): TaxCodes.Jurisdiction is a required reference; each child points to one parent.
- ChartOfAccounts → TaxCodes (one-to-many): TaxCodes.GLAccount is a required reference; each child points to one parent.
- DocumentRevisions → TaxCodes (one-to-many): TaxCodes.ReviewedRevision is a optional reference; each child points to at most one parent.
- Entities → BankAccounts (one-to-many): BankAccounts.Entity is a required reference; each child points to one parent.
- Currencies → BankAccounts (one-to-many): BankAccounts.Currency is a required reference; each child points to one parent.
- ChartOfAccounts → BankAccounts (one-to-many): BankAccounts.GLAccount is a required reference; each child points to one parent.
- DocumentRevisions → BankAccounts (one-to-many): BankAccounts.ApprovedRevision is a optional reference; each child points to at most one parent.
- Entities → CostCenters (one-to-many): CostCenters.Entity is a required reference; each child points to one parent.
- CostCenters → CostCenters (one-to-many): CostCenters.Parent is a optional reference; each child points to at most one parent.
- Employees → CostCenters (one-to-many): CostCenters.Manager is a optional reference; each child points to at most one parent.
- Entities → Departments (one-to-many): Departments.Entity is a required reference; each child points to one parent.
- Departments → Departments (one-to-many): Departments.Parent is a optional reference; each child points to at most one parent.
- Employees → Departments (one-to-many): Departments.Head is a optional reference; each child points to at most one parent.
- CostCenters → Departments (one-to-many): Departments.CostCenter is a optional reference; each child points to at most one parent.
- Entities → Positions (one-to-many): Positions.Entity is a required reference; each child points to one parent.
- Departments → Positions (one-to-many): Positions.Department is a required reference; each child points to one parent.
- CostCenters → Positions (one-to-many): Positions.CostCenter is a optional reference; each child points to at most one parent.
- Positions → Positions (one-to-many): Positions.ReportsTo is a optional reference; each child points to at most one parent.
- DocumentRevisions → Positions (one-to-many): Positions.ApprovedRevision is a optional reference; each child points to at most one parent.
- Entities → Employees (one-to-many): Employees.Entity is a required reference; each child points to one parent.
- Departments → Employees (one-to-many): Employees.Department is a required reference; each child points to one parent.
- Positions → Employees (one-to-many): Employees.Position is a optional reference; each child points to at most one parent.
- Employees → Employees (one-to-many): Employees.Manager is a optional reference; each child points to at most one parent.
- Warehouses → Employees (one-to-many): Employees.Warehouse is a optional reference; each child points to at most one parent.
- TaxJurisdictions → Employees (one-to-many): Employees.PayrollJurisdiction is a optional reference; each child points to at most one parent.
- Currencies → Employees (one-to-many): Employees.PayCurrency is a required reference; each child points to one parent.
- WorkCalendars → Employees (one-to-many): Employees.WorkCalendar is a optional reference; each child points to at most one parent.
- Entities → Accounts (one-to-many): Accounts.Entity is a optional reference; each child points to at most one parent.
- Entities → Accounts (one-to-many): Accounts.IntercompanyEntity is a optional reference; each child points to at most one parent.
- Employees → Accounts (one-to-many): Accounts.AccountOwner is a optional reference; each child points to at most one parent.
- PaymentTerms → Accounts (one-to-many): Accounts.PaymentTerms is a optional reference; each child points to at most one parent.
- PaymentTerms → Accounts (one-to-many): Accounts.VendorPaymentTerms is a optional reference; each child points to at most one parent.
- Currencies → Accounts (one-to-many): Accounts.Currency is a optional reference; each child points to at most one parent.
- TaxCodes → Accounts (one-to-many): Accounts.DefaultTaxCode is a optional reference; each child points to at most one parent.
- TaxJurisdictions → Accounts (one-to-many): Accounts.Jurisdiction is a optional reference; each child points to at most one parent.
- Currencies → Accounts (one-to-many): Accounts.CreditCurrency is a optional reference; each child points to at most one parent.
- EnterprisePolicies → Accounts (one-to-many): Accounts.CreditPolicy is a optional reference; each child points to at most one parent.
- Accounts → ContactPersons (one-to-many): ContactPersons.Account is a required reference; each child points to one parent.
- Employees → ContactPersons (one-to-many): ContactPersons.Owner is a optional reference; each child points to at most one parent.
- Leads → ContactPersons (one-to-many): ContactPersons.SourceLead is a optional reference; each child points to at most one parent.
- Currencies → PriceBooks (one-to-many): PriceBooks.Currency is a required reference; each child points to one parent.
- Entities → PriceBooks (one-to-many): PriceBooks.Entity is a optional reference; each child points to at most one parent.
- DocumentRevisions → PriceBooks (one-to-many): PriceBooks.ApprovedRevision is a optional reference; each child points to at most one parent.
- Entities → Warehouses (one-to-many): Warehouses.Entity is a required reference; each child points to one parent.
- Employees → Warehouses (one-to-many): Warehouses.Manager is a optional reference; each child points to at most one parent.
- Warehouses → Products (one-to-many): Products.DefaultWarehouse is a optional reference; each child points to at most one parent.
- Accounts → Products (one-to-many): Products.PreferredVendor is a optional reference; each child points to at most one parent.
- Currencies → Products (one-to-many): Products.StandardCostCurrency is a optional reference; each child points to at most one parent.
- Entities → Products (one-to-many): Products.StandardCostEntity is a optional reference; each child points to at most one parent.
- Products → BOMs (one-to-many): BOMs.Product is a required reference; each child points to one parent.
- DocumentRevisions → BOMs (one-to-many): BOMs.ApprovedRevision is a optional reference; each child points to at most one parent.
- BOMs → BOMComponents (one-to-many): BOMComponents.BOM is a required reference; each child points to one parent.
- Products → BOMComponents (one-to-many): BOMComponents.Component is a required reference; each child points to one parent.
- Products → Routings (one-to-many): Routings.Product is a required reference; each child points to one parent.
- DocumentRevisions → Routings (one-to-many): Routings.ApprovedRevision is a optional reference; each child points to at most one parent.
- Routings → RoutingOperations (one-to-many): RoutingOperations.Routing is a required reference; each child points to one parent.
- WorkCenters → RoutingOperations (one-to-many): RoutingOperations.WorkCenter is a required reference; each child points to one parent.
- Entities → WorkCenters (one-to-many): WorkCenters.Entity is a required reference; each child points to one parent.
- Departments → WorkCenters (one-to-many): WorkCenters.Department is a required reference; each child points to one parent.
- Employees → WorkCenters (one-to-many): WorkCenters.Supervisor is a optional reference; each child points to at most one parent.
- Entities → LeaveTypes (one-to-many): LeaveTypes.Entity is a required reference; each child points to one parent.
- DocumentRevisions → LeaveTypes (one-to-many): LeaveTypes.ApprovedRevision is a optional reference; each child points to at most one parent.
- Entities → HolidayCalendars (one-to-many): HolidayCalendars.Entity is a required reference; each child points to one parent.
- TaxJurisdictions → PayComponents (one-to-many): PayComponents.Jurisdiction is a optional reference; each child points to at most one parent.
- ChartOfAccounts → PayComponents (one-to-many): PayComponents.GLAccount is a required reference; each child points to one parent.
- DocumentRevisions → PayComponents (one-to-many): PayComponents.ApprovedRevision is a optional reference; each child points to at most one parent.
- ChartOfAccounts → PayComponents (one-to-many): PayComponents.LiabilityAccount is a optional reference; each child points to at most one parent.
- ChartOfAccounts → AssetCategories (one-to-many): AssetCategories.AssetAccount is a required reference; each child points to one parent.
- ChartOfAccounts → AssetCategories (one-to-many): AssetCategories.AccumulatedDepreciationAccount is a required reference; each child points to one parent.
- ChartOfAccounts → AssetCategories (one-to-many): AssetCategories.DepreciationExpenseAccount is a required reference; each child points to one parent.
- DocumentRevisions → AssetCategories (one-to-many): AssetCategories.ApprovedRevision is a optional reference; each child points to at most one parent.
- Entities → Leads (one-to-many): Leads.Entity is a required reference; each child points to one parent.
- Employees → Leads (one-to-many): Leads.Owner is a required reference; each child points to one parent.
- Accounts → Leads (one-to-many): Leads.ConvertedAccount is a optional reference; each child points to at most one parent.
- ContactPersons → Leads (one-to-many): Leads.ConvertedContactPerson is a optional reference; each child points to at most one parent.
- Opportunities → Leads (one-to-many): Leads.ConvertedOpportunity is a optional reference; each child points to at most one parent.
- Entities → Opportunities (one-to-many): Opportunities.Entity is a required reference; each child points to one parent.
- Accounts → Opportunities (one-to-many): Opportunities.Account is a required reference; each child points to one parent.
- ContactPersons → Opportunities (one-to-many): Opportunities.PrimaryContact is a optional reference; each child points to at most one parent.
- Currencies → Opportunities (one-to-many): Opportunities.Currency is a required reference; each child points to one parent.
- Employees → Opportunities (one-to-many): Opportunities.Owner is a required reference; each child points to one parent.
- Leads → Opportunities (one-to-many): Opportunities.SourceLead is a optional reference; each child points to at most one parent.
- PriceBooks → Opportunities (one-to-many): Opportunities.PriceBook is a optional reference; each child points to at most one parent.
- Accounts → Activities (one-to-many): Activities.Account is a optional reference; each child points to at most one parent.
- ContactPersons → Activities (one-to-many): Activities.ContactPerson is a optional reference; each child points to at most one parent.
- Employees → Activities (one-to-many): Activities.Owner is a required reference; each child points to one parent.
- Entities → Quotes (one-to-many): Quotes.Entity is a required reference; each child points to one parent.
- Accounts → Quotes (one-to-many): Quotes.Customer is a required reference; each child points to one parent.
- ContactPersons → Quotes (one-to-many): Quotes.ContactPerson is a optional reference; each child points to at most one parent.
- Opportunities → Quotes (one-to-many): Quotes.Opportunity is a optional reference; each child points to at most one parent.
- Currencies → Quotes (one-to-many): Quotes.Currency is a required reference; each child points to one parent.
- PriceBooks → Quotes (one-to-many): Quotes.PriceBook is a required reference; each child points to one parent.
- Employees → Quotes (one-to-many): Quotes.Owner is a required reference; each child points to one parent.
- Employees → Quotes (one-to-many): Quotes.ApprovedBy is a optional reference; each child points to at most one parent.
- SalesOrders → Quotes (one-to-many): Quotes.ConvertedOrder is a optional reference; each child points to at most one parent.
- DocumentRevisions → Quotes (one-to-many): Quotes.CurrentRevision is a optional reference; each child points to at most one parent.
- Employees → Quotes (one-to-many): Quotes.CreatedBy is a optional reference; each child points to at most one parent.
- DocumentRevisions → Quotes (one-to-many): Quotes.AcceptedRevision is a optional reference; each child points to at most one parent.
- SignatureRequests → Quotes (one-to-many): Quotes.SignatureRequest is a optional reference; each child points to at most one parent.
- Quotes → QuoteItems (one-to-many): QuoteItems.Quote is a required reference; each child points to one parent.
- Products → QuoteItems (one-to-many): QuoteItems.Product is a required reference; each child points to one parent.
- TaxCodes → QuoteItems (one-to-many): QuoteItems.TaxCode is a optional reference; each child points to at most one parent.
- PriceBookEntries → QuoteItems (one-to-many): QuoteItems.PriceBookEntry is a optional reference; each child points to at most one parent.
- ProductPostingProfiles → QuoteItems (one-to-many): QuoteItems.CostProfile is a optional reference; each child points to at most one parent.
- ExchangeRates → QuoteItems (one-to-many): QuoteItems.CostRate is a optional reference; each child points to at most one parent.
- Entities → Contracts (one-to-many): Contracts.Entity is a required reference; each child points to one parent.
- Accounts → Contracts (one-to-many): Contracts.Customer is a required reference; each child points to one parent.
- ContactPersons → Contracts (one-to-many): Contracts.ContactPerson is a optional reference; each child points to at most one parent.
- Currencies → Contracts (one-to-many): Contracts.Currency is a required reference; each child points to one parent.
- PriceBooks → Contracts (one-to-many): Contracts.PriceBook is a optional reference; each child points to at most one parent.
- Contracts → Contracts (one-to-many): Contracts.RenewedTo is a optional reference; each child points to at most one parent.
- Employees → Contracts (one-to-many): Contracts.Owner is a required reference; each child points to one parent.
- DocumentRevisions → Contracts (one-to-many): Contracts.CurrentRevision is a optional reference; each child points to at most one parent.
- Employees → Contracts (one-to-many): Contracts.CreatedBy is a optional reference; each child points to at most one parent.
- DocumentRevisions → Contracts (one-to-many): Contracts.AcceptedRevision is a optional reference; each child points to at most one parent.
- SignatureRequests → Contracts (one-to-many): Contracts.SignatureRequest is a optional reference; each child points to at most one parent.
- Contracts → Contracts (one-to-many): Contracts.AmendsContract is a optional reference; each child points to at most one parent.
- Contracts → ContractItems (one-to-many): ContractItems.Contract is a required reference; each child points to one parent.
- Products → ContractItems (one-to-many): ContractItems.Product is a required reference; each child points to one parent.
- TaxCodes → ContractItems (one-to-many): ContractItems.TaxCode is a optional reference; each child points to at most one parent.
- Entities → SalesOrders (one-to-many): SalesOrders.Entity is a required reference; each child points to one parent.
- Accounts → SalesOrders (one-to-many): SalesOrders.Customer is a required reference; each child points to one parent.
- ContactPersons → SalesOrders (one-to-many): SalesOrders.ContactPerson is a optional reference; each child points to at most one parent.
- Quotes → SalesOrders (one-to-many): SalesOrders.SourceQuote is a optional reference; each child points to at most one parent.
- Contracts → SalesOrders (one-to-many): SalesOrders.Contract is a optional reference; each child points to at most one parent.
- Currencies → SalesOrders (one-to-many): SalesOrders.Currency is a required reference; each child points to one parent.
- PriceBooks → SalesOrders (one-to-many): SalesOrders.PriceBook is a optional reference; each child points to at most one parent.
- Employees → SalesOrders (one-to-many): SalesOrders.SalesRep is a required reference; each child points to one parent.
- Employees → SalesOrders (one-to-many): SalesOrders.SalesManager is a required reference; each child points to one parent.
- Employees → SalesOrders (one-to-many): SalesOrders.ApprovedBy is a optional reference; each child points to at most one parent.
- PurchaseOrders → SalesOrders (one-to-many): SalesOrders.IntercompanyPartnerOrder is a optional reference; each child points to at most one parent.
- DocumentRevisions → SalesOrders (one-to-many): SalesOrders.CurrentRevision is a optional reference; each child points to at most one parent.
- Employees → SalesOrders (one-to-many): SalesOrders.CreatedBy is a optional reference; each child points to at most one parent.
- CreditExposures → SalesOrders (one-to-many): SalesOrders.CreditExposure is a optional reference; each child points to at most one parent.
- Approvals → SalesOrders (one-to-many): SalesOrders.CreditException is a optional reference; each child points to at most one parent.
- SalesOrders → SalesOrderItems (one-to-many): SalesOrderItems.SalesOrder is a required reference; each child points to one parent.
- Products → SalesOrderItems (one-to-many): SalesOrderItems.Product is a required reference; each child points to one parent.
- Warehouses → SalesOrderItems (one-to-many): SalesOrderItems.Warehouse is a optional reference; each child points to at most one parent.
- TaxCodes → SalesOrderItems (one-to-many): SalesOrderItems.TaxCode is a optional reference; each child points to at most one parent.
- WorkOrders → SalesOrderItems (one-to-many): SalesOrderItems.WorkOrder is a optional reference; each child points to at most one parent.
- QuoteItems → SalesOrderItems (one-to-many): SalesOrderItems.SourceQuoteItem is a optional reference; each child points to at most one parent.
- ContractCycles → SalesOrderItems (one-to-many): SalesOrderItems.ContractCycle is a optional reference; each child points to at most one parent.
- PurchaseOrderItems → SalesOrderItems (one-to-many): SalesOrderItems.DropShipPurchaseOrderItem is a optional reference; each child points to at most one parent.
- Entities → Shipments (one-to-many): Shipments.Entity is a required reference; each child points to one parent.
- SalesOrders → Shipments (one-to-many): Shipments.SalesOrder is a required reference; each child points to one parent.
- Accounts → Shipments (one-to-many): Shipments.Customer is a required reference; each child points to one parent.
- Warehouses → Shipments (one-to-many): Shipments.Warehouse is a required reference; each child points to one parent.
- Employees → Shipments (one-to-many): Shipments.PackedBy is a optional reference; each child points to at most one parent.
- JournalEntries → Shipments (one-to-many): Shipments.JournalEntry is a optional reference; each child points to at most one parent.
- IntegrationEvents → Shipments (one-to-many): Shipments.Event is a optional reference; each child points to at most one parent.
- Shipments → ShipmentItems (one-to-many): ShipmentItems.Shipment is a required reference; each child points to one parent.
- SalesOrderItems → ShipmentItems (one-to-many): ShipmentItems.SalesOrderItem is a required reference; each child points to one parent.
- Products → ShipmentItems (one-to-many): ShipmentItems.Product is a required reference; each child points to one parent.
- Warehouses → ShipmentItems (one-to-many): ShipmentItems.Warehouse is a required reference; each child points to one parent.
- StockMovements → ShipmentItems (one-to-many): ShipmentItems.StockMovement is a optional reference; each child points to at most one parent.
- InventoryReservations → ShipmentItems (one-to-many): ShipmentItems.Reservation is a optional reference; each child points to at most one parent.
- StockEvents → ShipmentItems (one-to-many): ShipmentItems.StockEvent is a optional reference; each child points to at most one parent.
- Invoices → Invoices (one-to-many): Invoices.CreditFor is a optional reference; each child points to at most one parent.
- Entities → Invoices (one-to-many): Invoices.Entity is a required reference; each child points to one parent.
- Accounts → Invoices (one-to-many): Invoices.Customer is a required reference; each child points to one parent.
- ContactPersons → Invoices (one-to-many): Invoices.ContactPerson is a optional reference; each child points to at most one parent.
- SalesOrders → Invoices (one-to-many): Invoices.SourceOrder is a optional reference; each child points to at most one parent.
- Shipments → Invoices (one-to-many): Invoices.Shipment is a optional reference; each child points to at most one parent.
- Contracts → Invoices (one-to-many): Invoices.Contract is a optional reference; each child points to at most one parent.
- Employees → Invoices (one-to-many): Invoices.SalesRep is a optional reference; each child points to at most one parent.
- AccountingPeriods → Invoices (one-to-many): Invoices.Period is a required reference; each child points to one parent.
- Currencies → Invoices (one-to-many): Invoices.Currency is a required reference; each child points to one parent.
- PaymentTerms → Invoices (one-to-many): Invoices.PaymentTerms is a required reference; each child points to one parent.
- Employees → Invoices (one-to-many): Invoices.ApprovedBy is a optional reference; each child points to at most one parent.
- JournalEntries → Invoices (one-to-many): Invoices.JournalEntry is a optional reference; each child points to at most one parent.
- DocumentRevisions → Invoices (one-to-many): Invoices.CurrentRevision is a optional reference; each child points to at most one parent.
- Employees → Invoices (one-to-many): Invoices.CreatedBy is a optional reference; each child points to at most one parent.
- Invoices → InvoiceItems (one-to-many): InvoiceItems.Invoice is a required reference; each child points to one parent.
- Products → InvoiceItems (one-to-many): InvoiceItems.Product is a optional reference; each child points to at most one parent.
- ShipmentItems → InvoiceItems (one-to-many): InvoiceItems.ShipmentItem is a optional reference; each child points to at most one parent.
- ContractItems → InvoiceItems (one-to-many): InvoiceItems.ContractItem is a optional reference; each child points to at most one parent.
- ChartOfAccounts → InvoiceItems (one-to-many): InvoiceItems.RevenueAccount is a required reference; each child points to one parent.
- CostCenters → InvoiceItems (one-to-many): InvoiceItems.CostCenter is a optional reference; each child points to at most one parent.
- TaxCodes → InvoiceItems (one-to-many): InvoiceItems.TaxCode is a optional reference; each child points to at most one parent.
- SalesAllocations → InvoiceItems (one-to-many): InvoiceItems.SalesAllocation is a optional reference; each child points to at most one parent.
- ContractCycles → InvoiceItems (one-to-many): InvoiceItems.ContractCycle is a optional reference; each child points to at most one parent.
- InvoiceItems → InvoiceItems (one-to-many): InvoiceItems.OriginalInvoiceItem is a optional reference; each child points to at most one parent.
- Entities → PaymentsReceived (one-to-many): PaymentsReceived.Entity is a required reference; each child points to one parent.
- Accounts → PaymentsReceived (one-to-many): PaymentsReceived.Customer is a optional reference; each child points to at most one parent.
- AccountingPeriods → PaymentsReceived (one-to-many): PaymentsReceived.Period is a required reference; each child points to one parent.
- Currencies → PaymentsReceived (one-to-many): PaymentsReceived.Currency is a required reference; each child points to one parent.
- BankAccounts → PaymentsReceived (one-to-many): PaymentsReceived.BankAccount is a required reference; each child points to one parent.
- BankStatementLines → PaymentsReceived (one-to-many): PaymentsReceived.BankStatementLine is a optional reference; each child points to at most one parent.
- JournalEntries → PaymentsReceived (one-to-many): PaymentsReceived.JournalEntry is a optional reference; each child points to at most one parent.
- PaymentsReceived → PaymentsReceived (one-to-many): PaymentsReceived.ReversalOf is a optional reference; each child points to at most one parent.
- IntegrationEvents → PaymentsReceived (one-to-many): PaymentsReceived.Event is a optional reference; each child points to at most one parent.
- PaymentsReceived → PaymentApplications (one-to-many): PaymentApplications.Payment is a required reference; each child points to one parent.
- Invoices → PaymentApplications (one-to-many): PaymentApplications.Invoice is a required reference; each child points to one parent.
- Employees → PaymentApplications (one-to-many): PaymentApplications.AppliedBy is a required reference; each child points to one parent.
- ExchangeRates → PaymentApplications (one-to-many): PaymentApplications.PaymentRate is a optional reference; each child points to at most one parent.
- ExchangeRates → PaymentApplications (one-to-many): PaymentApplications.DocumentRate is a optional reference; each child points to at most one parent.
- PaymentApplications → PaymentApplications (one-to-many): PaymentApplications.ReversalOf is a optional reference; each child points to at most one parent.
- Approvals → PaymentApplications (one-to-many): PaymentApplications.Decision is a optional reference; each child points to at most one parent.
- JournalEntries → PaymentApplications (one-to-many): PaymentApplications.JournalEntry is a optional reference; each child points to at most one parent.
- JournalEntries → PaymentApplications (one-to-many): PaymentApplications.FXReclassificationJournal is a optional reference; each child points to at most one parent.
- Entities → CustomerReturns (one-to-many): CustomerReturns.Entity is a required reference; each child points to one parent.
- Accounts → CustomerReturns (one-to-many): CustomerReturns.Customer is a required reference; each child points to one parent.
- ShipmentItems → CustomerReturns (one-to-many): CustomerReturns.ShipmentItem is a required reference; each child points to one parent.
- Products → CustomerReturns (one-to-many): CustomerReturns.Product is a required reference; each child points to one parent.
- Warehouses → CustomerReturns (one-to-many): CustomerReturns.Warehouse is a optional reference; each child points to at most one parent.
- Invoices → CustomerReturns (one-to-many): CustomerReturns.CreditNote is a optional reference; each child points to at most one parent.
- Employees → CustomerReturns (one-to-many): CustomerReturns.AuthorisedBy is a optional reference; each child points to at most one parent.
- StockEvents → CustomerReturns (one-to-many): CustomerReturns.StockEvent is a optional reference; each child points to at most one parent.
- Entities → Requisitions (one-to-many): Requisitions.Entity is a required reference; each child points to one parent.
- Employees → Requisitions (one-to-many): Requisitions.RequestedBy is a required reference; each child points to one parent.
- CostCenters → Requisitions (one-to-many): Requisitions.CostCenter is a required reference; each child points to one parent.
- PlannedOrders → Requisitions (one-to-many): Requisitions.PlannedOrder is a optional reference; each child points to at most one parent.
- Currencies → Requisitions (one-to-many): Requisitions.Currency is a required reference; each child points to one parent.
- Employees → Requisitions (one-to-many): Requisitions.ApprovedBy is a optional reference; each child points to at most one parent.
- DocumentRevisions → Requisitions (one-to-many): Requisitions.CurrentRevision is a optional reference; each child points to at most one parent.
- Employees → Requisitions (one-to-many): Requisitions.CreatedBy is a optional reference; each child points to at most one parent.
- Requisitions → RequisitionItems (one-to-many): RequisitionItems.Requisition is a required reference; each child points to one parent.
- Products → RequisitionItems (one-to-many): RequisitionItems.Product is a optional reference; each child points to at most one parent.
- ChartOfAccounts → RequisitionItems (one-to-many): RequisitionItems.ExpenseAccount is a optional reference; each child points to at most one parent.
- Warehouses → RequisitionItems (one-to-many): RequisitionItems.Warehouse is a optional reference; each child points to at most one parent.
- PurchaseOrderItems → RequisitionItems (one-to-many): RequisitionItems.PurchaseOrderItem is a optional reference; each child points to at most one parent.
- Entities → PurchaseOrders (one-to-many): PurchaseOrders.Entity is a required reference; each child points to one parent.
- Accounts → PurchaseOrders (one-to-many): PurchaseOrders.Vendor is a required reference; each child points to one parent.
- ContactPersons → PurchaseOrders (one-to-many): PurchaseOrders.VendorContact is a optional reference; each child points to at most one parent.
- Currencies → PurchaseOrders (one-to-many): PurchaseOrders.Currency is a required reference; each child points to one parent.
- PaymentTerms → PurchaseOrders (one-to-many): PurchaseOrders.PaymentTerms is a required reference; each child points to one parent.
- Employees → PurchaseOrders (one-to-many): PurchaseOrders.Buyer is a required reference; each child points to one parent.
- Employees → PurchaseOrders (one-to-many): PurchaseOrders.ApprovedBy is a optional reference; each child points to at most one parent.
- Employees → PurchaseOrders (one-to-many): PurchaseOrders.RequestedBy is a optional reference; each child points to at most one parent.
- SalesOrders → PurchaseOrders (one-to-many): PurchaseOrders.IntercompanyPartnerOrder is a optional reference; each child points to at most one parent.
- DocumentRevisions → PurchaseOrders (one-to-many): PurchaseOrders.CurrentRevision is a optional reference; each child points to at most one parent.
- Employees → PurchaseOrders (one-to-many): PurchaseOrders.CreatedBy is a optional reference; each child points to at most one parent.
- PurchaseOrders → PurchaseOrderItems (one-to-many): PurchaseOrderItems.PurchaseOrder is a required reference; each child points to one parent.
- RequisitionItems → PurchaseOrderItems (one-to-many): PurchaseOrderItems.RequisitionItem is a optional reference; each child points to at most one parent.
- Products → PurchaseOrderItems (one-to-many): PurchaseOrderItems.Product is a optional reference; each child points to at most one parent.
- Warehouses → PurchaseOrderItems (one-to-many): PurchaseOrderItems.Warehouse is a optional reference; each child points to at most one parent.
- ChartOfAccounts → PurchaseOrderItems (one-to-many): PurchaseOrderItems.ExpenseAccount is a optional reference; each child points to at most one parent.
- CostCenters → PurchaseOrderItems (one-to-many): PurchaseOrderItems.CostCenter is a optional reference; each child points to at most one parent.
- TaxCodes → PurchaseOrderItems (one-to-many): PurchaseOrderItems.TaxCode is a optional reference; each child points to at most one parent.
- PurchaseOrders → GoodsReceipts (one-to-many): GoodsReceipts.PurchaseOrder is a required reference; each child points to one parent.
- Entities → GoodsReceipts (one-to-many): GoodsReceipts.Entity is a required reference; each child points to one parent.
- Warehouses → GoodsReceipts (one-to-many): GoodsReceipts.Warehouse is a required reference; each child points to one parent.
- Employees → GoodsReceipts (one-to-many): GoodsReceipts.ReceivedBy is a required reference; each child points to one parent.
- JournalEntries → GoodsReceipts (one-to-many): GoodsReceipts.JournalEntry is a optional reference; each child points to at most one parent.
- IntegrationEvents → GoodsReceipts (one-to-many): GoodsReceipts.Event is a optional reference; each child points to at most one parent.
- GoodsReceipts → GoodsReceiptItems (one-to-many): GoodsReceiptItems.Receipt is a required reference; each child points to one parent.
- PurchaseOrderItems → GoodsReceiptItems (one-to-many): GoodsReceiptItems.PurchaseOrderItem is a required reference; each child points to one parent.
- Products → GoodsReceiptItems (one-to-many): GoodsReceiptItems.Product is a required reference; each child points to one parent.
- Warehouses → GoodsReceiptItems (one-to-many): GoodsReceiptItems.Warehouse is a required reference; each child points to one parent.
- StockMovements → GoodsReceiptItems (one-to-many): GoodsReceiptItems.StockMovement is a optional reference; each child points to at most one parent.
- Entities → VendorReturns (one-to-many): VendorReturns.Entity is a required reference; each child points to one parent.
- Accounts → VendorReturns (one-to-many): VendorReturns.Vendor is a required reference; each child points to one parent.
- GoodsReceiptItems → VendorReturns (one-to-many): VendorReturns.GoodsReceiptItem is a optional reference; each child points to at most one parent.
- QualityInspections → VendorReturns (one-to-many): VendorReturns.QualityInspection is a optional reference; each child points to at most one parent.
- Products → VendorReturns (one-to-many): VendorReturns.Product is a required reference; each child points to one parent.
- Warehouses → VendorReturns (one-to-many): VendorReturns.Warehouse is a required reference; each child points to one parent.
- Bills → VendorReturns (one-to-many): VendorReturns.VendorCreditNote is a optional reference; each child points to at most one parent.
- Employees → VendorReturns (one-to-many): VendorReturns.OpenedBy is a required reference; each child points to one parent.
- ReceiptAcceptances → VendorReturns (one-to-many): VendorReturns.Acceptance is a optional reference; each child points to at most one parent.
- StockEvents → VendorReturns (one-to-many): VendorReturns.StockEvent is a optional reference; each child points to at most one parent.
- StockEvents → VendorReturns (one-to-many): VendorReturns.DirectReceiptEvent is a optional reference; each child points to at most one parent.
- Bills → Bills (one-to-many): Bills.CreditFor is a optional reference; each child points to at most one parent.
- Entities → Bills (one-to-many): Bills.Entity is a required reference; each child points to one parent.
- Accounts → Bills (one-to-many): Bills.Vendor is a required reference; each child points to one parent.
- AccountingPeriods → Bills (one-to-many): Bills.Period is a required reference; each child points to one parent.
- Currencies → Bills (one-to-many): Bills.Currency is a required reference; each child points to one parent.
- PurchaseOrders → Bills (one-to-many): Bills.PurchaseOrder is a optional reference; each child points to at most one parent.
- Employees → Bills (one-to-many): Bills.ApprovedBy is a optional reference; each child points to at most one parent.
- PaymentTerms → Bills (one-to-many): Bills.PaymentTerms is a required reference; each child points to one parent.
- JournalEntries → Bills (one-to-many): Bills.JournalEntry is a optional reference; each child points to at most one parent.
- DocumentRevisions → Bills (one-to-many): Bills.CurrentRevision is a optional reference; each child points to at most one parent.
- Employees → Bills (one-to-many): Bills.CreatedBy is a optional reference; each child points to at most one parent.
- Bills → BillItems (one-to-many): BillItems.Bill is a required reference; each child points to one parent.
- Products → BillItems (one-to-many): BillItems.Product is a optional reference; each child points to at most one parent.
- PurchaseOrderItems → BillItems (one-to-many): BillItems.PurchaseOrderItem is a optional reference; each child points to at most one parent.
- GoodsReceiptItems → BillItems (one-to-many): BillItems.GoodsReceiptItem is a optional reference; each child points to at most one parent.
- ChartOfAccounts → BillItems (one-to-many): BillItems.ExpenseAccount is a required reference; each child points to one parent.
- CostCenters → BillItems (one-to-many): BillItems.CostCenter is a optional reference; each child points to at most one parent.
- TaxCodes → BillItems (one-to-many): BillItems.TaxCode is a optional reference; each child points to at most one parent.
- FixedAssets → BillItems (one-to-many): BillItems.FixedAsset is a optional reference; each child points to at most one parent.
- ServiceAcceptances → BillItems (one-to-many): BillItems.ServiceAcceptance is a optional reference; each child points to at most one parent.
- BillItems → BillItems (one-to-many): BillItems.OriginalBillItem is a optional reference; each child points to at most one parent.
- Entities → PaymentRuns (one-to-many): PaymentRuns.Entity is a required reference; each child points to one parent.
- BankAccounts → PaymentRuns (one-to-many): PaymentRuns.BankAccount is a required reference; each child points to one parent.
- Currencies → PaymentRuns (one-to-many): PaymentRuns.Currency is a required reference; each child points to one parent.
- Employees → PaymentRuns (one-to-many): PaymentRuns.PreparedBy is a required reference; each child points to one parent.
- Employees → PaymentRuns (one-to-many): PaymentRuns.ReleasedBy is a optional reference; each child points to at most one parent.
- JournalEntries → PaymentRuns (one-to-many): PaymentRuns.JournalEntry is a optional reference; each child points to at most one parent.
- DocumentRevisions → PaymentRuns (one-to-many): PaymentRuns.CurrentRevision is a optional reference; each child points to at most one parent.
- Employees → PaymentRuns (one-to-many): PaymentRuns.CreatedBy is a optional reference; each child points to at most one parent.
- PaymentRuns → PaymentsMade (one-to-many): PaymentsMade.PaymentRun is a optional reference; each child points to at most one parent.
- Entities → PaymentsMade (one-to-many): PaymentsMade.Entity is a required reference; each child points to one parent.
- Accounts → PaymentsMade (one-to-many): PaymentsMade.Vendor is a required reference; each child points to one parent.
- AccountingPeriods → PaymentsMade (one-to-many): PaymentsMade.Period is a required reference; each child points to one parent.
- Currencies → PaymentsMade (one-to-many): PaymentsMade.Currency is a required reference; each child points to one parent.
- BankAccounts → PaymentsMade (one-to-many): PaymentsMade.BankAccount is a required reference; each child points to one parent.
- BankStatementLines → PaymentsMade (one-to-many): PaymentsMade.BankStatementLine is a optional reference; each child points to at most one parent.
- Employees → PaymentsMade (one-to-many): PaymentsMade.ReleasedBy is a optional reference; each child points to at most one parent.
- JournalEntries → PaymentsMade (one-to-many): PaymentsMade.JournalEntry is a optional reference; each child points to at most one parent.
- PaymentsMade → PaymentsMade (one-to-many): PaymentsMade.ReversalOf is a optional reference; each child points to at most one parent.
- IntegrationEvents → PaymentsMade (one-to-many): PaymentsMade.Event is a optional reference; each child points to at most one parent.
- PaymentInstructions → PaymentsMade (one-to-many): PaymentsMade.Instruction is a optional reference; each child points to at most one parent.
- PaymentsMade → PaymentAllocations (one-to-many): PaymentAllocations.Payment is a required reference; each child points to one parent.
- Bills → PaymentAllocations (one-to-many): PaymentAllocations.Bill is a required reference; each child points to one parent.
- ExchangeRates → PaymentAllocations (one-to-many): PaymentAllocations.PaymentRate is a optional reference; each child points to at most one parent.
- ExchangeRates → PaymentAllocations (one-to-many): PaymentAllocations.DocumentRate is a optional reference; each child points to at most one parent.
- PaymentAllocations → PaymentAllocations (one-to-many): PaymentAllocations.ReversalOf is a optional reference; each child points to at most one parent.
- JournalEntries → PaymentAllocations (one-to-many): PaymentAllocations.JournalEntry is a optional reference; each child points to at most one parent.
- JournalEntries → PaymentAllocations (one-to-many): PaymentAllocations.FXReclassificationJournal is a optional reference; each child points to at most one parent.
- Products → Inventory (one-to-many): Inventory.Product is a required reference; each child points to one parent.
- Warehouses → Inventory (one-to-many): Inventory.Warehouse is a required reference; each child points to one parent.
- Entities → Inventory (one-to-many): Inventory.Entity is a required reference; each child points to one parent.
- Products → StockMovements (one-to-many): StockMovements.Product is a required reference; each child points to one parent.
- Warehouses → StockMovements (one-to-many): StockMovements.Warehouse is a required reference; each child points to one parent.
- Employees → StockMovements (one-to-many): StockMovements.Operator is a optional reference; each child points to at most one parent.
- JournalEntries → StockMovements (one-to-many): StockMovements.JournalEntry is a optional reference; each child points to at most one parent.
- StockEvents → StockMovements (one-to-many): StockMovements.Event is a optional reference; each child points to at most one parent.
- StockLayers → StockMovements (one-to-many): StockMovements.Layer is a optional reference; each child points to at most one parent.
- InventoryReservations → StockMovements (one-to-many): StockMovements.Reservation is a optional reference; each child points to at most one parent.
- StockMovements → StockMovements (one-to-many): StockMovements.ReversalOf is a optional reference; each child points to at most one parent.
- Entities → PlannedOrders (one-to-many): PlannedOrders.Entity is a required reference; each child points to one parent.
- Products → PlannedOrders (one-to-many): PlannedOrders.Product is a required reference; each child points to one parent.
- Employees → PlannedOrders (one-to-many): PlannedOrders.Owner is a required reference; each child points to one parent.
- WorkOrders → PlannedOrders (one-to-many): PlannedOrders.WorkOrder is a optional reference; each child points to at most one parent.
- Requisitions → PlannedOrders (one-to-many): PlannedOrders.Requisition is a optional reference; each child points to at most one parent.
- MRPRuns → PlannedOrders (one-to-many): PlannedOrders.MRPRun is a optional reference; each child points to at most one parent.
- Entities → WorkOrders (one-to-many): WorkOrders.Entity is a required reference; each child points to one parent.
- Products → WorkOrders (one-to-many): WorkOrders.Product is a required reference; each child points to one parent.
- BOMs → WorkOrders (one-to-many): WorkOrders.BOM is a required reference; each child points to one parent.
- Routings → WorkOrders (one-to-many): WorkOrders.Routing is a required reference; each child points to one parent.
- SalesOrders → WorkOrders (one-to-many): WorkOrders.SourceSalesOrder is a optional reference; each child points to at most one parent.
- PlannedOrders → WorkOrders (one-to-many): WorkOrders.PlannedOrder is a optional reference; each child points to at most one parent.
- Employees → WorkOrders (one-to-many): WorkOrders.Planner is a required reference; each child points to one parent.
- JournalEntries → WorkOrders (one-to-many): WorkOrders.JournalEntry is a optional reference; each child points to at most one parent.
- DocumentRevisions → WorkOrders (one-to-many): WorkOrders.ReleaseRevision is a optional reference; each child points to at most one parent.
- WorkOrders → WorkOrderComponents (one-to-many): WorkOrderComponents.WorkOrder is a required reference; each child points to one parent.
- Products → WorkOrderComponents (one-to-many): WorkOrderComponents.Component is a required reference; each child points to one parent.
- Warehouses → WorkOrderComponents (one-to-many): WorkOrderComponents.Warehouse is a required reference; each child points to one parent.
- WorkOrders → WorkOrderOperations (one-to-many): WorkOrderOperations.WorkOrder is a required reference; each child points to one parent.
- WorkCenters → WorkOrderOperations (one-to-many): WorkOrderOperations.WorkCenter is a required reference; each child points to one parent.
- Employees → WorkOrderOperations (one-to-many): WorkOrderOperations.Operator is a optional reference; each child points to at most one parent.
- RoutingOperations → WorkOrderOperations (one-to-many): WorkOrderOperations.SourceRoutingOperation is a optional reference; each child points to at most one parent.
- WorkOrders → ProductionLog (one-to-many): ProductionLog.WorkOrder is a required reference; each child points to one parent.
- Employees → ProductionLog (one-to-many): ProductionLog.Operator is a required reference; each child points to one parent.
- WorkCenters → ProductionLog (one-to-many): ProductionLog.WorkCenter is a required reference; each child points to one parent.
- WorkOrderOperations → ProductionLog (one-to-many): ProductionLog.Operation is a required reference; each child points to one parent.
- ProductionLog → ProductionLog (one-to-many): ProductionLog.ReversalOf is a optional reference; each child points to at most one parent.
- Products → QualityInspections (one-to-many): QualityInspections.Product is a required reference; each child points to one parent.
- Employees → QualityInspections (one-to-many): QualityInspections.InspectedBy is a required reference; each child points to one parent.
- DocumentRevisions → QualityInspections (one-to-many): QualityInspections.Revision is a optional reference; each child points to at most one parent.
- QualityInspections → QualityInspections (one-to-many): QualityInspections.ReplacesInspection is a optional reference; each child points to at most one parent.
- Entities → JournalEntries (one-to-many): JournalEntries.Entity is a required reference; each child points to one parent.
- AccountingPeriods → JournalEntries (one-to-many): JournalEntries.Period is a required reference; each child points to one parent.
- Currencies → JournalEntries (one-to-many): JournalEntries.Currency is a required reference; each child points to one parent.
- Employees → JournalEntries (one-to-many): JournalEntries.PreparedBy is a required reference; each child points to one parent.
- Employees → JournalEntries (one-to-many): JournalEntries.ApprovedBy is a optional reference; each child points to at most one parent.
- Employees → JournalEntries (one-to-many): JournalEntries.PostedBy is a optional reference; each child points to at most one parent.
- JournalEntries → JournalEntries (one-to-many): JournalEntries.ReversalOf is a optional reference; each child points to at most one parent.
- DocumentRevisions → JournalEntries (one-to-many): JournalEntries.CurrentRevision is a optional reference; each child points to at most one parent.
- Employees → JournalEntries (one-to-many): JournalEntries.CreatedBy is a optional reference; each child points to at most one parent.
- EnterprisePolicies → JournalEntries (one-to-many): JournalEntries.Policy is a optional reference; each child points to at most one parent.
- JournalEntries → JournalEntryLines (one-to-many): JournalEntryLines.JournalEntry is a required reference; each child points to one parent.
- ChartOfAccounts → JournalEntryLines (one-to-many): JournalEntryLines.Account is a required reference; each child points to one parent.
- CostCenters → JournalEntryLines (one-to-many): JournalEntryLines.CostCenter is a optional reference; each child points to at most one parent.
- Entities → JournalEntryLines (one-to-many): JournalEntryLines.IntercompanyPartner is a optional reference; each child points to at most one parent.
- TaxCodes → JournalEntryLines (one-to-many): JournalEntryLines.TaxCode is a optional reference; each child points to at most one parent.
- Currencies → JournalEntryLines (one-to-many): JournalEntryLines.ForeignCurrency is a optional reference; each child points to at most one parent.
- Entities → Budgets (one-to-many): Budgets.Entity is a required reference; each child points to one parent.
- Currencies → Budgets (one-to-many): Budgets.Currency is a required reference; each child points to one parent.
- Employees → Budgets (one-to-many): Budgets.Owner is a required reference; each child points to one parent.
- Employees → Budgets (one-to-many): Budgets.ApprovedBy is a optional reference; each child points to at most one parent.
- Employees → Budgets (one-to-many): Budgets.LockedBy is a optional reference; each child points to at most one parent.
- DocumentRevisions → Budgets (one-to-many): Budgets.CurrentRevision is a optional reference; each child points to at most one parent.
- Employees → Budgets (one-to-many): Budgets.CreatedBy is a optional reference; each child points to at most one parent.
- Budgets → BudgetLines (one-to-many): BudgetLines.Budget is a required reference; each child points to one parent.
- ChartOfAccounts → BudgetLines (one-to-many): BudgetLines.Account is a required reference; each child points to one parent.
- CostCenters → BudgetLines (one-to-many): BudgetLines.CostCenter is a optional reference; each child points to at most one parent.
- AccountingPeriods → BudgetLines (one-to-many): BudgetLines.Period is a required reference; each child points to one parent.
- Entities → FixedAssets (one-to-many): FixedAssets.Entity is a required reference; each child points to one parent.
- AssetCategories → FixedAssets (one-to-many): FixedAssets.AssetCategory is a required reference; each child points to one parent.
- CostCenters → FixedAssets (one-to-many): FixedAssets.CostCenter is a optional reference; each child points to at most one parent.
- Employees → FixedAssets (one-to-many): FixedAssets.Custodian is a optional reference; each child points to at most one parent.
- Bills → FixedAssets (one-to-many): FixedAssets.SourceBill is a optional reference; each child points to at most one parent.
- AssetBooks → FixedAssets (one-to-many): FixedAssets.PrimaryBook is a optional reference; each child points to at most one parent.
- Entities → DepreciationRuns (one-to-many): DepreciationRuns.Entity is a required reference; each child points to one parent.
- AccountingPeriods → DepreciationRuns (one-to-many): DepreciationRuns.Period is a required reference; each child points to one parent.
- JournalEntries → DepreciationRuns (one-to-many): DepreciationRuns.JournalEntry is a optional reference; each child points to at most one parent.
- Employees → DepreciationRuns (one-to-many): DepreciationRuns.PreparedBy is a required reference; each child points to one parent.
- Employees → DepreciationRuns (one-to-many): DepreciationRuns.PostedBy is a optional reference; each child points to at most one parent.
- DepreciationRuns → DepreciationRuns (one-to-many): DepreciationRuns.ReversalOf is a optional reference; each child points to at most one parent.
- DepreciationRuns → DepreciationRunLines (one-to-many): DepreciationRunLines.Run is a required reference; each child points to one parent.
- FixedAssets → DepreciationRunLines (one-to-many): DepreciationRunLines.Asset is a required reference; each child points to one parent.
- CostCenters → DepreciationRunLines (one-to-many): DepreciationRunLines.CostCenter is a optional reference; each child points to at most one parent.
- AssetBooks → DepreciationRunLines (one-to-many): DepreciationRunLines.AssetBook is a required reference; each child points to one parent.
- Entities → RevaluationRuns (one-to-many): RevaluationRuns.Entity is a required reference; each child points to one parent.
- AccountingPeriods → RevaluationRuns (one-to-many): RevaluationRuns.Period is a required reference; each child points to one parent.
- JournalEntries → RevaluationRuns (one-to-many): RevaluationRuns.JournalEntry is a optional reference; each child points to at most one parent.
- Employees → RevaluationRuns (one-to-many): RevaluationRuns.PreparedBy is a required reference; each child points to one parent.
- Employees → RevaluationRuns (one-to-many): RevaluationRuns.PostedBy is a optional reference; each child points to at most one parent.
- RevaluationRuns → RevaluationRuns (one-to-many): RevaluationRuns.ReversalOf is a optional reference; each child points to at most one parent.
- Entities → ConsolidationRuns (one-to-many): ConsolidationRuns.ReportingParent is a required reference; each child points to one parent.
- AccountingPeriods → ConsolidationRuns (one-to-many): ConsolidationRuns.Period is a required reference; each child points to one parent.
- Currencies → ConsolidationRuns (one-to-many): ConsolidationRuns.ReportingCurrency is a required reference; each child points to one parent.
- Employees → ConsolidationRuns (one-to-many): ConsolidationRuns.PreparedBy is a required reference; each child points to one parent.
- Employees → ConsolidationRuns (one-to-many): ConsolidationRuns.LockedBy is a optional reference; each child points to at most one parent.
- DocumentRevisions → ConsolidationRuns (one-to-many): ConsolidationRuns.Revision is a optional reference; each child points to at most one parent.
- ConsolidationRuns → ConsolidationRuns (one-to-many): ConsolidationRuns.ReversalOf is a optional reference; each child points to at most one parent.
- JournalEntries → ConsolidationRuns (one-to-many): ConsolidationRuns.GroupJournal is a optional reference; each child points to at most one parent.
- ConsolidationRuns → ConsolidationRunLines (one-to-many): ConsolidationRunLines.Run is a required reference; each child points to one parent.
- Entities → ConsolidationRunLines (one-to-many): ConsolidationRunLines.Entity is a required reference; each child points to one parent.
- ChartOfAccounts → ConsolidationRunLines (one-to-many): ConsolidationRunLines.Account is a required reference; each child points to one parent.
- Currencies → ConsolidationRunLines (one-to-many): ConsolidationRunLines.LocalCurrency is a required reference; each child points to one parent.
- ConsolidationEntities → ConsolidationRunLines (one-to-many): ConsolidationRunLines.EntitySnapshot is a required reference; each child points to one parent.
- Entities → TaxFilings (one-to-many): TaxFilings.Entity is a required reference; each child points to one parent.
- TaxJurisdictions → TaxFilings (one-to-many): TaxFilings.Jurisdiction is a required reference; each child points to one parent.
- AccountingPeriods → TaxFilings (one-to-many): TaxFilings.Period is a required reference; each child points to one parent.
- Employees → TaxFilings (one-to-many): TaxFilings.FiledBy is a optional reference; each child points to at most one parent.
- JournalEntries → TaxFilings (one-to-many): TaxFilings.JournalEntry is a optional reference; each child points to at most one parent.
- DocumentRevisions → TaxFilings (one-to-many): TaxFilings.SourceRevision is a optional reference; each child points to at most one parent.
- TaxFilings → TaxFilings (one-to-many): TaxFilings.SupersedesFiling is a optional reference; each child points to at most one parent.
- Employees → TaxFilings (one-to-many): TaxFilings.ReviewedBy is a optional reference; each child points to at most one parent.
- AccountingPeriods → CloseTasks (one-to-many): CloseTasks.Period is a required reference; each child points to one parent.
- Entities → CloseTasks (one-to-many): CloseTasks.Entity is a required reference; each child points to one parent.
- Employees → CloseTasks (one-to-many): CloseTasks.Owner is a required reference; each child points to one parent.
- CloseTasks → CloseTasks (one-to-many): CloseTasks.DependsOn is a optional reference; each child points to at most one parent.
- Employees → CloseTasks (one-to-many): CloseTasks.CompletedBy is a optional reference; each child points to at most one parent.
- CloseTemplates → CloseTasks (one-to-many): CloseTasks.Template is a optional reference; each child points to at most one parent.
- Approvals → CloseTasks (one-to-many): CloseTasks.Decision is a optional reference; each child points to at most one parent.
- BankAccounts → BankStatementLines (one-to-many): BankStatementLines.BankAccount is a required reference; each child points to one parent.
- Currencies → BankStatementLines (one-to-many): BankStatementLines.Currency is a required reference; each child points to one parent.
- IntegrationEvents → BankStatementLines (one-to-many): BankStatementLines.Event is a optional reference; each child points to at most one parent.
- Entities → Approvals (one-to-many): Approvals.Entity is a required reference; each child points to one parent.
- Employees → Approvals (one-to-many): Approvals.Approver is a required reference; each child points to one parent.
- Employees → Approvals (one-to-many): Approvals.DelegateFor is a optional reference; each child points to at most one parent.
- DocumentRevisions → Approvals (one-to-many): Approvals.Revision is a required reference; each child points to one parent.
- Employees → Approvals (one-to-many): Approvals.ActualActor is a optional reference; each child points to at most one parent.
- AuthorityDelegations → Approvals (one-to-many): Approvals.Delegation is a optional reference; each child points to at most one parent.
- Currencies → Approvals (one-to-many): Approvals.AuthorityCurrency is a optional reference; each child points to at most one parent.
- EnterprisePolicies → Approvals (one-to-many): Approvals.Policy is a required reference; each child points to one parent.
- Employees → LeaveRequests (one-to-many): LeaveRequests.Employee is a required reference; each child points to one parent.
- LeaveTypes → LeaveRequests (one-to-many): LeaveRequests.LeaveType is a required reference; each child points to one parent.
- Employees → LeaveRequests (one-to-many): LeaveRequests.Approver is a required reference; each child points to one parent.
- DocumentRevisions → LeaveRequests (one-to-many): LeaveRequests.Revision is a optional reference; each child points to at most one parent.
- Employees → LeaveBalances (one-to-many): LeaveBalances.Employee is a required reference; each child points to one parent.
- LeaveTypes → LeaveBalances (one-to-many): LeaveBalances.LeaveType is a required reference; each child points to one parent.
- Employees → Timesheets (one-to-many): Timesheets.Employee is a required reference; each child points to one parent.
- Entities → Timesheets (one-to-many): Timesheets.Entity is a required reference; each child points to one parent.
- CostCenters → Timesheets (one-to-many): Timesheets.CostCenter is a required reference; each child points to one parent.
- Employees → Timesheets (one-to-many): Timesheets.Approver is a required reference; each child points to one parent.
- PayrollRuns → Timesheets (one-to-many): Timesheets.PayrollRun is a optional reference; each child points to at most one parent.
- DocumentRevisions → Timesheets (one-to-many): Timesheets.Revision is a optional reference; each child points to at most one parent.
- Timesheets → TimesheetLines (one-to-many): TimesheetLines.Timesheet is a required reference; each child points to one parent.
- CostCenters → TimesheetLines (one-to-many): TimesheetLines.CostCenter is a optional reference; each child points to at most one parent.
- WorkOrders → TimesheetLines (one-to-many): TimesheetLines.WorkOrder is a optional reference; each child points to at most one parent.
- LeaveRequests → TimesheetLines (one-to-many): TimesheetLines.LeaveRequest is a optional reference; each child points to at most one parent.
- WorkOrderOperations → TimesheetLines (one-to-many): TimesheetLines.Operation is a optional reference; each child points to at most one parent.
- TimesheetLines → TimesheetLines (one-to-many): TimesheetLines.OriginalLine is a optional reference; each child points to at most one parent.
- Entities → PayrollRuns (one-to-many): PayrollRuns.Entity is a required reference; each child points to one parent.
- AccountingPeriods → PayrollRuns (one-to-many): PayrollRuns.Period is a required reference; each child points to one parent.
- BankAccounts → PayrollRuns (one-to-many): PayrollRuns.BankAccount is a required reference; each child points to one parent.
- Employees → PayrollRuns (one-to-many): PayrollRuns.PreparedBy is a required reference; each child points to one parent.
- Employees → PayrollRuns (one-to-many): PayrollRuns.ApprovedBy is a optional reference; each child points to at most one parent.
- JournalEntries → PayrollRuns (one-to-many): PayrollRuns.JournalEntry is a optional reference; each child points to at most one parent.
- DocumentRevisions → PayrollRuns (one-to-many): PayrollRuns.CurrentRevision is a optional reference; each child points to at most one parent.
- Employees → PayrollRuns (one-to-many): PayrollRuns.CreatedBy is a optional reference; each child points to at most one parent.
- Currencies → PayrollRuns (one-to-many): PayrollRuns.Currency is a required reference; each child points to one parent.
- PayrollRuns → PayrollRuns (one-to-many): PayrollRuns.OriginalRun is a optional reference; each child points to at most one parent.
- PayrollRuns → PayStatements (one-to-many): PayStatements.PayrollRun is a required reference; each child points to one parent.
- Employees → PayStatements (one-to-many): PayStatements.Employee is a required reference; each child points to one parent.
- Currencies → PayStatements (one-to-many): PayStatements.Currency is a required reference; each child points to one parent.
- CostCenters → PayStatements (one-to-many): PayStatements.CostCenter is a optional reference; each child points to at most one parent.
- ExchangeRates → PayStatements (one-to-many): PayStatements.ExchangeRate is a optional reference; each child points to at most one parent.
- PayStatements → PayStatements (one-to-many): PayStatements.OriginalStatement is a optional reference; each child points to at most one parent.
- PaymentInstructions → PayStatements (one-to-many): PayStatements.PaymentInstruction is a optional reference; each child points to at most one parent.
- PayStatements → PayStatementLines (one-to-many): PayStatementLines.PayStatement is a required reference; each child points to one parent.
- PayComponents → PayStatementLines (one-to-many): PayStatementLines.PayComponent is a required reference; each child points to one parent.
- CostCenters → PayStatementLines (one-to-many): PayStatementLines.CostCenter is a optional reference; each child points to at most one parent.
- EmployeePayComponents → PayStatementLines (one-to-many): PayStatementLines.Assignment is a optional reference; each child points to at most one parent.
- PayStatementLines → PayStatementLines (one-to-many): PayStatementLines.OriginalLine is a optional reference; each child points to at most one parent.
- Entities → EnterprisePolicies (one-to-many): EnterprisePolicies.Entity is a required reference; each child points to one parent.
- Currencies → EnterprisePolicies (one-to-many): EnterprisePolicies.AuthorityCurrency is a required reference; each child points to one parent.
- Employees → EnterprisePolicies (one-to-many): EnterprisePolicies.ApprovedBy is a optional reference; each child points to at most one parent.
- Entities → DocumentRevisions (one-to-many): DocumentRevisions.Entity is a required reference; each child points to one parent.
- Employees → DocumentRevisions (one-to-many): DocumentRevisions.FrozenBy is a required reference; each child points to one parent.
- DocumentRevisions → DocumentRevisions (one-to-many): DocumentRevisions.Supersedes is a optional reference; each child points to at most one parent.
- EnterprisePolicies → DocumentRevisions (one-to-many): DocumentRevisions.Policy is a required reference; each child points to one parent.
- Entities → AuthorityDelegations (one-to-many): AuthorityDelegations.Entity is a required reference; each child points to one parent.
- Employees → AuthorityDelegations (one-to-many): AuthorityDelegations.Grantor is a required reference; each child points to one parent.
- Employees → AuthorityDelegations (one-to-many): AuthorityDelegations.Delegate is a required reference; each child points to one parent.
- Currencies → AuthorityDelegations (one-to-many): AuthorityDelegations.Currency is a required reference; each child points to one parent.
- Employees → AuthorityDelegations (one-to-many): AuthorityDelegations.ApprovedBy is a required reference; each child points to one parent.
- Entities → MasterChanges (one-to-many): MasterChanges.Entity is a required reference; each child points to one parent.
- DocumentRevisions → MasterChanges (one-to-many): MasterChanges.Revision is a required reference; each child points to one parent.
- Employees → MasterChanges (one-to-many): MasterChanges.ProposedBy is a required reference; each child points to one parent.
- Employees → MasterChanges (one-to-many): MasterChanges.ApprovedBy is a optional reference; each child points to at most one parent.
- Approvals → MasterChanges (one-to-many): MasterChanges.Approval is a optional reference; each child points to at most one parent.
- PriceBooks → PriceBookEntries (one-to-many): PriceBookEntries.PriceBook is a required reference; each child points to one parent.
- Products → PriceBookEntries (one-to-many): PriceBookEntries.Product is a required reference; each child points to one parent.
- Entities → PriceBookEntries (one-to-many): PriceBookEntries.Entity is a required reference; each child points to one parent.
- Currencies → PriceBookEntries (one-to-many): PriceBookEntries.Currency is a required reference; each child points to one parent.
- DocumentRevisions → PriceBookEntries (one-to-many): PriceBookEntries.Revision is a required reference; each child points to one parent.
- Entities → ProductPostingProfiles (one-to-many): ProductPostingProfiles.Entity is a required reference; each child points to one parent.
- Products → ProductPostingProfiles (one-to-many): ProductPostingProfiles.Product is a optional reference; each child points to at most one parent.
- Currencies → ProductPostingProfiles (one-to-many): ProductPostingProfiles.Currency is a required reference; each child points to one parent.
- ChartOfAccounts → ProductPostingProfiles (one-to-many): ProductPostingProfiles.InventoryAccount is a optional reference; each child points to at most one parent.
- ChartOfAccounts → ProductPostingProfiles (one-to-many): ProductPostingProfiles.GRNIAccount is a optional reference; each child points to at most one parent.
- ChartOfAccounts → ProductPostingProfiles (one-to-many): ProductPostingProfiles.WIPAccount is a optional reference; each child points to at most one parent.
- ChartOfAccounts → ProductPostingProfiles (one-to-many): ProductPostingProfiles.COGSAccount is a optional reference; each child points to at most one parent.
- ChartOfAccounts → ProductPostingProfiles (one-to-many): ProductPostingProfiles.RevenueAccount is a optional reference; each child points to at most one parent.
- ChartOfAccounts → ProductPostingProfiles (one-to-many): ProductPostingProfiles.VarianceAccount is a optional reference; each child points to at most one parent.
- ChartOfAccounts → ProductPostingProfiles (one-to-many): ProductPostingProfiles.ARAccount is a optional reference; each child points to at most one parent.
- ChartOfAccounts → ProductPostingProfiles (one-to-many): ProductPostingProfiles.APAccount is a optional reference; each child points to at most one parent.
- ChartOfAccounts → ProductPostingProfiles (one-to-many): ProductPostingProfiles.UnappliedAccount is a optional reference; each child points to at most one parent.
- ChartOfAccounts → ProductPostingProfiles (one-to-many): ProductPostingProfiles.LaborAbsorptionAccount is a optional reference; each child points to at most one parent.
- ChartOfAccounts → ProductPostingProfiles (one-to-many): ProductPostingProfiles.OverheadAbsorptionAccount is a optional reference; each child points to at most one parent.
- ChartOfAccounts → ProductPostingProfiles (one-to-many): ProductPostingProfiles.FXGainLossAccount is a optional reference; each child points to at most one parent.
- EnterprisePolicies → ProductPostingProfiles (one-to-many): ProductPostingProfiles.Policy is a required reference; each child points to one parent.
- DocumentRevisions → ProductPostingProfiles (one-to-many): ProductPostingProfiles.Revision is a required reference; each child points to one parent.
- DocumentRevisions → SignatureRequests (one-to-many): SignatureRequests.Revision is a required reference; each child points to one parent.
- IntegrationEvents → SignatureRequests (one-to-many): SignatureRequests.Event is a optional reference; each child points to at most one parent.
- Employees → SignatureRequests (one-to-many): SignatureRequests.VerifiedBy is a optional reference; each child points to at most one parent.
- ContractItems → ContractCycles (one-to-many): ContractCycles.ContractItem is a required reference; each child points to one parent.
- DocumentRevisions → ContractCycles (one-to-many): ContractCycles.Revision is a required reference; each child points to one parent.
- SalesOrderItems → ContractCycles (one-to-many): ContractCycles.SalesOrderItem is a optional reference; each child points to at most one parent.
- DocumentRevisions → SalesAllocations (one-to-many): SalesAllocations.Revision is a required reference; each child points to one parent.
- QuoteItems → SalesAllocations (one-to-many): SalesAllocations.QuoteItem is a optional reference; each child points to at most one parent.
- ContractCycles → SalesAllocations (one-to-many): SalesAllocations.ContractCycle is a optional reference; each child points to at most one parent.
- SalesOrderItems → SalesAllocations (one-to-many): SalesAllocations.SalesOrderItem is a optional reference; each child points to at most one parent.
- ShipmentItems → SalesAllocations (one-to-many): SalesAllocations.ShipmentItem is a optional reference; each child points to at most one parent.
- InvoiceItems → SalesAllocations (one-to-many): SalesAllocations.InvoiceItem is a optional reference; each child points to at most one parent.
- SalesAllocations → SalesAllocations (one-to-many): SalesAllocations.ReversalOf is a optional reference; each child points to at most one parent.
- Entities → CreditExposures (one-to-many): CreditExposures.Entity is a required reference; each child points to one parent.
- Accounts → CreditExposures (one-to-many): CreditExposures.Customer is a required reference; each child points to one parent.
- Currencies → CreditExposures (one-to-many): CreditExposures.Currency is a required reference; each child points to one parent.
- GoodsReceiptItems → ReceiptAcceptances (one-to-many): ReceiptAcceptances.ReceiptItem is a required reference; each child points to one parent.
- QualityInspections → ReceiptAcceptances (one-to-many): ReceiptAcceptances.Inspection is a optional reference; each child points to at most one parent.
- Employees → ReceiptAcceptances (one-to-many): ReceiptAcceptances.AcceptedBy is a required reference; each child points to one parent.
- StockEvents → ReceiptAcceptances (one-to-many): ReceiptAcceptances.StockEvent is a optional reference; each child points to at most one parent.
- JournalEntries → ReceiptAcceptances (one-to-many): ReceiptAcceptances.JournalEntry is a optional reference; each child points to at most one parent.
- DocumentRevisions → ReceiptAcceptances (one-to-many): ReceiptAcceptances.Revision is a required reference; each child points to one parent.
- ReceiptAcceptances → ReceiptAcceptances (one-to-many): ReceiptAcceptances.ReversalOf is a optional reference; each child points to at most one parent.
- PurchaseOrderItems → ServiceAcceptances (one-to-many): ServiceAcceptances.PurchaseOrderItem is a required reference; each child points to one parent.
- Employees → ServiceAcceptances (one-to-many): ServiceAcceptances.AcceptedBy is a optional reference; each child points to at most one parent.
- DocumentRevisions → ServiceAcceptances (one-to-many): ServiceAcceptances.Revision is a required reference; each child points to one parent.
- ServiceAcceptances → ServiceAcceptances (one-to-many): ServiceAcceptances.ReversalOf is a optional reference; each child points to at most one parent.
- BillItems → BillMatchAllocations (one-to-many): BillMatchAllocations.BillItem is a required reference; each child points to one parent.
- PurchaseOrderItems → BillMatchAllocations (one-to-many): BillMatchAllocations.PurchaseOrderItem is a optional reference; each child points to at most one parent.
- ReceiptAcceptances → BillMatchAllocations (one-to-many): BillMatchAllocations.ReceiptAcceptance is a optional reference; each child points to at most one parent.
- ServiceAcceptances → BillMatchAllocations (one-to-many): BillMatchAllocations.ServiceAcceptance is a optional reference; each child points to at most one parent.
- EnterprisePolicies → BillMatchAllocations (one-to-many): BillMatchAllocations.Policy is a required reference; each child points to one parent.
- DocumentRevisions → BillMatchAllocations (one-to-many): BillMatchAllocations.Revision is a required reference; each child points to one parent.
- BillMatchAllocations → BillMatchAllocations (one-to-many): BillMatchAllocations.ReversalOf is a optional reference; each child points to at most one parent.
- StockEvents → BillMatchAllocations (one-to-many): BillMatchAllocations.DirectDeliveryEvent is a optional reference; each child points to at most one parent.
- Entities → StockEvents (one-to-many): StockEvents.Entity is a required reference; each child points to one parent.
- DocumentRevisions → StockEvents (one-to-many): StockEvents.SourceRevision is a optional reference; each child points to at most one parent.
- Warehouses → StockEvents (one-to-many): StockEvents.SourceWarehouse is a optional reference; each child points to at most one parent.
- Warehouses → StockEvents (one-to-many): StockEvents.DestinationWarehouse is a optional reference; each child points to at most one parent.
- JournalEntries → StockEvents (one-to-many): StockEvents.JournalEntry is a optional reference; each child points to at most one parent.
- StockEvents → StockEvents (one-to-many): StockEvents.ReversalOf is a optional reference; each child points to at most one parent.
- Approvals → StockEvents (one-to-many): StockEvents.Decision is a optional reference; each child points to at most one parent.
- SalesOrderItems → StockEvents (one-to-many): StockEvents.SalesOrderItem is a optional reference; each child points to at most one parent.
- PurchaseOrderItems → StockEvents (one-to-many): StockEvents.PurchaseOrderItem is a optional reference; each child points to at most one parent.
- Entities → StockLayers (one-to-many): StockLayers.Entity is a required reference; each child points to one parent.
- Products → StockLayers (one-to-many): StockLayers.Product is a required reference; each child points to one parent.
- StockEvents → StockLayers (one-to-many): StockLayers.OriginEvent is a required reference; each child points to one parent.
- StockLayers → StockLayers (one-to-many): StockLayers.ParentLayer is a optional reference; each child points to at most one parent.
- Inventory → InventoryReservations (one-to-many): InventoryReservations.Inventory is a required reference; each child points to one parent.
- SalesOrderItems → InventoryReservations (one-to-many): InventoryReservations.SalesOrderItem is a optional reference; each child points to at most one parent.
- WorkOrderComponents → InventoryReservations (one-to-many): InventoryReservations.WorkOrderComponent is a optional reference; each child points to at most one parent.
- Entities → InventoryCounts (one-to-many): InventoryCounts.Entity is a required reference; each child points to one parent.
- Warehouses → InventoryCounts (one-to-many): InventoryCounts.Warehouse is a required reference; each child points to one parent.
- Employees → InventoryCounts (one-to-many): InventoryCounts.CountedBy is a required reference; each child points to one parent.
- Employees → InventoryCounts (one-to-many): InventoryCounts.ReviewedBy is a optional reference; each child points to at most one parent.
- EnterprisePolicies → InventoryCounts (one-to-many): InventoryCounts.Policy is a required reference; each child points to one parent.
- DocumentRevisions → InventoryCounts (one-to-many): InventoryCounts.Revision is a optional reference; each child points to at most one parent.
- InventoryCounts → InventoryCountLines (one-to-many): InventoryCountLines.Count is a required reference; each child points to one parent.
- Inventory → InventoryCountLines (one-to-many): InventoryCountLines.Inventory is a optional reference; each child points to at most one parent.
- Products → InventoryCountLines (one-to-many): InventoryCountLines.Product is a required reference; each child points to one parent.
- StockEvents → InventoryCountLines (one-to-many): InventoryCountLines.StockEvent is a optional reference; each child points to at most one parent.
- Entities → MRPRuns (one-to-many): MRPRuns.Entity is a required reference; each child points to one parent.
- Employees → MRPRuns (one-to-many): MRPRuns.PreparedBy is a required reference; each child points to one parent.
- WorkOrders → ProductionCompletions (one-to-many): ProductionCompletions.WorkOrder is a required reference; each child points to one parent.
- WorkOrderOperations → ProductionCompletions (one-to-many): ProductionCompletions.Operation is a required reference; each child points to one parent.
- ProductionLog → ProductionCompletions (one-to-many): ProductionCompletions.ProductionLog is a required reference; each child points to one parent.
- QualityInspections → ProductionCompletions (one-to-many): ProductionCompletions.Inspection is a optional reference; each child points to at most one parent.
- StockEvents → ProductionCompletions (one-to-many): ProductionCompletions.StockEvent is a optional reference; each child points to at most one parent.
- ProductionCompletions → ProductionCompletions (one-to-many): ProductionCompletions.ReversalOf is a optional reference; each child points to at most one parent.
- WorkOrders → WorkOrderCostEntries (one-to-many): WorkOrderCostEntries.WorkOrder is a required reference; each child points to one parent.
- WorkOrderOperations → WorkOrderCostEntries (one-to-many): WorkOrderCostEntries.Operation is a optional reference; each child points to at most one parent.
- StockMovements → WorkOrderCostEntries (one-to-many): WorkOrderCostEntries.StockMovement is a optional reference; each child points to at most one parent.
- TimesheetLines → WorkOrderCostEntries (one-to-many): WorkOrderCostEntries.TimesheetLine is a optional reference; each child points to at most one parent.
- PayrollAllocations → WorkOrderCostEntries (one-to-many): WorkOrderCostEntries.PayrollAllocation is a optional reference; each child points to at most one parent.
- JournalEntries → WorkOrderCostEntries (one-to-many): WorkOrderCostEntries.JournalEntry is a optional reference; each child points to at most one parent.
- WorkOrderCostEntries → WorkOrderCostEntries (one-to-many): WorkOrderCostEntries.ReversalOf is a optional reference; each child points to at most one parent.
- Invoices → CreditApplications (one-to-many): CreditApplications.InvoiceCredit is a optional reference; each child points to at most one parent.
- Bills → CreditApplications (one-to-many): CreditApplications.BillCredit is a optional reference; each child points to at most one parent.
- Invoices → CreditApplications (one-to-many): CreditApplications.TargetInvoice is a optional reference; each child points to at most one parent.
- Bills → CreditApplications (one-to-many): CreditApplications.TargetBill is a optional reference; each child points to at most one parent.
- JournalEntries → CreditApplications (one-to-many): CreditApplications.JournalEntry is a optional reference; each child points to at most one parent.
- CreditApplications → CreditApplications (one-to-many): CreditApplications.ReversalOf is a optional reference; each child points to at most one parent.
- Entities → Refunds (one-to-many): Refunds.Entity is a required reference; each child points to one parent.
- Accounts → Refunds (one-to-many): Refunds.Account is a required reference; each child points to one parent.
- CreditApplications → Refunds (one-to-many): Refunds.CreditApplication is a optional reference; each child points to at most one parent.
- PaymentsReceived → Refunds (one-to-many): Refunds.PaymentReceived is a optional reference; each child points to at most one parent.
- Currencies → Refunds (one-to-many): Refunds.Currency is a required reference; each child points to one parent.
- Approvals → Refunds (one-to-many): Refunds.Approval is a optional reference; each child points to at most one parent.
- PaymentInstructions → Refunds (one-to-many): Refunds.Instruction is a optional reference; each child points to at most one parent.
- JournalEntries → Refunds (one-to-many): Refunds.JournalEntry is a optional reference; each child points to at most one parent.
- Refunds → Refunds (one-to-many): Refunds.ReversalOf is a optional reference; each child points to at most one parent.
- RevaluationRuns → RevaluationLines (one-to-many): RevaluationLines.Run is a required reference; each child points to one parent.
- Invoices → RevaluationLines (one-to-many): RevaluationLines.Invoice is a optional reference; each child points to at most one parent.
- Bills → RevaluationLines (one-to-many): RevaluationLines.Bill is a optional reference; each child points to at most one parent.
- BankAccounts → RevaluationLines (one-to-many): RevaluationLines.BankAccount is a optional reference; each child points to at most one parent.
- PaymentsReceived → RevaluationLines (one-to-many): RevaluationLines.PaymentReceived is a optional reference; each child points to at most one parent.
- Currencies → RevaluationLines (one-to-many): RevaluationLines.ForeignCurrency is a required reference; each child points to one parent.
- ExchangeRates → RevaluationLines (one-to-many): RevaluationLines.ClosingRate is a required reference; each child points to one parent.
- ChartOfAccounts → RevaluationLines (one-to-many): RevaluationLines.Account is a optional reference; each child points to at most one parent.
- JournalEntryLines → RevaluationLines (one-to-many): RevaluationLines.SourceLedgerLine is a optional reference; each child points to at most one parent.
- Entities → PaymentInstructions (one-to-many): PaymentInstructions.Entity is a required reference; each child points to one parent.
- BankAccounts → PaymentInstructions (one-to-many): PaymentInstructions.BankAccount is a required reference; each child points to one parent.
- PaymentsMade → PaymentInstructions (one-to-many): PaymentInstructions.PaymentMade is a optional reference; each child points to at most one parent.
- PayStatements → PaymentInstructions (one-to-many): PaymentInstructions.PayStatement is a optional reference; each child points to at most one parent.
- Refunds → PaymentInstructions (one-to-many): PaymentInstructions.Refund is a optional reference; each child points to at most one parent.
- DocumentRevisions → PaymentInstructions (one-to-many): PaymentInstructions.Revision is a required reference; each child points to one parent.
- Currencies → PaymentInstructions (one-to-many): PaymentInstructions.Currency is a required reference; each child points to one parent.
- Employees → PaymentInstructions (one-to-many): PaymentInstructions.ReleasedBy is a optional reference; each child points to at most one parent.
- IntegrationDeliveries → PaymentInstructions (one-to-many): PaymentInstructions.Delivery is a optional reference; each child points to at most one parent.
- IntegrationEvents → PaymentInstructions (one-to-many): PaymentInstructions.Event is a optional reference; each child points to at most one parent.
- PaymentInstructions → PaymentInstructions (one-to-many): PaymentInstructions.Supersedes is a optional reference; each child points to at most one parent.
- JournalEntries → PaymentInstructions (one-to-many): PaymentInstructions.JournalEntry is a optional reference; each child points to at most one parent.
- Currencies → PaymentInstructions (one-to-many): PaymentInstructions.SourceCurrency is a required reference; each child points to one parent.
- Entities → IntegrationEvents (one-to-many): IntegrationEvents.Entity is a required reference; each child points to one parent.
- MigrationBatches → IntegrationEvents (one-to-many): IntegrationEvents.MigrationBatch is a optional reference; each child points to at most one parent.
- Entities → IntegrationDeliveries (one-to-many): IntegrationDeliveries.Entity is a required reference; each child points to one parent.
- DocumentRevisions → IntegrationDeliveries (one-to-many): IntegrationDeliveries.Revision is a required reference; each child points to one parent.
- IntegrationDeliveries → IntegrationDeliveries (one-to-many): IntegrationDeliveries.Supersedes is a optional reference; each child points to at most one parent.
- Employees → EmployeePayComponents (one-to-many): EmployeePayComponents.Employee is a required reference; each child points to one parent.
- PayComponents → EmployeePayComponents (one-to-many): EmployeePayComponents.PayComponent is a required reference; each child points to one parent.
- Currencies → EmployeePayComponents (one-to-many): EmployeePayComponents.Currency is a required reference; each child points to one parent.
- DocumentRevisions → EmployeePayComponents (one-to-many): EmployeePayComponents.Revision is a required reference; each child points to one parent.
- Employees → CompensationHistory (one-to-many): CompensationHistory.Employee is a required reference; each child points to one parent.
- MasterChanges → CompensationHistory (one-to-many): CompensationHistory.Change is a required reference; each child points to one parent.
- Currencies → CompensationHistory (one-to-many): CompensationHistory.Currency is a required reference; each child points to one parent.
- Entities → WorkCalendars (one-to-many): WorkCalendars.Entity is a required reference; each child points to one parent.
- DocumentRevisions → WorkCalendars (one-to-many): WorkCalendars.Revision is a required reference; each child points to one parent.
- WorkCalendars → WorkCalendarDays (one-to-many): WorkCalendarDays.Calendar is a required reference; each child points to one parent.
- Employees → LeaveEntries (one-to-many): LeaveEntries.Employee is a required reference; each child points to one parent.
- LeaveTypes → LeaveEntries (one-to-many): LeaveEntries.LeaveType is a required reference; each child points to one parent.
- LeaveRequests → LeaveEntries (one-to-many): LeaveEntries.LeaveRequest is a optional reference; each child points to at most one parent.
- LeaveBalances → LeaveEntries (one-to-many): LeaveEntries.Balance is a required reference; each child points to one parent.
- WorkCalendarDays → LeaveEntries (one-to-many): LeaveEntries.CalendarDay is a optional reference; each child points to at most one parent.
- LeaveEntries → LeaveEntries (one-to-many): LeaveEntries.ReversalOf is a optional reference; each child points to at most one parent.
- PayrollRuns → PayrollAllocations (one-to-many): PayrollAllocations.PayrollRun is a required reference; each child points to one parent.
- PayStatementLines → PayrollAllocations (one-to-many): PayrollAllocations.PayStatementLine is a required reference; each child points to one parent.
- TimesheetLines → PayrollAllocations (one-to-many): PayrollAllocations.TimesheetLine is a optional reference; each child points to at most one parent.
- LeaveEntries → PayrollAllocations (one-to-many): PayrollAllocations.LeaveEntry is a optional reference; each child points to at most one parent.
- WorkOrders → PayrollAllocations (one-to-many): PayrollAllocations.WorkOrder is a optional reference; each child points to at most one parent.
- CostCenters → PayrollAllocations (one-to-many): PayrollAllocations.CostCenter is a required reference; each child points to one parent.
- PayrollAllocations → PayrollAllocations (one-to-many): PayrollAllocations.ReversalOf is a optional reference; each child points to at most one parent.
- JournalEntries → PayrollAllocations (one-to-many): PayrollAllocations.JournalEntry is a optional reference; each child points to at most one parent.
- MigrationBatches → PayrollOpeningBalances (one-to-many): PayrollOpeningBalances.Batch is a required reference; each child points to one parent.
- Employees → PayrollOpeningBalances (one-to-many): PayrollOpeningBalances.Employee is a required reference; each child points to one parent.
- PayComponents → PayrollOpeningBalances (one-to-many): PayrollOpeningBalances.PayComponent is a required reference; each child points to one parent.
- Currencies → PayrollOpeningBalances (one-to-many): PayrollOpeningBalances.Currency is a required reference; each child points to one parent.
- FixedAssets → AssetBooks (one-to-many): AssetBooks.Asset is a required reference; each child points to one parent.
- Entities → AssetBooks (one-to-many): AssetBooks.Entity is a required reference; each child points to one parent.
- Currencies → AssetBooks (one-to-many): AssetBooks.Currency is a required reference; each child points to one parent.
- MigrationBatches → AssetBooks (one-to-many): AssetBooks.OpeningBatch is a optional reference; each child points to at most one parent.
- AssetBooks → AssetEvents (one-to-many): AssetEvents.AssetBook is a required reference; each child points to one parent.
- Approvals → AssetEvents (one-to-many): AssetEvents.Approval is a optional reference; each child points to at most one parent.
- JournalEntries → AssetEvents (one-to-many): AssetEvents.JournalEntry is a optional reference; each child points to at most one parent.
- AssetEvents → AssetEvents (one-to-many): AssetEvents.Counterpart is a optional reference; each child points to at most one parent.
- AssetEvents → AssetEvents (one-to-many): AssetEvents.ReversalOf is a optional reference; each child points to at most one parent.
- Entities → CloseTemplates (one-to-many): CloseTemplates.Entity is a required reference; each child points to one parent.
- DocumentRevisions → CloseTemplates (one-to-many): CloseTemplates.Revision is a required reference; each child points to one parent.
- CloseTasks → CloseDependencies (one-to-many): CloseDependencies.Task is a required reference; each child points to one parent.
- CloseTasks → CloseDependencies (one-to-many): CloseDependencies.Prerequisite is a required reference; each child points to one parent.
- Approvals → CloseDependencies (one-to-many): CloseDependencies.Decision is a optional reference; each child points to at most one parent.
- Entities → AllocationRuns (one-to-many): AllocationRuns.Entity is a required reference; each child points to one parent.
- AccountingPeriods → AllocationRuns (one-to-many): AllocationRuns.Period is a required reference; each child points to one parent.
- EnterprisePolicies → AllocationRuns (one-to-many): AllocationRuns.Policy is a required reference; each child points to one parent.
- Approvals → AllocationRuns (one-to-many): AllocationRuns.Approval is a optional reference; each child points to at most one parent.
- JournalEntries → AllocationRuns (one-to-many): AllocationRuns.JournalEntry is a optional reference; each child points to at most one parent.
- AllocationRuns → AllocationRuns (one-to-many): AllocationRuns.ReversalOf is a optional reference; each child points to at most one parent.
- AllocationRuns → AllocationLines (one-to-many): AllocationLines.Run is a required reference; each child points to one parent.
- ChartOfAccounts → AllocationLines (one-to-many): AllocationLines.SourceAccount is a required reference; each child points to one parent.
- CostCenters → AllocationLines (one-to-many): AllocationLines.SourceCostCenter is a optional reference; each child points to at most one parent.
- ChartOfAccounts → AllocationLines (one-to-many): AllocationLines.DestinationAccount is a required reference; each child points to one parent.
- CostCenters → AllocationLines (one-to-many): AllocationLines.DestinationCostCenter is a required reference; each child points to one parent.
- ConsolidationRuns → ConsolidationEntities (one-to-many): ConsolidationEntities.Run is a required reference; each child points to one parent.
- Entities → ConsolidationEntities (one-to-many): ConsolidationEntities.Entity is a required reference; each child points to one parent.
- AccountingPeriods → ConsolidationEntities (one-to-many): ConsolidationEntities.ReportingPeriod is a required reference; each child points to one parent.
- ConsolidationRuns → ConsolidationAdjustments (one-to-many): ConsolidationAdjustments.Run is a required reference; each child points to one parent.
- ConsolidationRunLines → ConsolidationAdjustments (one-to-many): ConsolidationAdjustments.RunLine is a required reference; each child points to one parent.
- Entities → ConsolidationAdjustments (one-to-many): ConsolidationAdjustments.PartnerEntity is a optional reference; each child points to at most one parent.
- ChartOfAccounts → ConsolidationAdjustments (one-to-many): ConsolidationAdjustments.Account is a required reference; each child points to one parent.
- Employees → ConsolidationAdjustments (one-to-many): ConsolidationAdjustments.ReviewedBy is a optional reference; each child points to at most one parent.
- Entities → MigrationBatches (one-to-many): MigrationBatches.Entity is a required reference; each child points to one parent.
- JournalEntries → MigrationBatches (one-to-many): MigrationBatches.OpeningJournal is a optional reference; each child points to at most one parent.
- Employees → MigrationBatches (one-to-many): MigrationBatches.ApprovedBy is a optional reference; each child points to at most one parent.
- MigrationBatches → MigrationItems (one-to-many): MigrationItems.Batch is a required reference; each child points to one parent.
- GoodsReceiptItems → QualityInspections (one-to-many): polymorphic incoming_scope, validated through ReferenceType/ReferenceID and immutable scope evidence; this is not a direct foreign-key field.
- WorkOrderOperations → QualityInspections (one-to-many): polymorphic operation_scope, validated through ReferenceType/ReferenceID and immutable scope evidence; this is not a direct foreign-key field.
- GoodsReceipts → StockMovements (one-to-many): polymorphic receipt_source, validated through ReferenceType/ReferenceID and immutable scope evidence; this is not a direct foreign-key field.

## Views

### Pipeline Board

Source: Opportunities

Filter: Stage IN ('Qualify', 'Discovery', 'Proposal', 'Negotiation')

Roles: Sales Rep, Sales Manager, Admin

Columns: OpportunityNumber, Name, Account, PrimaryContact, Stage, Amount, Probability, ForecastCategory, Owner

### My Closing Opportunities

Source: Opportunities

Filter: Owner = current user AND Stage IN ('Proposal', 'Negotiation') AND ExpectedCloseDate <= today + 30 days

Roles: Sales Rep, Sales Manager

Columns: OpportunityNumber, Name, Account, PrimaryContact, Stage, Amount, ExpectedCloseDate, ForecastCategory, NextStep

### Quotes Awaiting Approval

Source: Quotes

Filter: Status = 'Submitted'

Roles: Sales Manager, Admin

Columns: QuoteNumber, Customer, Opportunity, QuoteDate, ValidUntil, GrandTotal, MaxDiscountPercent, MinMarginPercent, Owner, Status

### Sales Orders Awaiting Approval

Source: SalesOrders

Filter: Status IN ('Submitted', 'OnCreditHold')

Roles: Sales Manager, Controller, Admin

Columns: SalesOrderNumber, Customer, SalesRep, OrderDate, GrandTotal, Currency, Fulfilment, SalesManager, Status, CampusCode, AcademicTerm

### Invoices Awaiting Approval

Source: Invoices

Filter: Status = 'PendingApproval' AND DocumentType = 'Invoice'

Roles: Controller

Columns: InvoiceNumber, Customer, Entity, InvoiceDate, DueDate, TotalAmount, Currency, CurrentRevision, CreatedBy, Status

### Open Sales Orders

Source: SalesOrders

Filter: Status IN ('Approved', 'InProduction', 'Allocated', 'Picked', 'PartiallyShipped')

Roles: Sales Rep, Sales Manager, Warehouse Operator, Production Planner, Admin

Columns: SalesOrderNumber, Customer, OrderDate, RequestedDeliveryDate, PromiseDate, GrandTotal, Fulfilment, Status, Entity, CampusCode, AcademicTerm

### Pending PO Approvals

Source: PurchaseOrders

Filter: Status = 'Submitted'

Roles: Buyer, Controller, Admin

Columns: PurchaseOrderNumber, Vendor, OrderDate, RequiredDate, TotalAmount, Currency, POType, Buyer, RequestedBy, Entity

### Incoming Inspection Queue

Source: GoodsReceiptItems

Filter: Status = 'PendingQC'

Roles: Quality Inspector, Warehouse Operator, Buyer, Admin

Columns: Receipt, PurchaseOrderItem, Product, QuantityReceived, LotNumber, ExpiryDate, Warehouse, Receipt.ReceiptDate, Status

### MRP Exceptions

Source: PlannedOrders

Filter: Status IN ('Proposed', 'Firmed') AND Exception != 'None'

Roles: Production Planner, Buyer, Admin

Columns: PlannedOrderNumber, Type, Product, Quantity, NeedDate, ReleaseDate, PeggedType, PeggedID, Exception, Owner, Status

### Shop Floor Schedule

Source: WorkOrderOperations

Filter: Status IN ('Pending', 'InProgress') AND PlannedStart <= today + 14 days

Roles: Plant Manager, Production Planner, Admin

Columns: WorkOrder, OperationNumber, Description, WorkCenter, Operator, PlannedStart, PlannedEnd, Status

### My Operations Today

Source: WorkOrderOperations

Filter: Operator = current user AND PlannedStart <= today AND Status != 'Completed'

Roles: Operator, Plant Manager

Columns: WorkOrder, OperationNumber, Description, WorkCenter, PlannedStart, PlannedEnd, QualityCheckRequired, Status

### Inventory Availability

Source: Inventory

Filter: QuantityOnHand > 0

Roles: Sales Rep, Sales Manager, Buyer, Production Planner, Warehouse Operator, Admin

Columns: Product, Warehouse, LotNumber, ExpiryDate, QuantityOnHand, QuantityAllocated, QuantityAvailable, LastUpdated

### Bills Awaiting Approval

Source: Bills

Filter: Status = 'PendingApproval'

Roles: Employee, Controller, Finance Clerk, Admin

Columns: BillNumber, DocumentType, Vendor, VendorInvoiceNumber, BillDate, DueDate, TotalAmount, Currency, PurchaseOrder, MatchVariance, Entity, Status

### Disputed Bills

Source: Bills

Filter: Status = 'Disputed'

Roles: Buyer, Finance Clerk, Admin

Columns: BillNumber, Vendor, VendorInvoiceNumber, PurchaseOrder, MatchVariance, TotalAmount, Currency, DueDate, Entity, Status

### Unapplied Cash

Source: PaymentsReceived

Filter: Status IN ('Unapplied', 'PartiallyApplied')

Roles: Finance Clerk, Controller, Admin

Columns: PaymentNumber, Customer, PaymentDate, Method, Amount, AmountApplied, AmountUnapplied, Currency, Reference, BankAccount, Status

### Unposted Journal Entries

Source: JournalEntries

Filter: Status IN ('Draft', 'PendingApproval')

Roles: Controller, Admin

Columns: JournalEntryNumber, Entity, Period, Date, Description, EntryType, Source, TotalDebit, TotalCredit, PreparedBy, Status

### Period Close Status

Source: AccountingPeriods

Filter: Status IN ('Open', 'SoftClose')

Roles: Controller, Finance Clerk, HR Manager, Payroll Administrator, Admin

Columns: PeriodName, Entity, PeriodType, StartDate, EndDate, ChecklistTasksOpen, Status, ClosedBy

### My Approvals

Source: Approvals

Filter: Approver = current user AND Decision = 'Pending'

Roles: Employee, Buyer, Sales Manager, Plant Manager, Controller, HR Manager, Payroll Administrator, Admin

Columns: ApprovalNumber, DocumentType, DocumentID, Entity, Step, Amount, LimitApplied, DelegateFor, RequestedAt, Decision

### My Team Leave Requests

Source: LeaveRequests

Filter: Approver = current user AND Status = 'Submitted'

Roles: Employee, Sales Manager, Plant Manager, Buyer, Controller, HR Manager, Admin

Columns: RequestNumber, Employee, LeaveType, StartDate, EndDate, Days, Reason, SubmittedAt, Status

### My Timesheets

Source: Timesheets

Filter: Employee = current user

Roles: Employee, Operator

Columns: TimesheetNumber, PeriodStart, PeriodEnd, RegularHours, OvertimeHours, LeaveHours, TotalHours, Approver, Status

### Open Payroll Runs

Source: PayrollRuns

Filter: Status IN ('Draft', 'Calculating', 'PendingApproval')

Roles: Payroll Administrator, Controller, Admin

Columns: RunNumber, Entity, PayDate, Frequency, RunType, EmployeeCount, GrossTotal, NetTotal, PreparedBy, Status

## Reports

- **Trial Balance** (hierarchical): Posted immutable JournalEntryLines by entity and eligible posting period with opening, debit, credit and closing; reversal entries contribute once on their posting dates, and source/version/rounding reconcile to controls.
- **Profit and Loss by Entity** (hierarchical): Signed posted revenue and expense by entity/cost centre and month/quarter/YTD against the designated Locked Budgets version and prior comparable period; BudgetLines convert using the frozen budget rates rather than adding budget currency to functional actuals.
- **Balance Sheet** (hierarchical): Posted functional assets, liabilities and equity at the as-of cutoff, and reporting-currency results from the chosen locked ConsolidationRun with effective method, NCI, translation reserve and separately visible elimination workings.
- **Cash Flow Statement** (hierarchical): Indirect cash flow reconciled from posted opening/closing cash and balance movements, with noncash, depreciation, acquisition/disposal, FX and consolidation scope changes separated so movements are not treated as cash twice.
- **Cash Forecast** (flat): Thirteen weeks from reconciled bank balance at the stated opening timestamp; open invoice collections, unreserved bills, reserved payment instructions, approved unpaid operational payroll and tax obligations form mutually exclusive source buckets, with currency/date assumptions and uncertainty shown; Parallel payroll and duplicated bill/run obligations excluded.
- **Aged Receivables and Payables** (flat): Document-currency net outstanding as of the cutoff from cash, discounts, write-offs, withholding and posted credit allocations, translated on a retained report basis; unapplied cash/credits shown separately, with due-date aging and disputes/holds, never counted as paid cash.
- **Sales Pipeline and Forecast** (hierarchical): Open opportunities by entity, owner, stage, forecast category and expected close month, with weighted value = Amount × Probability / 100 and explicit reporting-currency conversion; actual closed-won uses ClosedDate and accepted scope, excluding duplicates and cancelled replacement offers.
- **Sales and Margin by Customer and Product** (hierarchical): Posted invoice net revenue less original-linked credits by entity/customer/product/period; standard margin uses frozen InvoiceItems.StandardCostSnapshot while actual margin uses allocated shipment/service cost, with missing-cost coverage shown rather than fabricated zero margin; Sales Rep output excludes protected cost/margin.
- **Inventory Valuation** (hierarchical): Owned net StockLayers/StockMovements at the cutoff by entity, warehouse and costing method reconciled to mapped inventory controls; pending custody excluded, reservations do not reduce ownership value, and remaining WorkOrders.OpenWIP excludes transferred completed/scrapped cost.
- **Production Attainment** (flat): Released work-order population due in the period, comparing cumulative accepted terminal output against original approved quantity/cutoff and separately showing cancellations/replans; scrap counts unique rejected units, labour and overhead variances use separate frozen rate/basis evidence, and incomplete/zero-duration intervals are excluded from productivity.
- **Procurement Spend** (hierarchical): Approved PO commitment, net accepted receipt/service value and posted bill/credit spend shown as separate populations; cumulative matched quantities prevent duplicate full-PO spend, price variance uses equivalent quantity/UOM/currency, on-time acceptance compares original promise and quality rejection uses inspected population with no-history coverage shown.
- **Payroll and Headcount** (hierarchical): Posted operational gross, employee deductions/tax, statutory employer tax, other employer contributions and net by entity/component/period, including signed correction deltas and excluding Parallel; headcount uses effective employment/position occupancy as of date, and leave uses dated ledger entries; HR/payroll see scoped details, Controller sees approved aggregates, employees only their own results.

## Working with this application

### What an agent typically does here

- **Sales Rep's assistant.** Summarizes account activity, drafts follow-ups and prepares an offer from the approved product prices. Flags the discount or term that needs review without exposing restricted cost information.
- **Sales Manager's assistant.** Finds stalled opportunities and prepares forecast commentary with links to the customer activity behind it.
- **Buyer's assistant.** Explains planning exceptions, drafts requisitions and follows supplier acknowledgements. Preserves the approved order revision when a supplier proposes a change.
- **Finance Clerk's assistant.** Suggests cash applications and receipt-to-bill matches. Shows the underlying documents and differences so the clerk can investigate before submitting an exception or payment run.
- **Controller's assistant.** Collects close evidence, identifies unreconciled balances and prepares draft adjustments. Keeps the current reporting period and source amounts explicit.
- **Payroll Administrator's assistant.** Finds missing time approvals and explains differences between calculated pay and the comparison run. Uses only the employee information allowed to its service identity.
- **HR Manager's assistant.** Prepares leave and staffing summaries and flags sensitive change proposals awaiting review.

### What it cannot do alone

An assistant cannot turn its user's authority into an unattended human approval. Purchase approval, quote or order decisions, payroll approval, payment release and period close remain with the accountable people described by the process. Service access cannot bypass credit limits, document revisions, independence rules or payroll privacy. Uncertain bank responses require reconciliation before a retry can create another instruction.

### Example calls

The following are illustrative work requests, not a published API contract. Choose the deployed actions and response handling during integration.

```text
Read my open opportunities and summarize the next customer commitments.
Prepare a quote draft from the approved product prices for review.
Compare a vendor bill with its accepted receipt allocations.
Suggest how an unapplied customer receipt could settle open invoices.
List unresolved close tasks and link each to its supporting evidence.
Compare a nonposting Parallel payroll run with the supplied baseline.
```

Machine reads and writes, managed executions and model usage are metered under the pricing rules. Ordinary manual work in the official interface remains free. Assign the assistant a scoped identity, review its proposed work and use usage receipts to understand its cost.

## Detailed application guides

- [Ledger and close](https://www.erp.ai/education-and-school-erp/modules/ledger-and-close) — Reconcile operating activity, review adjustments and produce a locked financial close with traceable group reporting.
- [Payables and receivables](https://www.erp.ai/education-and-school-erp/modules/payables-and-receivables) — Match obligations to accepted work, control payment release and reconcile cash, credits and foreign-currency settlements.
- [Sales and CRM](https://www.erp.ai/education-and-school-erp/modules/sales-and-crm) — Connect the sales conversation to reviewed prices, customer commitments and the orders finance and operations fulfil.
- [Purchasing and inventory](https://www.erp.ai/education-and-school-erp/modules/purchasing-and-inventory) — Control commitments, receipt quality and stock availability from the first requisition through delivery and returns.
- [Production and quality](https://www.erp.ai/education-and-school-erp/modules/production-and-quality) — Plan the remaining demand, release a stable production plan and trace accepted output back to its material, time and quality checks.
- [People and payroll](https://www.erp.ai/education-and-school-erp/modules/people-and-payroll) — Connect employee changes, approved leave and time to a reviewed payroll run with clear settlement and correction history.
- [Entities and master data](https://www.erp.ai/education-and-school-erp/modules/entities-and-master-data) — Set the entities, financial rules and approval boundaries that keep commercial, operating and employee records consistent.
- [Order-to-cash](https://www.erp.ai/education-and-school-erp/processes/lead-to-cash) — Carry an accepted offer through credit approval, fulfillment and invoice settlement without losing its commercial terms.
- [Procure to pay](https://www.erp.ai/education-and-school-erp/processes/procure-to-pay) — Authorize the purchase, match accepted quantities and release a payment instruction with the right independent reviewer.
- [Plan to produce](https://www.erp.ai/education-and-school-erp/processes/plan-to-produce) — Convert remaining demand into a released production plan, accepted output and a reconciled work-order cost.
- [Hire to pay](https://www.erp.ai/education-and-school-erp/processes/hire-to-pay) — Use effective employee data and approved time to prepare payroll, review its totals and reconcile actual payment.
- [Record to report](https://www.erp.ai/education-and-school-erp/processes/record-to-report) — Reconcile each entity, authorize its close and preserve the source evidence behind the consolidated reporting pack.
- [Independent schools](https://www.erp.ai/education-and-school-erp/industries/independent-schools) — For business offices planning supplies and financial close around the school year.
- [Education groups](https://www.erp.ai/education-and-school-erp/industries/education-groups) — For controllers and shared-services teams supporting several campuses or companies.
- [Training and vocational providers](https://www.erp.ai/education-and-school-erp/industries/training-and-vocational-providers) — For operations teams supplying practical workshops and institutional training contracts.
- [Roles and permissions](https://www.erp.ai/education-and-school-erp/roles) — Give each team the access and approval authority its work requires.
- [Reports and analytics](https://www.erp.ai/education-and-school-erp/reports) — Understand cash, profitability and operating performance across your companies.
- [Data model](https://www.erp.ai/education-and-school-erp/data-model) — Inspect the records, references and migration boundaries behind the specification.
- [Integrations](https://www.erp.ai/education-and-school-erp/integrations) — Connect the services your companies use, with clear ownership and reconciliation.
- [Implementation](https://www.erp.ai/education-and-school-erp/implementation) — Plan a phased rollout around your companies, data and business priorities.
- [AI assistants and API](https://www.erp.ai/education-and-school-erp/agent) — Give your teams help with preparation, follow-up and exception review.
- [Pricing](https://www.erp.ai/education-and-school-erp/pricing) — No per-user fees. Pay for automation as you use it, with implementation priced separately.
- [Frequently asked questions](https://www.erp.ai/education-and-school-erp/faq) — Answers about scope, rollout, access and the way Education & School ERP is priced.
- [Get started](https://www.erp.ai/education-and-school-erp/get-started) — Explore the system and plan a rollout around your business.
