Purchase Orders and Proforma Invoices

The supplier pipeline from purchase intent to landed stock · draft → submitted → confirmed → in production → shipped → in transit → at customs → receiving → QC → closed · 16 live POs · 6 suppliers · AED 3.32M committed · this is where IN_PRODUCTION and GIT_INBOUND balances are created

Customs hold accruing. PO-2026-112 · CIC · container MSCU7719 at Jebel Ali since 18-07, free days exhausted 23-07 · demurrage AED 640/day, accrued AED 3,840 and booked as an estimated cost component · 96 units held. Open hold →
2 cost layers still estimated past 45 days. CL-2026-0612-0031 (PO-2026-115, freight invoice outstanding) and CL-2026-0624-0038 (PO-2026-110, broker invoice outstanding). A layer estimated past 60 days blocks the monthly close. Booking the actual posts a cost revision, never a rewrite. Review →
Landing 1-7d
3
1,820u · AED 598K
Landing 8-14d
2
1,380u · AED 549K
Landing 15-45d
4
8,220u · AED 1.42M
Overdue 1-14d
3
1,736u · AED 412K
Overdue 15d+
1
160u · AED 34K

Pipeline funnel

Units at each lifecycle stage · bar width proportional to units, inset bar to AED · percentage is drop-off to the next stage

20,574 u ordered
DRAFTSUBMITTEDCONFIRMEDIN PRODUCTIONSHIPPEDIN TRANSITAT CUSTOMSRECEIVINGQCCLOSED 30dCANCELLED Draft · 2 POs · 820 units · AED 122K Submitted · 1 PO · 4,800 units · AED 612K Confirmed · 1 PO · 900 units · AED 269K In production · 8 runs · 5,565 units · AED 1.21M · IN_PRODUCTION stock type Shipped · 3 shipments · 2,336 units · AED 812K In transit · 3 shipments · 1,060 units · AED 286K · GIT_INBOUND stock type At customs · 2 shipments · 1,276 units · AED 310K · 1 on hold 6 days Receiving · 2 POs · 2,150 units counted 1,880 QC · 1 PO · 48 units · 5-bucket outcome pending Closed last 30d · 3 POs · 4,360 units · AED 402K · all cost layers final Cancelled · 1 PO · 300 units · price rejected 820u4,800u900u5,565u2,336u1,060u1,276u2,150u48u4,360u300u -58% shipped +20% at customs -98% passed
Committed stages IN_PRODUCTION balance Customs Landed Cancelled is a branch, not a terminal funnel stage

ETA slippage

Original ETA week against days of slippage · circle radius proportional to AED at risk · shaded band is the +/- 3 day tolerance

median +4d
Tolerance band: slippage within +/- 3 days is not escalated +16d+8d0-8d-16d Trend: slippage worsening about 0.7 days per week PO-2026-109 · VJ Jewels · ETA 25-06 · slipped +1d · AED 96.7K PO-2026-111 · Atelier Rossi · ETA 10-07 · arrived 2d early · AED 312.4K PO-2026-116 · LC Straps · ETA 13-07 · arrived 1d early · AED 184.6K PO-2026-110 · Brasswork Milano · ETA 24-07 · slipped +5d · AED 148.9K · receiving now PO-2026-115 · CIC · ETA 07-07 · slipped +11d · AED 342K · 160 units short PO-2026-118 · CIC · ETA 27-07 · slipped +4d · AED 268.4K · at customs PO-2026-119 · VJ Jewels · ETA 30-07 · slipped +2d · AED 214.8K · in transit PO-2026-120 · ORO Leather · ETA 03-08 · on schedule · AED 58.7K PO-2026-113 · LC Straps · ETA 04-08 · on schedule · AED 62.4K PO-2026-112 · CIC Lulwa · ETA 03-08 · slipped +9d at Jebel Ali customs · AED 41.2K · demurrage accruing PO-2026-121 · CIC · ETA 18-08 · in production, on schedule · AED 486.2K
w25w27w28w29w30w31w32w34
On schedule 1-7d late 8d+ late Still in production Slippage measured against eta_original_on, never against the current ETA
All states 16
Draft 2
Submitted 1
Confirmed 1
In production 1
In transit 3
At customs 2
Receiving 1
QC 1
Partial 1
Closed 2
Cancelled 1
CIC 5
LC Straps 2
VJ Jewels 3
ORO Leather 3
Lulwa 2
Overdue only
2 selected · AED 610.4K

