Payments & Currency
Payment terms, recording payments, multi-currency POs, and the payment status lifecycle.
Payment Status vs. PO Status
These are two separate fields tracked independently on every PO.
- PO status tracks operational progress:
draft → confirmed → in_transit → completed / cancelled - Payment status tracks financial progress:
not invoiced → invoiced → partially paid → disputed → paid
Both are visible on the PO details page. A PO can be completed operationally while still showing partially paid financially — these move independently.
Payment Terms
The payment term is set on the PO and defaults to NET_30. It is inherited from the supplier's configuration when a payment record is auto-created.
| Term | Meaning |
|---|---|
| PREPAID | Pay before goods ship |
| NET_15 | Pay within 15 days of invoice |
| NET_30 | Pay within 30 days of invoice (default) |
| NET_60 | Pay within 60 days of invoice |
| DUE_ON_RECEIPT | Pay on delivery |
| INSTALLMENTS | Multiple scheduled payments |
| MILESTONE | Payment tied to delivery milestones |
| The payment term field is locked once payment status reaches invoiced. |
The supplier record also stores
paymentTermsType(net_terms, advance, on_receipt),advancePercentage,netDays,earlyPaymentDiscountDays, andearlyPaymentDiscountPercent. These are read by the auto-create payment feature to generate the correct payment record structure.
Payment Records
A PO can have multiple payment records (purchaseOrderPayment), each with its own type, amount, currency, status, and due date.
Payment types:
| Type | When used |
|---|---|
| deposit | Advance payment before goods ship |
| balance | Remaining amount due after delivery |
| installment | One payment in a scheduled series |
| adjustment | Correction to a prior payment |
| refund | Money returned from supplier |
| penalty | Late payment or contract breach charge |
| Key fields per payment record: |
| Field | Description |
|---|---|
paymentType | One of the types above |
amount | Amount in the payment's own currency |
currency | Can differ from the PO currency |
amountConverted | Equivalent in the PO's base currency |
discount_percent | Early payment discount applied |
invoice_number | Supplier invoice this payment covers |
payment_due_date | When payment is due |
status | draft, scheduled, pending, paid, cancelled |
notes | Free text |
Payment record statuses: draft → scheduled → pending → paid / cancelled |
Auto-Create Payment
The Add payment button (secondary action on the PO details page) is available for any PO that is not in draft or cancelled status. It calls the autoCreatePurchaseOrderPayment global action, which generates payment record(s) based on the supplier's configured payment terms — for example:
- Advance terms: an advance deposit payment + a balance payment
- Net terms: a single balance payment due on the net day
The result appears immediately on the Payments tab of the PO.
Early Payment Discounts
If the supplier has earlyPaymentDiscountDays and earlyPaymentDiscountPercent configured, the auto-created payment will reflect those terms. Paying early when cash is available is generally worthwhile — a 2% discount on a 30-day term is equivalent to a ~24% annualised return.
PO Currency
The PO currency is automatically set to the selected supplier's default currency when a supplier is chosen on the creation form. If the supplier has no currency configured, it falls back to the shop's Shopify base currency. You can override it manually at any time before payment status reaches invoiced, after which the currency field is locked.
Supported currencies include USD, EUR, GBP, CAD, AUD, JPY, CNY, CHF, and many others — the full list matches the currency options on the supplier record.
Payment Currency
Each payment record has its own currency field, which can differ from the PO currency. The amountConverted field stores the equivalent in the PO's base currency at the time the payment is recorded. This lets you track exchange rate differences between when the PO was created and when payment is actually made.
Cost Summary Panel
The right-hand Cost summary card on the PO details page shows:
| Field | Description |
|---|---|
| Currency | PO currency selector (locked once invoiced) |
| Payment term | Term selector (locked once invoiced) |
| Additional costs | PO-level costs e.g. freight, customs, inspection fees |
| General discount | PO-level discount applied to the total |
| Total cost | Sum of all line item totals + additional costs − general discount |
| Total payments | Sum of all payment records in paid or pending status |