Every figure declares what it is
Read straight from a real field — Order_Lines, Orders.invoice_total, the costing sheet, the shipment rows. In the current view: ₹0.
GST rate 18% · Snapmint EMI fee 4.5% net · Freight rate-card quote · period-cost apportionment. Hatched everywhere they touch a number. In view: ₹3,56,113.
Payment gateway fees · COD cash-in. Named gaps — never silently pretended to be ₹0. Packaging · Marketplace commissions graduated to an allocated period cost.
Sum of Orders.invoice_total, GST included, less cancelled orders. RTO still counts as a sale. NOT gross sales × 1.18 — the ex-GST measure divides a POST-adjustment customer value, so the two differ by ₹309.97 across 10 orders.
4,546 order lines · 2,064 shipments, pulled from Grist. Recognised revenue is forced to ₹0 on 0 cancelled / RTO orders in view.
Advertising, software, warehousing — money that belongs to a month, not to an order. Enter a total and it is apportioned across that month’s orders. The share an order carries is always assumed — the total was measured, the split is a rule.
In the real app this is an admin form: enter a month or a date range, a category and an amount — or upload a CSV — and it is written to data/period-costs.json on the server, then apportioned across that month’s orders. This design preview is a static export with no backend, so the form is not rendered rather than shown as a button that would fail on click. The ledger below is live and shows every state it can draw.
- Meta + Google, August to dateAdvertisingPart month — the snapshot stops mid-August.₹17,025
- Salaries & contractorsSalaries & contractors₹15,715
- Shopify, Grist, Klaviyo, SlackSoftware & tools₹2,537
- Influencer flight, 16 Jul – 15 AugAdvertising15/31 days of 2026-07-16 – 2026-08-15Entered as a RANGE and split pro-rata by day across the two months it spans.₹24,555
Split equally across the month's orders: the month recognised no revenue, so there is no revenue weight to apportion by.
- Meta + Google, JulyAdvertising₹1,41,109
- Salaries & contractorsSalaries & contractors₹47,146
- 3PL storage + pick-packWarehousing & fulfilmentBilled on closing stock, not on despatches.₹23,573
- Cartons, tape, void fillPackaging & consumablesCSV₹19,317
- Marketplace commissionsMarketplace commissionsCSV₹12,114
- Shopify, Grist, Klaviyo, SlackSoftware & tools₹7,612
- Bank charges, courier claimsMiscellaneous₹3,503
- Photoshoot + retainerCreative & contentUser-added category — shows the non-built-in row treatment.₹15,715
- Influencer flight, 16 Jul – 15 AugAdvertising16/31 days of 2026-07-16 – 2026-08-15Entered as a RANGE and split pro-rata by day across the two months it spans.₹26,192
Split equally across the month's orders: the month recognised no revenue, so there is no revenue weight to apportion by.
Revenue basis
Proof that the revenue basis holds before a single margin is quoted.
invoice_total vs the line-level rebuild
Known traps this page guards
- Split orders have no name
- REMOVE lines are already gone
- Free items carry no tag
- Refunds on zeroed orders
There is no freight bill to reconcile against — courier_charge is 0 on every shipment row. Any freight figure this app ever shows will be a quote or a rate-card estimate, and will say so on the row.