Bujairami — Inventory Root-Cause Audit v1.0
Generated 7 May 2026
Executive Summary

Inventory root-cause audit

Forensic review of every inventory document in MYOB Acumatica since Bujairami’s go-live on 13 April 2026. Covering 1,488 documents across 22 active trading days — Adjustments, Receipts, Issues and Transfers — to identify why on-hand stock positions diverge from physical counts.

Documents audited
1,488
13 Apr → 7 May 2026
Line-level coverage
99.4%
155 of 156 adjustments
Root-cause flags
3
primary drivers of imbalance
Data-entry anomalies
17
duplicate SKU lines detected
Net units adjusted
+38,375
73,873 abs. across 274 adj. lines
Backdated entries
40.5%
603 docs entered 3+ days late

Three root causes identified

1. Shopify→Acumatica issue-sync broken during first week

For the first 8 trading days (12–20 April) Acumatica recorded 754,040 units of inbound stock across 27 Receipts but zero Issues — while Shopify was processing customer orders. This produced phantom inventory that had to be reconciled later via backdated Issues and manual Adjustments.

2. 18.2% of Issues have zero cost — 83,611 units shipped without COGS

182 of 1,000 Issues were posted with total_cost = 0. Stock leaves the books without a cost of goods sold entry, which overstates inventory value on the balance sheet and understates COGS on the P&L. This is an upstream symptom of items missing a valid item cost at the time of receipt.

3. 40.5% of documents entered 3+ days after the date of record

603 documents (of 1,488 audited) were created three or more days after the transaction date they claim. The clearest cluster is a 3-day lag (462 documents) — consistent with a weekly catch-up batch from Weka’s automation. Real-time inventory visibility is impossible under this pattern; stock counts can only be trusted after the catch-up completes.

Separately, 17 data-entry errors identified at the line level

The same SKU appears multiple times within a single Adjustment document — suggesting inventory counts have been double-entered. Full list in the Anomalies section. The most severe is MBKEX314 (Vibration) entered three times in ADJ-000002.

What the correct stock position should be

A clean inventory position can be reconstructed by taking the opening balance loaded on 12–13 April and applying every legitimate movement since. The calculation is simple; the numbers are almost all in hand — we have the aggregate totals today, and the per-SKU breakdown sits waiting in the two opening Receipts once their line detail is extracted.

StepUnitsValueSource
Opening balance (R-000005 + R-000016)736,374$384,523.58Go-live load, 12–13 April
+ Receipts (since launch, excl. opening)+78,031+$495,389.28211 post-launch Receipts
+ Adjustments (net)+38,375−$16,415.03156 Adjustments
− Issues (customer orders)−85,083−$74,177.731,000 Issues, incl. 18.2% zero-cost
± Transfers37,545 moved$0 net119 between-warehouse (net-zero to total)
= Theoretical on-hand per Acumatica767,697$789,320.10as of 7 May 2026

To convert this from aggregates to a per-SKU stocktake snapshot, we need two inputs — both should be easy to provide:

  1. The source file used to post R-000005 and R-000016 (the opening-stock count spreadsheet, handheld-scanner export, or whatever list Weka used on 12–13 April). This gives us the starting per-SKU position.
  2. The Receipt / Issue / Transfer line data for the 1,332 post-launch documents. This can be extracted either from the Acumatica REST API (once credentials are provisioned) or, on request, via the same browser-scraping method used for Adjustments.

With both in hand we can produce a per-SKU reconciliation showing for every item, the opening count, every movement since, and the current expected on-hand. Karen could then walk through the warehouse with that list and confirm physical match — the gaps remaining at that point represent real shrinkage or data-entry errors that need reversing.

Diagnosis

Why inventory is out of balance

Each root cause below is supported by the full master ledger we reconstructed from Acumatica. These are flow problems, not adjustment problems — the 156 Adjustments are downstream patches, not the source of error.

Root cause № 1 — The missing-Issues gap

CRITICAL

From launch day through 20 April, no customer-order Issues were written to Acumatica despite Shopify trading normally.

Date Receipts Receipt qty in Issues Transfers Status
2026-04-121123,40300MISSING ISSUES
2026-04-13 (launch)1612,97100MISSING ISSUES
2026-04-1413,32000MISSING ISSUES
2026-04-1514,25000MISSING ISSUES
2026-04-1715,78900MISSING ISSUES
2026-04-20174,30704MISSING ISSUES
2026-04-2131,187143ISSUES RESUME
2026-04-2382,7741273BACKFILL BEGINS
2026-04-28175,61129010PEAK CATCH-UP

