Skip to main content

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.

TermMeaning
PREPAIDPay before goods ship
NET_15Pay within 15 days of invoice
NET_30Pay within 30 days of invoice (default)
NET_60Pay within 60 days of invoice
DUE_ON_RECEIPTPay on delivery
INSTALLMENTSMultiple scheduled payments
MILESTONEPayment 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, and earlyPaymentDiscountPercent. 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:

TypeWhen used
depositAdvance payment before goods ship
balanceRemaining amount due after delivery
installmentOne payment in a scheduled series
adjustmentCorrection to a prior payment
refundMoney returned from supplier
penaltyLate payment or contract breach charge
Key fields per payment record:
FieldDescription
paymentTypeOne of the types above
amountAmount in the payment's own currency
currencyCan differ from the PO currency
amountConvertedEquivalent in the PO's base currency
discount_percentEarly payment discount applied
invoice_numberSupplier invoice this payment covers
payment_due_dateWhen payment is due
statusdraft, scheduled, pending, paid, cancelled
notesFree 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:

FieldDescription
CurrencyPO currency selector (locked once invoiced)
Payment termTerm selector (locked once invoiced)
Additional costsPO-level costs e.g. freight, customs, inspection fees
General discountPO-level discount applied to the total
Total costSum of all line item totals + additional costs − general discount
Total paymentsSum of all payment records in paid or pending status