Skip to content
Demiton

Purchase line

Job-linked purchase order and invoice lines.

Part of Financials in the register catalog.

Register ID
purchase_lineUse this name to ask for the register. The API calls it a shelf ID.
Each record is
An eventSomething that happened at a point in time.
Status
AvailableFilled today from connected systems, uploads or public data.
Data
OrganisationPrivate to each organisation's own workspace.
Version
v1Current version.

Connectors

Connected today

Demiton keeps this register current from these systems now.

On the roadmap

Systems in the planned connector rollout that can fill this register. Partial means the system holds only some of its fields.

  • MYOB Acumatica
  • Xero AccountingPartial

Fields

23 fields: 11 required, 6 optional, 6 defined by each organisation.

Required

Every record carries these fields.

projectText

The job the line commits cost against. Raw jobNumber; the bound filter already excludes rows without one (jobNumber ne '', baseline_squash_02_seed.sql:1198).

Example: BWG-2025-001

financial_periodText

The period the commitment is attributed to. Derived from orderDate by the period resolver, not a raw field.

Example: 2026-07

currencyTextUnit: ISO 4217 code

Denomination of amount and unit_cost. Raw currencyCode, falling back to company base currency when the field is empty.

Example: AUD

amountDecimal numberUnit: by_coordinate (row currency)

Line value. Raw lineAmount. ADDITIVE.

Example: 48600

quantityNumberUnit: dimensionless (unit of measure is a separate attribute)

Line quantity. Raw quantity. ADDITIVE, missing=ZERO.

Example: 540

unit_costDecimal numberUnit: by_coordinate

Rate per unit. Raw directUnitCost. INSTANTANEOUS.

Example: 90

document_numberText

Purchase document identity. Raw documentNumber. Half of the composite external id; without it no line can be deduplicated or superseded.

Example: PO-100221

line_numberWhole number

Line identity within the document. Raw lineNumber. Second half of the composite id.

Example: 1

document_typeText

Which purchase-document kind the line belongs to (order / invoice / credit memo). Raw documentType. Mandatory because the bound endpoint is not type-filtered while the sibling commitments query is, so without this field an invoice line is indistinguishable from a PO line.

Example: order

order_dateDateYYYY-MM-DD

When the line was ordered. Raw orderDate; already the producer's occurred_at_field, so no new source is needed — this row records it in the payload too.

Example: 2026-07-08

unit_of_measureText

The unit quantity is counted in. Raw unitOfMeasureCode. quantity is declared dimensionless, so the unit has to be carried as an attribute or the quantity is uninterpretable. Which of unitOfMeasureCode / unitOfMeasure is canonical is unverified; both are in the corpus.

Example: TONNE

Optional

Present when the source system records them.

vendorText

The supplier the line is placed with. Raw buyFromVendorNumber. Optional because the declaration says so and the axis name is not portable.

Example: Statewide Concrete Supplies

cost_codeText

The job task / cost code the line is coded to. Raw jobTaskNumber.

Example: T20

descriptionText

Line description. Raw description. Optional: no lens mandates it, but names it as what makes this shelf richer than cost_element.

Example: 20mm road base aggregate

item_referenceText

The vendor's or tenant's item identifier. Raw itemReferenceNumber / vendorItemNumber.

Example: AGG-20MM

receipt_expected_onDateYYYY-MM-DD

Expected / promised / requested receipt date. Raw expectedReceiptDate, promisedReceiptDate, requestedReceiptDate. Optional: no lens requires a commitment to carry a delivery date, and the three raw fields disagree in meaning.

Example: 2026-07-15

Defined by each organisation

Their contents come from the organisation's own forms or systems, so they differ between organisations.

received_completeTrue or false

Whether the line is fully received. Raw completelyReceived / finished. Tenant-specific because "received" is a workflow state of the tenant's procurement process, not a fact about the commitment.

Example: true

amount_including_taxDecimal numberUnit: tenant tax area

Line value incl. tax. Raw amountIncludingVat. Tenant-specific: the R3 file is explicit that verified tax content rules attach to the invoice, not the order line (payroll-and-invoicing.md:563-568), and the tax rate/jurisdiction/rounding basis needed to reconcile it is not on this record (:545-552).

tax_group_codeText

Tenant tax group coding. Raw taxGroupCode. Same reason as amount_including_tax: tenant configuration vocabulary, no jurisdictional mandate on the order line.

tax_area_codeText

Tenant tax area coding. Raw taxAreaCode. Same reason.

cost_dimension_1Text

Tenant dimension code 1. Raw shortcutDimension1Code. Tenant-specific: BC dimension semantics are configured per tenant, and the shelf's portable cost axis is cost_code.

cost_dimension_2Text

Tenant dimension code 2. Raw shortcutDimension2Code. Same reason.

Example record

A sample from Bridgeworks Group, Demiton's demonstration company. The values are illustrative; the shape is exactly what the contract describes.

purchase_line.example.json
{
"amount": 48600,
"cost_code": "T20",
"currency": "AUD",
"description": "20mm road base aggregate",
"document_number": "PO-100221",
"document_type": "order",
"financial_period": "2026-07",
"item_reference": "AGG-20MM",
"legal_entity": "Bridgeworks Group Pty Ltd",
"line_number": 1,
"order_date": "2026-07-08",
"project": "BWG-2025-001",
"quantity": 540,
"receipt_expected_on": "2026-07-15",
"received_complete": true,
"unit_cost": 90,
"unit_of_measure": "TONNE",
"vendor": "Statewide Concrete Supplies"
}

Use this contract

The contract is a standard JSON Schema (draft 2020-12) document, so any JSON Schema validator can check a record against it. Keywords starting with x-demiton- add Demiton's own meaning, such as units and requiredness, and validators ignore them.

Schema URL
https://docs.demiton.io/registers/purchase_line/v1.json
Show the full JSON Schema

Loading the schema…

Talk to the team

Tell us what you run - your ERP, field, payroll and document systems - and we will show you the registers Demiton would keep current from them, on your data, in a 30-minute call.

Book a 30-minute callStart free