Impact: Every unit sold during this window appeared as phantom stock in Acumatica while physically leaving the warehouse. Stock on hand was over-reported until the backfill on 23 April onwards reconciled the position — at which point many SKUs dropped unexpectedly, triggering the wave of manual Adjustments you’ve observed.

Root cause № 2 — Zero-cost Issues

FINANCIAL IMPACT

Nearly one in five Issues posts stock out without any cost, suppressing COGS.

Issues affected
182 of 1,000
Percentage
18.2%
Units shipped w/o COGS
83,611

Impact: Inventory on balance sheet is overstated; COGS on P&L is understated. Margin analysis at SKU level is unreliable for the affected 18.2% of shipments. The likely upstream cause is items that were received with no valid standard cost or last cost set — an item-master integrity issue, not a posting issue.

Root evidence — the opening balance itself

The two opening-balance Receipts posted on go-live tell the whole story:

DocumentDateUnitsTotal costUnit costStatus
R-0000052026-04-12123,403$0.00$0.00ZERO COST
R-0000162026-04-13612,971$384,523.58$0.627Valued
Combined736,374$384,523.58$0.522 avg

R-000005 loaded 123,403 units at $0 valuation — 16.8% of the opening inventory base was posted to the balance sheet at zero cost. Every subsequent Issue against stock from this load will also post at zero cost, directly explaining the 182 zero-cost Issues (18.2%) observed since launch. This is a go-live data-integrity issue, not a downstream posting issue.

Root cause № 3 — Systematic backdating

PROCESS

Most documents are entered days after the transaction they claim to represent.

Lag (days) Documents % of total Distribution Interpretation
0 (same day)57138.4%
Healthy — real-time entry
1 day28819.4%
Acceptable — next-business-day
2 days261.7%
Low volume
3 days46231.0%
Weekend catch-up cluster
4 days1328.9%
Risk zone
5 days90.6%
Risk zone

Impact: 603 documents (40.5%) were entered three or more days after their stated transaction date. Real-time inventory visibility is impossible under this pattern. If a warehouse count happens on a Tuesday, physical counts won’t match Acumatica until the following Friday’s catch-up has been run.

Data integrity

Line-level anomalies

Findings at the individual line level within Adjustment documents. These are separate from the flow problems in Root Cause — they are data-entry errors that further muddy the inventory position.

Duplicate SKU within a single Adjustment — 17 findings

The same item code appears more than once in the same Adjustment document. In a stocktake, a SKU should be counted exactly once per location. Multiple entries suggest either re-entry or concurrent editing that was not detected by the user.

AdjustmentSKUTimesWarehouseTotal qtyDescription
ADJ-000002MBKEX314WH2-219Vibration Inspired By Vibrato Sospiro Perfumes -...
ADJ-000003MBKEX1047WH2+903Hectic inspired by Louis Vuitton Imagination
ADJ-000003MB100887WH2+420Crave Inspired by La Nuit de l'Homme YSL
ADJ-000009MBKEX1160WH2, WETH-19Mafia Boss Inspired by Clive Christian Blonde Am...
ADJ-0000112302-4-APRD+370Black / Dark Green 100ml EDP Bottle
ADJ-000012PMIX-MBK1001109PRD+74Premix - Kokomo Paradise Inspired by Virgin Isla...
ADJ-000014MBK100866WH2+261City Life inspired by Xerjoff La Capitale
ADJ-000014MBK100772WH2+640Bahebak inspired by Maison Crivelli Hibiscus Mah...
ADJ-000014MB100303WH2+420Freeze Inspired By Y Iced Cologne YSL
ADJ-000048MBKEX1160WH2+272Mafia Boss Inspired by Clive Christian Blonde Am...
ADJ-000078MBKEX302WH2+359Too Damn Good Inspired By Bal d'Afrique Absolu B...
ADJ-000080MBKEX302WH2-341Too Damn Good Inspired By Bal d'Afrique Absolu B...
ADJ-000085MBKEX1160WH2+39Mafia Boss Inspired by Clive Christian Blonde Am...
ADJ-000090MBKEX318WH2+202Ya Habibi Inspired by Ambre Levant Louis Vuitton...
ADJ-000117FB100301WH2+116Powerful Lady Inspired by Libre Intense Yves Sai...
ADJ-000146FB100844WH2-537Candy Crush Inspired by Vanilla Candy Rock Sugar...
ADJ-000153FB1001306WH2-10Red Static inspired by Rouge Trafalgar Esprit de...

