identical order_id+sku+timestamp lines from an export retry (some re-formatted, e.g. '$5.79' for '5.79')
Action: Export retry produced identical order_id+sku rows. Confirm with the webstore admin that the retry was a re-export, not a real re-order.
Northbridge Supply Co.
Period 2026-07-01 to 2026-07-31
All figures on this page are synthetic. Northbridge Supply Co. is a fictional company and this document is a PJA Solutions reference build, produced to show how a month-end close pack is assembled, reconciled and evidenced. Nothing here describes a real business or a real client.
The five figures this pack exists to state, for July 2026. Everything below either supports one of them or explains why it is not what you expected.
Net revenue
Gross margin $
Gross margin %
Orders
Units
Month-over-month movement is shown only where the pipeline supplied it. Where it did not, the prior-period figure is shown instead, or the comparison is marked not comparable — no delta is inferred here.
How gross product revenue becomes net revenue. Totals are measured from zero; the steps between them are the deductions and additions applied in order.
| Bridge step | Amount |
|---|---|
| Gross product revenue | $354,161 |
| Discounts | ($12,564) |
| Returns & allowances | ($8,078) |
| Shipping revenue | $3,274 |
| Net revenue | $336,794 |
Segment detail as reported. Negative figures are shown in parentheses.
| Reporting segment | Net rev. | Gross revenue | Discounts | Returns | Net revenue | COGS | Gross margin | GM % | Orders | Units |
|---|---|---|---|---|---|---|---|---|---|---|
| DTC | $38,259 | ($1,274) | ($1,228) | $35,757 | $21,607 | $14,150 | 39.6% | 497 | 661 | |
| Marketplace | $14,008 | ($481) | ($936) | $12,591 | $8,071 | $4,520 | 35.9% | 194 | 245 | |
| Wholesale | $195,926 | ($6,854) | ($2,446) | $186,625 | $92,954 | $93,671 | 50.2% | 88 | 3,674 | |
| Retail | $108,182 | ($3,218) | ($2,769) | $102,195 | $54,817 | $47,378 | 46.4% | 88 | 2,017 | |
| Unassigned | $1,061 | ($736) | ($699) | ($374) | $1,691 | ($2,066) | not available | 1 | 0 |
Product line detail, then gross margin percentage plotted on a single axis for comparison across lines.
| Product line | Net revenue | COGS | Gross margin | GM % | Units |
|---|---|---|---|---|---|
| Accessories | $134,494 | $69,615 | $64,879 | 48.2% | 2,211 |
| Consumables | $113,201 | $53,717 | $59,484 | 52.5% | 2,126 |
| Hardware | $71,623 | $41,300 | $30,323 | 42.3% | 1,877 |
| Unmapped ERP product | $21,646 | $9,712 | $11,934 | 55.1% | 383 |
| Unattributed (no product code) | ($4,170) | $4,796 | ($8,966) | not available | 0 |
Webstore net revenue against the general ledger for the DTC and Marketplace segments, with every identified reconciling item listed and the remainder stated plainly.
Webstore net (source)
GL net — DTC + Marketplace
Variance
Variance %
| Reconciling item | Amount |
|---|---|
| Web sales of products with no ERP product code (mid-month launches) -- present in the webstore, impossible in the GL | $424 |
| Manual revenue adjustments applied to DTC / Marketplace in the GL and unknown to the webstore | ($515) |
Unexplained residual
This amount is the part of the variance that no reconciling item explains. It has not been written off, allocated or smoothed — it is carried here, in full, until someone accounts for it.
Everything a person changed by hand during this close, with who applied it and why.
| Date | Description | Segment | GL account | Amount | Applied by | Note |
|---|---|---|---|---|---|---|
| 2026-07-21 | Freight allocation correction - wholesale | Wholesale | 50500 | ($430.00) | K. Novak | segment corrected from 'Wholesle' (match 94%) -- fix the workbook, the source file is unchanged |
| 2026-07-24 | Correct duplicate merchant fee batch | Marketplace | 51000 | ($340.55) | K. Novak | entered as a credit (trailing CR) -> negative |
| 2026-07-24 | True-up June returns booked in error to July | DTC | 42000 | $610.00 | R. Osei | date read from '24-Jul-2026' |
| 2026-07-25 | Q3 co-op rebate accrual | Wholesale | 40000 | ($2,400.00) | K. Novak | date read from 'Jul 25 2026' |
| 2026-07-25 | Retail partner chargeback offset | Retail | 40000 | ($275.00) | K. Novak | date read from '7/25/26' |
| 2026-07-27 | Amazon FBA storage fee true-up | Marketplace | 51000 | $189.20 | T. Brooks | date read from 'Jul 27 2026' |
| 2026-07-28 | Discount code system error credit | DTC | 41000 | ($95.00) | M. Chen | date read from '28-Jul-2026' |
| 2026-07-28 | Q2 co-op marketing accrual reversal | Wholesale | 40000 | $500.00 | T. Brooks | date read from '7/28/26' |
| 2026-07-30 | Reclass inbound freight to COGS | DTC | 50500 | ($1,180.00) | T. Brooks | date read from '7/30/26' |
Every row the pipeline could not process cleanly. Nothing here was dropped silently; each entry states what it affects and what to do about it.
identical order_id+sku+timestamp lines from an export retry (some re-formatted, e.g. '$5.79' for '5.79')
Action: Export retry produced identical order_id+sku rows. Confirm with the webstore admin that the retry was a re-export, not a real re-order.
live web SKUs with no row in the SKU MAP tab: nb1004-wht, nb1007-sm, nb1010-md, nb2101-wht, nb2102-md, nb2103-gry, nb2104-red
Action: Add these SKUs to the SKU MAP tab. Revenue is reported under a fallback or Unmapped line until they are added.
matched by the deterministic stem normaliser, NOT by the map: nb1004-wht -> NB-1004, nb1007-sm -> NB-1007, nb1010-md -> NB-1010 -- confirm each one
Action: Confirm each fallback match is correct, then add the pair to the SKU MAP so the next close matches on the map alone.
SKU MAP rows for SKUs absent from the order export: nb0900-blk, nb0901-wht
Action: Retire these rows from the SKU MAP tab at the next housekeeping pass.
web SKUs with no ERP product code at all (mid-month launches): nb2101-wht, nb2102-md, nb2103-gry, nb2104-red -- product families NB2101, NB2102, NB2103, NB2104
Action: Mid-month launches not yet extended into the ERP item master. Create the ERP product codes so COGS can be attributed.
refunds dated in 2026-07 against orders placed in 2026-06 -- shown separately so they do not distort 2026-07 gross
Action: Shown as a separate line so July gross is not distorted. Confirm the returns provision covers them.
22 order line(s) whose accounting month differs from a naive UTC reading of the timestamp; 12 of them belong to 2026-07 under the -05:00 local business-date rule
Action: Timestamps near midnight on the month boundary. Period is set from the LOCAL business date; no action needed, shown for audit.
financial_status=pending across the whole export
Action: financial_status=pending is not yet revenue. They will fall into the month they settle.
Doc Type PARK -- parked/unposted documents inside the 2026-07 date range, excluded from the close; the amount shown is the net value of the excluded postings across all accounts
Action: Doc Type PARK is unposted. Ask the GL team to post or delete them before the next close.
Doc Type ACCR posted outside 2026-07 and pulled into it per the close calendar
Action: Doc Type ACCR posted in early August relates to July activity and is included in July per the close calendar.
cost centre CC-999 has no entry in the CHANNEL MAP; postings are reported under 'Unassigned', never dropped
Action: CC-999 and friends are unassigned. Bucketed to Unassigned, never dropped. Assign a reporting segment in the CHANNEL MAP tab.
GL postings with no Product Code (overhead, freight and fee postings); reported under 'Unattributed (no product code)'
Action: Overhead and freight postings cannot be attributed to a product line. Reported under Unattributed.
ERP product codes posted in the GL with no product line in the SKU MAP: NB-1004
Action: Add the product code to the SKU MAP so it lands in a product line. The amount is the total value of every posting against these codes this period -- revenue and cost together -- not just their share of net revenue.
Qty is empty on these postings; read as 0 and counted here instead of passing the substitution through silently. 1 of 127 blank cell(s) are on 40000 product-revenue postings and are silently understating Units by their true quantity -- this is not hypothetical, it is happening in this run.
Action: The cell was genuinely empty and is read as 0 units, counted here so the substitution is visible rather than silent. Check the detail: a blank on a 40000 product-revenue posting understates Units by that row's true quantity; on any other account it does not affect a reported figure.
125 row(s) carry stray whitespace or non-standard case on GL Account Desc; joined on the GL account code instead. 40000: 'Product Revenue' | 'product revenue'; 41000: 'Sales Discounts' | 'sales discounts'; 42000: 'Returns & Allowances' | 'returns & allowances'; 50000: 'COGS' | 'cogs'; 50500: 'Inbound Freight' | 'inbound freight'; 51000: 'Merchant Fees' | 'merchant fees'
Action: Same GL account carries several spellings/casings in the export. Canonicalised for reporting; tidy the ERP master data.
1 blank row(s) inside the MANUAL ADJUSTMENTS section
Action: Cosmetic spacer rows in the workbook. No action.
row 53: Date='TOTAL' Amount='=SUM(E2:E10)' -- footer row, excluded from the adjustments total
Action: The workbook carries a =SUM() footer row. It is never added to the adjustments total. Remove it from the export if possible.
2026-07-24 'Correct duplicate merchant fee batch' entered as '340.55 CR'
Action: Trailing CR read as a credit (negative). Standardise on a signed number in the workbook.
'Wholesle' -> 'Wholesale' (94% match) on 2026-07-21
Action: Corrected by closest match and reported. Fix the spelling in the workbook -- the correction is not applied to the source file.
webstore $49,855.50 vs GL $48,348.12 across DTC + Marketplace; 2 known reconciling item(s) account for -$90.55; note 25 prior-period return(s) worth -$2,728.98 sit inside the webstore figure
Action: The residual after known reconciling items. Investigate before the books are closed.