Purchase orders

quantity ladder · ordered → confirmed → produced → shipped → received → accepted 16 rows
PO Supplier PI State Inco Cur Ord Conf Prod Ship Recv Acc Short Exc FOB AED Landed AED ETA Slip Cost Age RNI
1 PO-2026-121 CNCIC PI-902 In production FOBUSD 2,4002,4001,18000000 486,200531,400 18-08on time estimated 27d0
2 PO-2026-118 CNCIC PI-896 At customs CIFUSD 1,1801,1801,1801,1800000 268,400302,900 31-07+4d estimated 41d0
3 PO-2026-119 INVJ Jewels PI-889 In transit FOBUSD 6406406406400000 214,800231,600 01-08+2d estimated 38d0
4 PO-2026-117 ITORO Leather PI-884 QC 5-bucket DAPEUR 48484848483200 96,400104,200 arrivedon time estimated 52d48
5 PO-2026-115 CNCIC PI-871 Partially received FOBUSD 1,8001,8001,8001,8001,6401,6281600 342,000366,819 18-07+11d partial actual 63d1,628
6 PO-2026-110 ITBrasswork Milano PI-864 Receiving FOBEUR 2,1502,1502,1502,1501,8801,88000 148,900168,400 24-07+5d estimated 91d1,880
7 PO-2026-120 ITORO Leather PI-891 In transit DAPEUR 1801801801800000 58,70063,100 03-08on time estimated 22d0
8 PO-2026-113 ITLC Straps PI-885 In transit FOBEUR 1,2001,2001,2002400000 62,40068,900 04-08on time estimated 46d0
9 PO-2026-112 CNCIC Lulwa PI-880 Customs hold FOBUSD 969696960000 41,20052,800 12-08+9d demurrage 78d0
10 PO-2026-114 INVJ Jewels PI-903 Confirmed FOBUSD 900900000000 268,900 - 02-09on time no layer 11d0
11 PO-2026-123 CNCIC - Submitted FOBUSD 4,8000000000 612,000 - 21-09awaiting PI no layer 1d0
12 PO-2026-122 ITORO Leather - Draft EXWEUR 5200000000 78,300 - TBCunsent no layer 2d0
13 PO-2026-124 ITBrasswork Milano - Draft FOBEUR 3000000000 44,100 - TBCunsent no layer 4d0
14 PO-2026-116 ITLC Straps PI-878 Closed FOBEUR 3,2003,2003,2003,2003,2003,19640 184,600209,880 12-071d early final 71d0
15 PO-2026-111 ITAtelier Rossi PI-869 Received CIFEUR 740740740740752748012 312,400351,900 08-072d early final 84d0
16 PO-2026-109 INVJ Jewels Lulwa PI-858 Closed FOBUSD 420420420420408402120 96,700108,300 26-061d late final 106d0
Totals · 16 POs 20,57414,95412,83410,6947,9287,88617612 3,316,0002,560,199 54d3,556
Nothing in the ladder except Ord and Conf is stored. Produced comes from production milestones, Shipped from inbound_shipment_lines, Received and Accepted from GRN and QC rows, Short and Excess are the differences. INV1 stored received_qty and overwrote it on every receive, which is how a second delivery against one PO line silently disappeared (rule R-05.7).

Proforma invoices