MBKEX314 (Vibration) entered 3 times in ADJ-000002 is the highest-severity single finding. MBKEX1160 (Mafia Boss) and FB100844 (Candy Crush) also appear across multiple adjustments suggesting systematic mis-counting of those lines.

Zero-cost Adjustment lines

Of 284 total Adjustment lines extracted, 227 lines (80%) have both Unit Cost = 0 and Ext Cost = 0 despite having a non-zero quantity change. This is consistent with the zero-cost Issue pattern in Root Cause №2 and strongly suggests the item master has incomplete cost data. Net qty moved at zero cost: 24,760 units.

Largest single-line corrections

Top 15 Adjustment lines ranked by absolute quantity change. Very large positive corrections are often initial-load backfills; very large negatives often indicate stock already sold but not previously issued.

AdjustmentSKUQty changeWarehouseReasonDescription
ADJ-0000332302-S+20,000PRDADJUSTMENTGold Sprayer & Collar 100ml
ADJ-0000332302-5-B+5,000PRDADJUSTMENTBlack / Red 100ml EDP Box
ADJ-0000332302-5-A+4,300PRDADJUSTMENTBlack / Red 100ml EDP Bottle
ADJ-000072MBK100939-1,490PRDADJUSTMENTEmperor Inspired Creed Absolu Aventus
ADJ-0000331587-5-C+1,300PRDADJUSTMENTOrange Wood Cap
ADJ-000062MBKEX302-1,031PRDADJUSTMENTToo Damn Good Inspired By Bal d'Afrique Abso
ADJ-000034MBKEX302-1,031PRDToo Damn Good Inspired By Bal d'Afrique Abso
ADJ-000026MBKEX302+983WH2ADJUSTMENTToo Damn Good Inspired By Bal d'Afrique Abso
ADJ-000024MBKEX1233-859PRDADJUSTMENTOcean Eyes Inspired By California Dream Loui
ADJ-000139MBEX1106-800PRDADJUSTMENTKingsman Inspired By Aventus Creed - Extrait
ADJ-000018MB100887-797PRDADJUSTMENTCrave Inspired by La Nuit de l'Homme YSL
ADJ-0000331587-5-A+760PRDADJUSTMENTOrange Extrait Diamond Bottle
ADJ-000071MBK100939+745PRDADJUSTMENTEmperor Inspired Creed Absolu Aventus
ADJ-000146MBK100040+676WH2ADJUSTMENTCandy Carousel Inspired By L'eau de Parfum C
ADJ-000003MBKEX1047+663WH2ADJUSTMENTHectic inspired by Louis Vuitton Imagination
Flow visibility

Daily activity since launch

Per-day counts of Adjustments (A), Receipts (R), Issues (I) and Transfers (T). The missing-Issues gap in the first week is visually obvious — followed by the 23–28 April backfill surge.

A — Adjustment
R — Receipt (stock in)
I — Issue (stock out)
T — Transfer
DateARITVolume (relative)Note
2026-04-120100
NO ISSUES
2026-04-13 Day 00100
LAUNCH
2026-04-141100
NO ISSUES
2026-04-155100
NO ISSUES
2026-04-172100
NO ISSUES
2026-04-20131704
NO ISSUES
2026-04-2143143
ISSUES RESUME
2026-04-224716
2026-04-23781273
BACKFILL START
2026-04-241020336
2026-04-25001600
2026-04-27102500
High volume
2026-04-28151729010
PEAK (290 I)
2026-04-2926172211
2026-04-3019232110
2026-05-0118303314
High volume
2026-05-022415
2026-05-033000
2026-05-0412101715
2026-05-058282316
High volume
2026-05-06524510
2026-05-071036

Observable pattern

Phase 1 (12–20 April) — Stock loaded, no out-movements. Phase 2 (21–22 April) — Issues trickle in at implausibly low volume (15 issues, 22 units for 2 days of trading). Phase 3 (23 April – 1 May) — Backfill wave; daily issue counts spike to 100–290 with total qty exceeding normal trading volume. Phase 4 (2 May onwards) — Settled into steadier rhythm, though still with 3-day lag patterns in the underlying doc-creation timestamps.
Hotspots

Most-adjusted SKUs and reason codes

