Produce Pro Module 05 — Charges
Ontology pack for PP module 05 (Charges), pinned to PP version 2401.0. Confidence: manual · Extractor:
manual@2026-05-18· Renderer:pp-module-renderer@1.0.0.
Module purpose
PP Module 05 (Charges) holds the master taxonomy of additional charges and credits that ride alongside POs (Module 09), sales orders (Module 12), and invoices (Module 17 AR / Module 16 AP). A charge represents anything that is NOT the per-case line cost: freight, palletization, fuel, restocking fees, vendor temperature-tracker billing, manual adjustments, and produce-industry specifics such as ripening or repack labor.
Business context
Charges in PP are CODE-driven — each entry references a ChargeCode lookup (maintained in this module’s master tables) whose fields determine where the charge posts (PO header / PO line / sales order / customer invoice), the default amount or rate, taxability, and the GL account. FIN consumes the emitted charges as events.data.charges[] line items on the corresponding event types and persists the ChargeCode verbatim so downstream reconciliation can join back to PP’s master.
Canonical field reference
| PP field | Business meaning | Data type | UoM | Validity rules | Sentinel values | Enum values | Lookup table | FIN mapping | Version notes |
|---|---|---|---|---|---|---|---|---|---|
ChargeCode.Code | Short code referenced from POs / sales orders / invoices. | id_reference | — | Uppercase alphanumeric, ≤ 8 chars typical | — | — | PP charge-code master (Module 05) | events.data.charges[].code | — |
ChargeCode.Description | Human-readable description shown on invoices and reports. | string | — | — | — | — | — | events.data.charges[].description | — |
ChargeCode.PostsTo | Where the charge posts. Drives whether the FIN consumer treats it as a vendor charge (Module 09 / 16) or customer charge (Module 12 / 17). | enum | — | — | — | PO_HEADER, PO_LINE, SALES_ORDER_HEADER, SALES_ORDER_LINE, INVOICE | — | events.data.charges[].posts_to | — |
ChargeCode.DefaultAmount | Default flat amount or rate. When RateType=FLAT it’s an absolute USD amount; when RateType=PER_CASE or PER_LB it’s a per-unit rate. | currency | USD (flat) or USD per unit (rate) | — | 0 = No default — operator must set amount at point of entry | — | — | events.data.charges[].default_amount_usd | — |
ChargeCode.RateType | Pricing basis for this charge. Determines how the amount field is interpreted at apply-time. | enum | — | — | — | FLAT, PER_CASE, PER_LB, PER_PALLET, PERCENT | — | events.data.charges[].rate_type | — |
ChargeCode.Taxable | When true, the charge is subject to sales/use tax computation downstream. | boolean | — | — | — | — | — | events.data.charges[].taxable | — |
ChargeCode.GLAccount | GL account code (Module 18 General Ledger) the charge posts to when AP/AR finalises the entry. | code_lookup | — | — | — | — | PP GL chart (Module 18) | events.data.charges[].gl_account | — |
Workflow state machines
Charge application lifecycle
How a ChargeCode entry traverses from PP master into a line item on a PO/SO/invoice and finally into AP/AR settlement.
- Initial state:
Defined - Terminal states:
Settled
stateDiagram-v2 [*] --> Defined Defined --> Applied: Operator selects charge during PO / SO / invoice entry Applied --> Posted: Parent document (PO / SO / invoice) is finalised Posted --> Settled: AP cuts the payment OR AR collects from customer Settled --> [*]
Transitions:
| From | To | Trigger | Actor role | Notes |
|---|---|---|---|---|
Defined | Applied | Operator selects charge during PO / SO / invoice entry | Buyer | Salesperson |
Applied | Posted | Parent document (PO / SO / invoice) is finalised | Buyer | Salesperson |
Posted | Settled | AP cuts the payment OR AR collects from customer | AP | AR |
Cross-references to other PP modules
| Module | Title | Handoff point | Notes |
|---|---|---|---|
| 09 | Purchasing | PO header + line charges (freight, palletization, vendor tracker billing) | — |
| 12 | Sales | Sales order charges (delivery, repack, ripening, customer-specific surcharges) | — |
| 16 | Accounts Payable | Vendor charges flow into AP for invoice reconciliation | — |
| 17 | Accounts Receivable | Customer-billable charges post to AR for collection | — |
| 18 | General Ledger | Each ChargeCode has a GLAccount mapping that drives posting | — |
Sample artifacts
| Kind | Filename | Manifest anchor | Notes |
|---|---|---|---|
| pdf_report | 05 - Charges.PDF | Bucket 1 (Vendor manual) — Module 05 subset | Module 05 user guide (PP 2401.0) |
| passing_sheet | Sunkist Temptale billing line ($24.50) | FIELD_MAPPING_AND_SAFETY_SPEC §0.3 (vendor temperature trackers) | Real-world example of a vendor-side charge posting on a passing report — Sunkist bills Nathel for the vendor-provided Temptale tracker. |
Open questions / drift watch
- Does PP carry a separate `OperatorOverrideAllowed` flag per ChargeCode? FIELD_MAPPING does not yet have this; affects which charges agents can suggest changes to vs which must be operator-set.
- Raised in: Module 05 charge_application workflow design
- Watch artifact:
PP charge-code master export (PD335-equivalent for Module 05)