Pick a classification above to see its cost timeline.
▸SOON TO BE RETIREDOld structure — one row per cost record (Goods-Received window only) · click to expand
AFTERNew structure — FOB base + multiplier / tariff rules, keyed by Goods-Received × PO-Written date · reads from the FIFO config store (eddie_v2_fifo_cost) · ✏️ Edit costs on any vendor card opens the same editor as the FIFO tab's 🪟 Windows drawer
Pick a vendor to configure its windows, multipliers, and tariffs.
WINDOWSDate windows for this vendor · global — apply to ALL this vendor's classes
MULTIPLIERSPer-class multiplier values · download the template, edit, upload
VENDOR-SPECIFIC ADDERSExtras for THIS vendor only · tariff & duty live on the Global Config tab · Class blank = all this vendor's classes
SUPPLIER NAME MAPNetSuite → cost vendor name · moved to its own Supplier Map tab — drag-to-match, global across all vendors
COSTS BY CLASSEvery class this vendor prices · the live FIFO config next to what the cost sheet holds
Loading this vendor's classes…
Vendor → CountrySet each vendor's country — it drives the country-scoped tariff/duty on Global Config
Pick this tab to load vendors…
Brands & License AddersA licence royalty charged as a % of the FINAL landed cost per piece
How this works. A class pays a royalty because it is mapped to a brand below — not
because of its name. That is deliberate: if someone renames or mistypes a classification, the
mapping keeps it paying. The rate is applied last, on top of the finished landed cost per
piece (after FOB, tariff, duty, multipliers and freight), so the per-set figure picks it up
automatically. Different rates for different classes? Make two brand names (e.g. Reebok and
Reebok — Tier 2) and put each class under the one it belongs to.
Changing a rate over time? Give the rates non-overlapping dates; blank dates mean “always”.
Two rates covering the same day is refused — the engine will not guess a royalty.
After saving, re-run FIFO for the affected classes so the ledger and the P&L pick it up.
LICENCE RATESbrand → % of landed cost per piece
CLASSIFICATION → BRAND
Pick this tab to load…
Global ConfigTariff / duty / adders that apply across vendors
JUMP TO
GLOBAL ADDERSApplied to every FOB vendor · Country blank = all countries · Class blank = all classes · added to the FOB base
Examples — Tariff: Country “China”, Class blank, 25%, for the period window. Duty: Class “Mens Mesh Shorts”, Country blank, %, value.
Country is matched to each vendor's country (set on the Vendor Config tab, falling back to the cost sheet), so you never name vendors here.
DUTY SETUPDuty by classification · same table as the Upload Center's Duty Setup section — edit here or upload there, latest save wins
TARIFF CHARTTariff % by country · same table as the Upload Center's Tariff Chart section — edit here or upload there, latest save wins
OVERRIDES / EXCEPTIONSReplace a config for a specific country / class / vendor · most-specific scope wins & replaces the base value (it does not add) · e.g. Egypt duty-free = Overrides: duty, Country Egypt, 0%
How precedence works: for each config kind (duty / tariff / a named adder) the most-specific matching scope wins — vendor > country > class > global — and its value replaces the broader one. So a class-wide duty of 28.2% still applies everywhere, but an Egypt country override of 0% zeroes it just for Egypt-origin vendors. Everything is shown transparently on the vendor cards (the base is marked overridden, not hidden).
Pcs Per SetPieces per set by classification — same table the Upload Center's Pcs Per Set section manages; edit here or upload there, latest save wins
Pick this tab to load pcs per set…
CBM by ClassificationCubic meters per unit, from the NetSuite Inbound Shipment behind each receipt — rolled up to classification. (NetSuite stores CBM per shipment line, so it's divided by the line's units.) Click a classification to see its SKUs and open the shipment in NetSuite.
Pick this tab to load CBM…
ContainersEvery invoice behind the inbound shipments — all history. One row per invoice, so a container that holds several invoices repeats. Cost is matched to each invoice off the Monday board.
Costing by invoice — this tab is keyed by invoice (NetSuite's internal vessel number, e.g. SKL/RE/93/2026), the level at which the factory actually bills. A container often holds several invoices, so the same container number appears once per invoice. Freight and Duty come in automatically from the Monday Master Container Tracker, matched invoice-to-invoice (board item_name) — the board books each invoice's own sea/air/delivery freight and duty, so this is far more accurate than splitting a container total. To override, download the template, enter Freight Cost / Other Charges against an invoice and upload it back — typed figures always beat the board, and invoices you leave out keep what they have. Spreading this across items by CBM share is the next step; that allocation isn't built yet.
Origin shows where each invoice shipped from — resolved from the shipment's vendor (the same country that drives its duty) and, across all history, from the board's supplier. Use 🌍 Set supplier origins to fill in any supplier that isn't mapped yet; the confident ones are pre-filled.
Freight by Item ReceiptEach invoice's freight spread across the item receipt's lines by NetSuite CBM, down to a per-set cost. 1 unit = 1 set.
How this is built — for each Item Receipt (one per invoice / inbound shipment) we take the invoice's freight from the Monday board (sea + air + delivery) and spread it across the receipt's line items weighted by CBM. CBM comes from NetSuite's inbound-shipment lines (not Monday's). A line's share = its CBM ÷ the receipt's total CBM; that share of the freight ÷ the line's sets gives the freight per set — the cost to move one single set. Click a receipt to see every line. Coverage follows NetSuite's CBM, which is recorded for tracked/recent shipments.
Pick this tab to load…
🚚 High FreightReceipt lines whose freight allocation exceeds the threshold — the exact per-line freight the ledger priced withover $
What this shows — every costed receipt line where the stored freight allocation (the number the FIFO engine actually priced with, from the ledger's receipt lines) is above the threshold. Landed $/Pc includes freight and licence; the Goods $/Pc column backs both out so you can see what the freight sits on top of. Amber rows are estimates (borrowed CBM, SKU average, or lane rate — hover the Source cell for the full story); white rows are measured from the receipt's own shipment. Search, the vendor filter, and Export all operate on the entire result set, not the visible page.
Pick this tab to load…
🧭 Inventory GapFIFO's on-hand today vs the Inventory Grid's owned units — read-only, adjusts nothing
How to read this — FIFO On Hand is the ledger's current closing quantity per class (seed + receipts − the sales it knows about). Grid Owned is the same figure the
Inventory Grid shows today: 5 warehouse locations + RE26 pick/staging + FBA in-stock & inbound + FC reserved + Walmart WFS (customer-order reserved excluded — FIFO already deducted those sales too). Both sides are sets.
UNDER rows are the curious ones: physical units exist that FIFO never heard of. OVER is expected-ish — wholesale orders FIFO doesn't see, plus lost/damaged/MIA units over the years.
This screen only shows the gaps; nothing is baked in or adjusted.
Pick this tab to load…
💰 Owned Inventory $Every owned unit in the Inventory Grid, valued at its class's current FIFO cost — read-only
How to read this — Units come from the
Inventory Grid's own location columns (the same 14 non-overlapping columns behind its Total Units — customer-order reserved and RE26 87/88/89 excluded, as the grid excludes them). Each class's units are valued at its current FIFO cost: latest closing average cost per piece × pieces per set. Classes with no FIFO cost (never onboarded, or missing a pack size) show as unvalued — counted, never dropped.
Walmart WFS is always ~19h behind by design (its sync runs after the grid's 5:15 AM ET rebuild). Display only; nothing is written anywhere.
Pick this tab to load…
By location / status
By classification
▾
FIFO LEDGERMonthly roll-forward
Click a month row to see exactly which lots its sales were costed from (the switchover story) and what was left on the shelf at month end. Red rows have a problem explained right under them.
UNCOSTED RECEIPTSReceipts the engine couldn't price · these units still count as inventory, but are valued at the last known cost until each gap is fixed
Pick this tab's class, seed it above, then hit ▶ Run FIFO.
Opening seed— where each class's ledger starts. Everything before Jan 2024 is this one lot.
Enter the end-of-2023 on-hand quantity and the average cost per piece of that stock.
⚠️ Cost is per PIECE, not per set — the Avg Cost Per Set column on the right shows what that works out to per set, so you can sanity-check against a per-set figure.
Change anything here, hit Save seeds, then re-run that class on the FIFO Ledger tab: the ledger recomputes from scratch.
Saving writes every row below, not just the filtered ones — the filter only changes what you see.
⚠ Missing Data— everything standing between a classification and a costed FIFO ledger, biggest sellers first
FREIGHT DATA GAPS · why some receipts fall back to estimated freight instead of measured
Loading…
⛔ Costing Gaps— every receipt the last FIFO run could not price. Red lines on a chart = the receipts; the bars under them = the costs you've configured. A red line with no bar under it IS the gap.
📦 Owned Units — end of month— units on hand at each month close, per classification. Only classes onboarded to FIFO appear; new ones show up automatically once run.
📦 Unit Gaps— the Costing Gaps sibling: every receipt line IS priced, but seed + receipts don't cover what sold. Red = the class closes negative (units came from nowhere). Amber = oversold mid-month, later receipts backfill — timing, not missing units.
➕ Submit Costs— one fact at a time, nothing free-typed. The app closes old eras for you, previews every change, and writes BOTH the FIFO config and the Vendor Costs grid in one shot.
1 · WHAT ARE YOU PRICING
2 · THE NEW COST FACT
YOUR SUBMISSION
Nothing queued yet — add facts on the left. You can stack several (multiple classes, vendors, types) and apply them together.
a preview always comes first — nothing writes until you confirm
LOTS AT ONCE? — BULK TEMPLATE
Same pipeline, just a faster keyboard: the template's Type / Classification / Vendor / Window columns are Excel dropdowns of the app's real lists — nothing free-typed — and every uploaded row lands in this same queue, re-validated, previewed, and confirmed before anything writes. Bad rows are rejected by row number; they never sneak in.
Checks a class before you onboard it: pulls its real Item Receipts and prices
every line against the costs it would have — the class's own FIFO config if it has one, otherwise its rows on the
ECom Cost Sheet, promoted in memory. It writes nothing. No ledger, no Costing Gaps row, no Unit Gaps
row — nothing lands anywhere until you press ▶ Run FIFO yourself. Only classes you haven't onboarded are listed,
already cut into batches — pick a batch, not classes.
Batches — biggest first, by units sold
A class leaves this list the moment it's onboarded,
so Batch 1 is always your next 10 biggest. The batches re-cut as you go — they aren't fixed sets.
Loading batches…
Spot-check one class
Anything, onboarded or not — for re-checking a class
that's already live.
Results
Pick a batch on the left, then ▶ Preflight.
Supplier Map
Loading NetSuite receipt vendors…
NetSuite vendors need mapping
Every vendor on the header of an Item Receipt since Jan 1, 2024 — who we actually bought from. (The vendor shown on the receipt's lines is that item's preferred vendor and is never used.) Drag a name onto a cost vendor →. The same name can be dropped on several cost vendors, and several names can stack under one cost vendor. Chips stay here so you can reuse them; the badge shows how many links a name has.
💤 Ignored / inactive
Drag inactive vendors here to hide them from the working list. Drag them back up to restore.
Cost vendors — drop targets
—
Pick this tab to load goods received…
🪟 Cost setup
Pick a vendor to load its cost setup.
💡 After saving, hit ▶ Run FIFO so the ledger re-prices receipts with the new setup.