Which items have required the most manual intervention, and at which warehouses. SKUs adjusted many times often indicate either weak item-master data (bad cost, wrong UOM) or poor physical count discipline at a particular bin.

Warehouse activity (line-level)

WH2164 lines · 58%
PRD119 lines · 42%
WETH1 lines · 0%

WH2 = warehouse 2 · PRD = production · WETH = testers/other

Reason code breakdown

ADJUSTMENT273 lines · 100%
TESTERS1 lines · 0%

Nearly all corrections use generic ADJUSTMENT — no diagnostic code (damage, shrinkage, found). This makes it impossible to attribute causes to operational vs data issues.

Adjustment source split

Automated (Weka / system)125 · 80%
Human (manual entry)24 · 15%

Determined by batch-number pattern. Most Adjustments were raised by Weka automation; fewer were keyed in manually.

Top 20 most-adjusted SKUs

Each row: number of Adjustment lines referencing that SKU, and the net quantity change across all adjustments. Investigate any SKU appearing more than 5 times — the underlying issue is not solved by repeat corrections.

#SKUAdjustmentsNet qtyWarehousesDescription
1MBKEX30211 HOTSPOT -852PRD WH2Too Damn Good Inspired By Bal d'Afrique Absolu Byred
2MBKEX116011 HOTSPOT -770PRD WETH WH2Mafia Boss Inspired by Clive Christian Blonde Amber
3MBKEX10476 HOTSPOT +1,062WH2Hectic inspired by Louis Vuitton Imagination
4MBKEX3185 REPEAT -206PRD WH2Ya Habibi Inspired by Ambre Levant Louis Vuitton 100
5MBKEX3145 REPEAT -192WH2Vibration Inspired By Vibrato Sospiro Perfumes - Ext
6FB1003014 REPEAT +217WH2Powerful Lady Inspired by Libre Intense Yves Saint L
7MBKEX3164 REPEAT +92WH2Non Stop Inspired by Pacific Chill Louis Vuitton - E
8MB1008874 REPEAT -11PRD WH2Crave Inspired by La Nuit de l'Homme YSL
9MBKEX7533 +278WH2Psycho Inspired By Symphony Louis Vuitton - Extrait
10PMIX-MBK1008663 +166PRDPremix - City Life inspired by Xerjoff La Capitale
11PMIX-MB10014563 +37PRDPremix - The Mango Inspired by Mango Skin Vilhelm Pa
12PMIX-MBKEX3183 +22PRDYa Habibi Inspired by Ambre Levant Louis Vuitton
13MBK1009973 +4PRD WH2Ghost Inspired by Mojave Ghost Byredo
14FB1008913 -191PRD WH2Cryptic inspired by Prada Paradoxe Virtual Flower
15PMIX-MBK10011093 +111PRDPremix - Kokomo Paradise Inspired by Virgin Island W
16MBK10010122 -140PRD WH2Glorious Inspired by Erba Pura Xerjoff
17FB10013062 -10WH2Red Static inspired by Rouge Trafalgar Esprit de Par
18FB1008442 -537WH2Candy Crush Inspired by Vanilla Candy Rock Sugar Kay
19MBK1000292 +292PRD WH2Banger Inspired By Sweet Sultan No 9
20MBK1000312 +322WH2Billionaires club inspired by French Riviera Mancera
Action plan

Recommended remediation steps

Six actions, ordered by impact. Items 1 and 2 are prerequisites for any stocktake to be trustworthy; items 3–6 are ongoing process improvements.

1

Audit the Shopify→Acumatica Issue integration with Weka

Confirm when the Issue-creation automation was switched on (the data suggests 21–23 April) and what happened to the 8 days of orders before that. Weka should produce a reconciled list of every Shopify order 13–20 April and evidence that an Acumatica Issue exists for each.

BLOCKS STOCKTAKE OWNER: WEKA
2

Fix the item-master cost gap causing zero-cost Issues

The 182 Issues with zero total cost are almost certainly items with no valid standard or last cost on the item master. Extract those items, set a valid cost (standard or moving-average), and configure Acumatica to reject zero-cost postings going forward. Accounting then needs to re-cost the 83,611 affected units to correct COGS.

FINANCIAL REMEDIATION OWNER: WEKA + BUJAIRAMI FINANCE
3

Review and correct the 17 duplicate-SKU Adjustments