3 unmatched · AED 254.4K oldest 11d
PISupplierMatched POIssuedAgeDeclaredLine subtotalGapAttributionPayment
PI-908CIC unmatched24-075d 128,400122,2866,114 tax 5.00% exactdeposit unpaid
PI-905LC Straps unmatched 11d18-0711d 84,20079,8804,320 freight? 5.41%30% paid
PI-899Atelier Rossi unmatched22-077d 41,80041,8000 reconcilesunpaid
PI-903VJ Jewels PO-2026-11426-073d 268,900268,9000 reconcilesdeposit due 02-08
PI-902CIC PO-2026-12112-0717d 492,900486,2006,700 unresolved 1.38%30% paid
PI-896CIC PO-2026-11808-0721d 274,100268,4005,700 freight, accepted by RKbalance due 05-08
A gap between the line subtotal and the declared PI total is real money and is never folded silently into unit prices. i3 measures it, suggests an attribution (a gap of exactly 5.00% is UAE VAT; anything else on an import is usually freight) and requires a named human to accept it. Ported from ops2 iwms/pi.py reconcile_money, which found a AED 3,045 gap on the real PO-00267 and correctly refused to guess.

Currency exposure · open POs

USD 45% · AED 1.49M equivalent · CIC and VJ Jewels EUR 38% · AED 1.26M equivalent · Italian suppliers AED 17% · AED 564K · local purchases, no FX exposure 3.32M AED eq
  • USD45%
  • EUR38%
  • AED17%
USD 3.6730EUR 4.2810GBP 4.9620pinned 29-07 06:00
The rate is pinned at PO confirmation and again at invoice booking. The difference between the two becomes an fx_variance landed cost component allocated on value, never a silent restatement of the FOB price.

Supplier spend · YTD

CIC · CN 1.74M
Atelier Rossi · IT 918K
VJ Jewels · IN 642K
ORO Leather · IT 418K
LC Straps · IT 386K
Brasswork Milano · IT 294K
All suppliers →2026-01-01 to 29-07

The rule this page enforces · L1

IN_PRODUCTION and GIT_INBOUND are stock types, not locations. They are held against the destination location, so HQ_319 / IN_PRODUCTION = 5,565 reads as "5,565 units destined for HQ_319 that are currently on a factory floor". The v2 mockups modelled IN_PRODUCTION as a virtual location and i3 does not copy that.

The deciding test: if the concept answers where, it is a location; if it answers in what condition or under whose custody, it is a stock type. A virtual location set of TRANSIT, SUPPLIER_HOLD, DISCONTINUED is all i3 keeps.

Why it matters concretely: v2 classifier scenario 16 says a Preorder order should "draw from IN_PRODUCTION if STOCK=0". Modelled as a location that is a legal fulfilment, and a customer sale would deduct cloth on a factory floor in Guangzhou. In i3 both stock types are is_sellable=false, is_countable=false, and a preorder creates a backorder against a PO line instead.

The defect this page is fixing

i2's own source says it plainly, in blueprints/sku_costs.py: "Shopify InventoryItem.unitCost returned null for all 1,741 variants, purchase order tables are empty, and the inventory_ledger's unit_cost_fils column is zero across 503k rows."

So the valuation page renders At cost AED 0 with the subtitle "cost_fils not populated, run pull_costs.py", and the dashboard tile degrades to a unit count labelled "cost pending". The remedy that shipped was a manual admin-token CSV upload of one scalar per SKU: a one-shot with no schedule that cannot express freight, duty, or two different costs for two receipts of the same SKU.

i3 derives cost from this pipeline instead. Every receipt creates an immutable cost layer with a full landed build-up. Shopify becomes a consumer of cost, never the source. A non-zero balance at cost 0 is a gate-blocking condition checked by a daily reconciler, not a dash on a tile.

Connected to

PO detail → Production → Goods in transit → Shipment register → GRN + QC → GRN events → Suppliers → Supplier detail → Return to supplier → Cartons → SKU detail → Live inventory → Cost + price → Cash + valuation → Reports → Audit log → Dashboard →