DC

Insights

15 findings, ordered by commercial weightEvidence from the live BC tenant, 11 Aug 2026
Replaces: the audit deck nobody opens twice, and the spreadsheets built around it
4,500item locations priced below cost or with no cost at allRead the finding
1.5%of the forecasting engine's buying advice reaches an orderRead the finding
41.5average days late across 400 released ordersRead the finding
0 of 5approval workflows running, since June 2025Read the finding
Ask the findingsOne question, answered from the figures on this page and nowhere else.15 findings, all cited
The answer is built only from the figures above, each of which names the file and row it came from. Where the page does not hold an answer it says so rather than reaching for one, and no figure is ever estimated, extrapolated or rounded for effect.

What the evidence says is going wrong, ordered by what it costs, each with the action that closes it. Every number names the file it came from.

07ControlHigh impact

Approvals, credit control and supplier payments have quietly left the system. The controls are still written down, they have simply not run for over a year.

5approval workflows defined, none enabled
Jun 2025notification dispatcher went into Error
Jun 2025payment journal went stale
Neverreminders issued, statements job on hold
Why it matters

Credit control run from somebody's inbox means no audit trail, no ageing anyone can rely on and cash collected late.

What to do

Rebuild the ladder where the work already is, created and issued as different states. Xero keeps the ledger, the platform runs the chase.

Why it ranks 07

Ranked seventh: cash collected late, no audit trail, and it has held for a year.

Source · msc-bc-audit/pain-points-and-opportunities.csv rows PP-021 (dispatcher in Error since 12/06/2025, approvals stall silently for over a year) and PP-013 (payment journal stale since 24/06/2025); workflows/07-credit-control.md line 6 (reminders created, issued reminders never generated); 02-environment-and-modules.md line 44 (5 workflows defined, none enabled).
10ControlHigh impact

Nothing keeps the effective price for a customer and a product on a given day, so no two runs can be compared and no finding can be closed.

0effective price snapshots kept per run
1line of console output is the whole audit trail
5stages in the bulk change lifecycle, apply not yet wired
reviewedAtthe only lifecycle a finding currently has
The findings layer, as the schema declares it
Tables declared for findings 3Tables anything writes to 0
PriceComparisonResult, CrossCustomerDiscrepancy and AiRecommendationScore all exist in the schema. The reports compute in memory instead, so nothing survives the request.
Why it matters

A price question asked in a meeting cannot be answered from a report that was thrown away when the page closed. This is the piece that turns detection into governance.

What to do

Store the effective price per run, give every finding a lifecycle from open to resolved with a name against it, and persist the audit trail. The platform does all three as standard, so the rules already written keep their value.

Why it ranks 10

Ranked tenth: it is why every pricing finding above has to be found again from scratch.

Source · msc-data-project docs/EVOLUTION-TO-PRICING-AUDITOR-PLAN.md section 2 names the missing effective_prices_snapshot as the "Primary structural gap for reproducible detection SQL", and section 1 records "Formal finding lifecycle (open to resolved, audit)" as a gap with "PriceComparisonResult has reviewedAt only". prisma/schema.prisma declares PriceComparisonResult, CrossCustomerDiscrepancy and AiRecommendationScore; nothing in the repository writes to any of them. lib/audit.ts recordAuditEvent is a console.log with the comment "Placeholder for persistence sink". pages/reports/price-conflicts.tsx states "BC apply is not wired yet".
15ControlScope, not a defect

The logic that makes MSC different is not in Business Central. It sits in bespoke extensions bolted around it, and all of it has readable source in the tenant.

108apps in the extension estate
18bespoke, 15 Personify and 3 ad hoc
15reseller brands needing their own layout
28enabled users, 21 named staff
The bespoke layer, by publisher
Published by Personify 15Ad hoc 3
All bespoke apps have AL source in the tenant, so the rules can be read back precisely.
Why it matters

Every rule is readable, so the replacement is bounded and quotable. The branded layouts are the tell: each new reseller today means another Word template.

What to do

Scope the replacement against the extension register, not Business Central's feature list. Manufacturing, service, jobs, fixed assets and advanced WMS are demonstrably unused. Branding is a setting, not a layout file.

Why it ranks 15

Last because it is not a defect. It is what makes the replacement quotable.

Source · msc-bc-audit/02-environment-and-modules.md lines 22 to 28 (108 apps, 15 Personify PTEs, 3 default publisher PTEs, 28 enabled users of which 21 named staff); 01-executive-summary.md lines 19 to 33; reports-and-documents.csv row 16 (15 white label delivery note layouts named); pain-points-and-opportunities.csv row PP-028.
What it adds up toIf you read one thing on this page
Stop the leak

A margin floor checked at the point of sale. Highest value change on this page, and it is a rule, not a rebuild.

Show the price

Name the winning level on every line. Thirteen levels of precedence stop being a liability and start being the asset they should be.

Buy what the engine says

Moving stock MSC already own between two sites they run is the cheapest service fix available. Today none of it happens.

Bill sooner, prove control

Late orders, uncounted quotes and stalled approvals all fix the same way: the work goes back on a screen with a name against it.

Where these figures come fromIncluding how the order was decided

Two sources, and every card names its own. The pricing work already built at gitlab.personify.tech/msc/msc-data-project, read directly, file and line quoted. And the read only audit of the live MSUPPLY LIVE Business Central tenant of 11 Aug 2026, the Netstock UI audit of the same day, the AL source read from the tenant's own extensions, and Product Scope chapter 14.

The data project publishes rules, not results. Its findings tables are declared and never written, its seed creates nothing and every count it shows is computed live and discarded, so what it contributes here is its thresholds, its comparison rules and its own record of what is still to build. Its mock fixtures are never shown as findings.

Two caveats travel with the audit numbers and both stand on their cards. The 999 plus open quotes is a display ceiling, so a floor rather than a count. The 400 delayed orders was recorded at medium confidence. The 650,000 price lines is the data project's own working figure for the size of the job, written to size a page cap, not a verified count.

The order is a commercial judgement, not a measurement. Each finding states the basis for its placing, built only from the figures cited on it. No pound value is attached to a finding the source did not price.