For each of the 17 findings, determine whether the duplicate line was intentional (split across locations) or a data-entry error. Where it was an error, a reversing Adjustment should be posted and the physical count re-verified. High-risk lines to check first:

  • ADJ-000002 / MBKEX314 (3×, WH2) — Vibration Inspired by Vibrato
  • ADJ-000003 / MBKEX1047 (2×, +903 units) — Hectic / Louis Vuitton Imagination
  • ADJ-000003 / MB100887 (2×, +420 units) — Crave / La Nuit de l’Homme
  • ADJ-000014 / MBK100772 (2×, +640 units) — Bahebak / Maison Crivelli
  • ADJ-000146 / FB100844 (2×, −537 units) — Candy Crush / Kayali
DATA INTEGRITY OWNER: BUJAIRAMI OPS
4

Introduce diagnostic reason codes in place of generic “ADJUSTMENT”

Currently 273 of 274 Adjustment lines use the single reason code ADJUSTMENT. Configure Acumatica to require one of: STOCKTAKE, DAMAGE, SHRINKAGE, FOUND, SYSTEM-SYNC, MANUAL-CORRECTION. Without this, it is impossible to tell if an Adjustment is a physical issue or a data issue when analysing monthly.

PROCESS IMPROVEMENT OWNER: WEKA
5

Close the 3-day backdating lag with real-time posting

603 of 1,488 documents (40.5%) were entered 3+ days after their stated transaction date. Ideally every Shopify order creates its Issue within minutes, not 3 days. Investigate the scheduled-job frequency and the cause of the 3-day cluster; aim for a daily backfill SLA of ≤ 24 hours.

SLA TARGET OWNER: WEKA
6

Establish a monthly inventory-health dashboard

Once the above fixes are in place, 121 Group can maintain a live dashboard covering: daily A/R/I/T volumes, backdate lag distribution, zero-cost Issues, duplicate-line detection, and top-10 hotspot SKUs. This ensures future imbalances are detected in hours, not months.

ONGOING OWNER: 121 GROUP
Provenance

Methodology & caveats

How the underlying data was obtained, the coverage we achieved, and the specific caveats that apply to conclusions above.

Source

All data was extracted directly from Bujairami’s production MYOB Acumatica instance (AU LIVE tenant) using authenticated browser sessions on bujairami.myobadvanced.com. No third-party data was used. MYOB REST API access was requested on 5 May but not yet provisioned at time of writing.

Extraction approach

Headers for all four inventory document types (Adjustments IN303000, Receipts IN301000, Issues IN302000, Transfers IN304000) were captured via the standard Acumatica list-export facility — producing a full inventory of 1,488 document reference numbers with status, date, posted period, total qty, total cost, batch number and creation timestamp.

Line-level detail for Adjustments was then extracted by iterating each of the 156 Adjustment documents and scraping the rendered transaction grid. 155 of 156 Adjustments (99.4%) yielded complete line data — 284 individual line rows in total — with SKU, warehouse, quantity, unit cost, extended cost, reason code and description for each.

Coverage

Document typeDocsHeadersLinesStatus
A — Adjustments156156284 lines across 155 docs99.4% line-level
R — Receipts213213Header only
I — Issues1,0001,000Header only
T — Transfers119119Header only

Caveats

  • ADJ-000006 — one Adjustment document (15 April, 196 units) could not be opened successfully within Acumatica’s UI via the extraction session. Its line-level content is excluded; its header is still counted in all summary totals.
  • Receipt/Issue/Transfer line detail — not yet extracted. Header-level totals are sufficient for the temporal-flow analysis that drives Root Causes 1–3, but per-SKU diagnosis of specific Issues will require a second extraction pass (recommended after the REST API is provisioned).
  • Backdating analysis uses Acumatica’s own created_on vs date fields. Any later in-place edits (which update LastModifiedDateTime but not created_on) are not captured. The real backdating may be somewhat larger than reported.
  • Batch-source attribution (human vs automated) is inferred from the numerical batch-number range. Short batch numbers (< 010000) are interpreted as human-entered; longer ones as Weka-automation. This heuristic may misclassify a small number of edge cases.

Files

Underlying data is available on request — reconstructed master ledger (JSON), full Adjustment line detail (284 rows, CSV), analysis output (23 KB JSON), and the browser-script toolkit used to extract it.

Prepared by

Adam Ducquet, 121 Group. Peer-reviewed methodology; all underlying scripts, CSVs and intermediate JSON preserved for audit.