A blocking failure stops publication: no marts are written and nothing downstream updates. Warnings are recorded and do not block — they mark a known gap rather than a broken load.
| Test | Subject | Assertion | Result | Rows |
|---|---|---|---|---|
| T010 | kravers.orders | PWD-registered customers are VAT-exempt | warn | 401 |
| T025 | kravers.payment | Processor payments tie to an order | warn | 1,734 |
| T035 | kravers.market_requirement | Requirement tables carry no exact duplicate rows | warn | 1,081 |
| T024 | kravers.payment | Payment method is a value, not an unevaluated spreadsheet formula | pass | 0 |
| T036 | kravers.franchise_procurement | The franchise catch-all is held but not summed by any mart | pass | 0 |
| T011 | platform.person | Conflicted identities are flagged, never silently merged | pass | 0 |
| T012 | kravers.mc_batch | A package sale must carry cash received | pass | 0 |
| T001 | kravers.orders | One row per order_ref per iteration | pass | 0 |
| T002 | kravers.orders | Exactly one latest iteration per order_ref | pass | 0 |
| T003 | kravers.mc_batch | Credit rate must sit between 0 and 1 | pass | 0 |
| T004 | kravers.mc_batch | php_value reconciles to qty_issued * rate_php (php_value is authoritative) | pass | 0 |
| T005 | kravers.mc_event | Every credit event belongs to a known batch | pass | 0 |
| T006 | kravers.mc_event | Consumption never exceeds the batch issued | pass | 0 |
| T007 | kravers.order_item | Every order item belongs to a known order_date | pass | 0 |
| T008 | kravers.orders | Every order carries a source system and batch | pass | 0 |
| T009 | kravers.orders | VAT is not charged on credit-settled orders | pass | 0 |
| T013 | meta.table_doc | Every core table declares its grain | pass | 0 |
| T014 | kravers.orders | Channel is always stated, including when it is unknown | pass | 0 |
| T015 | kravers.order_item | Every order item belongs to a known order | pass | 0 |
| T016 | kravers.orders | Ex-VAT plus VAT reconciles to cash received | pass | 0 |
| T017 | kravers.order_item | Line value equals quantity times menu price wherever a price exists | pass | 0 |
| T018 | kravers.orders | No sample data ever reaches a transaction table | pass | 0 |
| T019 | kravers.ingredient_cost | Every ingredient cost states its basis, and sample costs are never invoiced | pass | 0 |
| T020 | kravers.recipe_line | Where recipe yield is stated it is a fraction above zero, and loss is never negative | pass | 0 |
| T020b | kravers.recipe_line | Invented sample recipes still declare a yield — a blank there is an omission, not a gap | pass | 0 |
| T021 | meta.ingest_batch | Every landed batch states its row count, path and checksum | pass | 0 |
| T022 | meta.source_contract | Every landed batch has a registered source contract | pass | 0 |
| T023 | meta.source_contract | Every contract declares at least one column | pass | 0 |
| T026 | meta.metric_binding | Every binding points at a column that exists and a metric that is defined | pass | 0 |
| T026b | meta.source_contract | Every contract declares a grain, a natural key and its required columns | pass | 0 |
| T027 | mart | Every published measure is bound to a metric definition | pass | 0 |
| T030 | kravers.orders_cx | Every core order is present in the consolidated export once references are normalised | pass | 0 |
| T031 | kravers.mc_event | Core meal-credit coverage is not narrowed to the export's Krave Daily scope | pass | 0 |
| T032 | kravers.product_xref | A product crosswalk marked unambiguous resolves to exactly one product on each side | pass | 0 |
| T033 | kravers.recipe_line | Every recipe line loaded from the export points at a real product and a real ingredient | pass | 0 |
| T034 | kravers.ops_event | Production ops events carry a resolvable database and timestamp | pass | 0 |
| T040 | mart.kravers_sales_daily | One brand and one day are fed by exactly one source, never both | pass | 0 |
| T041 | mart.kravers_sales_daily | Every core reportable brand-day survives into the consolidated series | pass | 0 |
| T042 | mart.kravers_product_performance | Product performance carries one row per product name | pass | 0 |
| T043 | mart.kravers_discount_basis | Every published discount basis states both its numerator and its denominator | pass | 0 |
| T044 | kravers.company | One row per company, and every company states a name | pass | 0 |
| T045 | kravers.company_member | Every membership points at a company that exists | pass | 0 |
| T046 | kravers.order_company | Every company-attributed order points at a company that exists | pass | 0 |
| T047 | kravers.company | Every company core already knew survives the merge | pass | 0 |
| T048 | stg.orders_cx_reportable | The reportable export filter removes only control-account and non-paid orders | pass | 0 |
| T050 | mart.kravers_dish_cost | No food-cost percentage is published for a partially costed dish | pass | 0 |
| T051 | kravers.ingredient_cost | Costs sourced from the production database are standard, never invoiced, and above zero | pass | 0 |
| T052 | kravers.ingredient_cost | Every ingredient cost points at an ingredient that exists | pass | 0 |
| T053 | mart.kravers_sales_daily | A brand-day is fed by exactly one tier, never two | pass | 0 |
| T054 | mart.kravers_dish_feedback | No dish rating is published on fewer than three reviews | pass | 0 |
Every limit below is stated, not discovered. A figure drawn from a row in this table describes a subset or rests on an inference, and should be labelled as one wherever it is shown.
| Limit | Affected | Share | What it costs |
|---|---|---|---|
| Orders with no business unit | 32,640 of 32,640 | 100% | PC3 cannot be measured per unit. On a --sample build every order is attributed to KV-MAIN — see CONF_BU_SAMPLED. |
| Customers not resolved to a person | 4,231 of 4,231 | 100% | No cohorts, no lifetime value, no cross-brand or cross-business view. |
| Processor payments not tied to an order | 1,734 of 21,188 | 8% | Was 21,188 before the values-only re-extraction. The residue is a real reconciliation gap. |
| Credit batches with no recorded actor | 3,213 of 3,213 | 100% | The credit audit console runs but cannot answer 'who'. |
| Ingredient costs that are estimated | 0 | 0% | Every cost figure on a --sample build is invented. Actual COGS has no source until the production dumps land. |
| Purchase lines held | 0 | 0% | Zero means actual cost variance is not computable at all. |
Reportable orders per month on the cash-date basis. The amber portion is orders where no cash was received — a share that climbs sharply through the closing months, which reads as manual collection tailing off rather than as trading.
Every published measure is bound to a written definition. T027 blocks the build if a mart gains a measure column that nobody has defined, so this figure cannot silently fall behind.
A contract declares what a source should carry. Landing checks it before writing, so a renamed or vanished column stops the load. Grain, natural key and required columns are blank where they were registered from an observed snapshot — a machine can see what arrived, it cannot say what it means.
| System | Table | Columns | Not yet declared |
|---|---|---|---|
| consolidated_export | bridge_meal_ingredient | 13 | complete |
| consolidated_export | dim_brand | 4 | complete |
| consolidated_export | dim_customer | 7 | complete |
| consolidated_export | dim_date | 7 | complete |
| consolidated_export | dim_ingredient | 9 | complete |
| consolidated_export | dim_item | 9 | complete |
| consolidated_export | fact_credit_event | 11 | complete |
| consolidated_export | fact_delivery_line | 25 | complete |
| consolidated_export | fact_delivery_schedule | 10 | complete |
| consolidated_export | fact_franchise_prep | 14 | complete |
| consolidated_export | fact_franchise_procurement | 12 | complete |
| consolidated_export | fact_inventory | 6 | complete |
| consolidated_export | fact_item_sold | 11 | complete |
| consolidated_export | fact_market_requirement | 10 | complete |
| consolidated_export | fact_ops_event | 7 | complete |
| consolidated_export | fact_order | 15 | complete |
| consolidated_export | fact_payment | 10 | complete |
| consolidated_export | fact_payment_event | 6 | complete |
| consolidated_export | fact_prep_requirement | 14 | complete |
| daily_feed | dd_daily_sales | 21 | complete |
| daily_feed | dd_delivery_report | 16 | complete |
| daily_feed | dd_order_reviews | 71 | complete |
| daily_feed | dd_sales_by_delivery_date | 22 | complete |
| daily_feed | dd_sales_by_order_date | 20 | complete |
| daily_feed | paymongo_payment_details | 9 | complete |
| daily_feed | paymongo_payments | 39 | complete |
| daily_feed | paymongo_payouts | 24 | complete |
| daily_feed | paymongo_webhook_events | 7 | complete |
| daily_feed | sales_by_delivery_date | 23 | complete |
| daily_feed | sales_by_order_date | 21 | complete |
| daily_feed | tspc_all_meal_orders | 32 | complete |
| daily_feed | tspc_all_orders | 15 | complete |
| daily_feed | tspc_gift_voucher_orders | 9 | complete |
| daily_feed | tspc_meal_credit_orders | 10 | complete |
| kd_ops_db | complete_meal_ingredients | 19 | complete |
| kd_ops_db | complete_meals | 19 | complete |
| kd_ops_db | ingredient_macros | 17 | complete |
| kd_weekly_db | credit_packages | 11 | complete |
| kd_weekly_db | users | 20 | complete |
| ledger_workbook | checker_by_tx | 8 | complete |
| ledger_workbook | consolidation_all | 45 | complete |
| ledger_workbook | dd_by_order_date | 36 | complete |
| ledger_workbook | kd_all_orders | 21 | complete |
| ledger_workbook | newsite_all_orders | 19 | complete |
| ledger_workbook | paymongo_report | 48 | complete |
| ledger_workbook | tspc_all_meals | 39 | complete |
| ledger_workbook | tspc_all_orders | 21 | complete |
| ledger_workbook | tspc_dd_daily_by_order_date | 26 | complete |
| ledger_workbook | tspc_meal_credits_giftcard | 13 | complete |
| ops_workbook | consumption | 6 | complete |
| ops_workbook | daily_usage | 3 | complete |
| ops_workbook | expense_detail | 3 | complete |
| ops_workbook | expense_summary | 3 | complete |
| ops_workbook | pricelist | 5 | complete |
| portal_extract | ao | 18 | complete |
| portal_extract | dd | 11 | complete |
| portal_extract | mc | 8 | complete |
| portal_extract | pm | 14 | complete |
| portal_extract | pmh | 8 | complete |
Every snapshot carries its own manifest beside the Parquet, so this register survives a rebuild. Rows marked backfilled were reconstructed after the fact: the data exists, but the checksum is of the landed file rather than of what the source actually sent.
| System | Table | Snapshot | Rows | Status | SHA |
|---|---|---|---|---|---|
| consolidated_export | bridge_meal_ingredient | 2026-08-14 | 14,943 | loaded | 75523caa06 |
| consolidated_export | dim_brand | 2026-08-14 | 6 | loaded | 167324c374 |
| consolidated_export | dim_customer | 2026-08-14 | 2,713 | loaded | a1c85d7c3d |
| consolidated_export | dim_date | 2026-08-14 | 1,826 | loaded | c98da19e47 |
| consolidated_export | dim_ingredient | 2026-08-14 | 272 | loaded | e2bc51d87a |
| consolidated_export | dim_item | 2026-08-14 | 1,432 | loaded | 5c72055649 |
| consolidated_export | fact_credit_event | 2026-08-14 | 6,230 | loaded | f6617906b6 |
| consolidated_export | fact_delivery_line | 2026-08-14 | 142,379 | loaded | eeedd4d4a8 |
| consolidated_export | fact_delivery_schedule | 2026-08-14 | 38,786 | loaded | 77e5f3c816 |
| consolidated_export | fact_franchise_prep | 2026-08-14 | 68,630 | loaded | e21f36b585 |
| consolidated_export | fact_franchise_procurement | 2026-08-14 | 80,193 | loaded | 4d31cc69f7 |
| consolidated_export | fact_inventory | 2026-08-14 | 192,768 | loaded | 8db6716552 |
| consolidated_export | fact_item_sold | 2026-08-14 | 575,722 | loaded | 3ceda47e24 |
| consolidated_export | fact_market_requirement | 2026-08-14 | 310,107 | loaded | 34bc434f5e |
| consolidated_export | fact_ops_event | 2026-08-14 | 1,582,964 | loaded | 2ceae1a7b0 |
| consolidated_export | fact_order | 2026-08-14 | 45,182 | loaded | ad86cea687 |
| consolidated_export | fact_payment | 2026-08-14 | 48,073 | loaded | 3bdeef5445 |
| consolidated_export | fact_payment_event | 2026-08-14 | 73,324 | loaded | c302eaab1f |
| consolidated_export | fact_prep_requirement | 2026-08-14 | 310,186 | loaded | d25c75cc12 |
| daily_feed | dd_daily_sales | 2026-08-14 | 40 | loaded | c221377510 |
| daily_feed | dd_delivery_report | 2026-08-14 | 83 | loaded | 2915bfc7b4 |
| daily_feed | dd_order_reviews | 2026-08-14 | 26,048 | loaded | 0772792ffa |
| daily_feed | dd_sales_by_delivery_date | 2026-08-14 | 24,339 | loaded | 9c7e4c0ef6 |
| daily_feed | dd_sales_by_order_date | 2026-08-14 | 11,653 | loaded | 6824a52f0e |
| daily_feed | paymongo_payment_details | 2026-08-14 | 18,919 | loaded | 72b20fbadf |
| daily_feed | paymongo_payments | 2026-08-14 | 1,717 | loaded | 7d185c495b |
| daily_feed | paymongo_payouts | 2026-08-14 | 7 | loaded | e4ddc9f95a |
| daily_feed | paymongo_webhook_events | 2026-08-14 | 73,324 | loaded | aac91444e0 |
| daily_feed | sales_by_delivery_date | 2026-08-14 | 120,115 | loaded | 22ae8ada47 |
| daily_feed | sales_by_order_date | 2026-08-14 | 20,406 | loaded | 59f38fea10 |
| daily_feed | tspc_all_meal_orders | 2026-08-14 | 37,632 | loaded | 4abd631f94 |
| daily_feed | tspc_all_orders | 2026-08-14 | 40,545 | loaded | 0424654577 |
| daily_feed | tspc_gift_voucher_orders | 2026-08-14 | 134 | loaded | e23ec9ed88 |
| daily_feed | tspc_meal_credit_orders | 2026-08-14 | 3,125 | loaded | 5b516e05c3 |
| kd_ops_db | complete_meal_ingredients | 2026-08-14 | 14,998 | loaded | 19c1f47906 |
| kd_ops_db | complete_meals | 2026-08-14 | 535 | loaded | d4c71e5049 |
| kd_ops_db | ingredient_macros | 2026-08-14 | 701 | loaded | 9e82680e5e |
| kd_weekly_db | credit_packages | 2026-08-14 | 30 | loaded | 999f97999d |
| kd_weekly_db | users | 2026-08-14 | 1,895 | loaded | 9158159b20 |
| ledger_workbook | checker_by_tx | 2026-08-14 | 34,355 | loaded | 93acdd5df4 |
| ledger_workbook | consolidation_all | 2026-08-14 | 52,848 | loaded | f381a1ce9c |
| ledger_workbook | dd_by_order_date | 2026-08-14 | 10,297 | loaded | 96b15ae4ba |
| ledger_workbook | kd_all_orders | 2026-08-14 | 10,221 | loaded | 33b4635529 |
| ledger_workbook | newsite_all_orders | 2026-08-14 | 10,297 | loaded | b692c7abf9 |
| ledger_workbook | paymongo_report | 2026-08-14 | 21,344 | loaded | b991239b24 |
| ledger_workbook | tspc_all_meals | 2026-08-14 | 25,742 | loaded | c35348e220 |
| ledger_workbook | tspc_all_orders | 2026-08-14 | 24,891 | loaded | 63f7cb9fff |
| ledger_workbook | tspc_dd_daily_by_order_date | 2026-08-14 | 15,023 | loaded | cffa5aa7be |
| ledger_workbook | tspc_meal_credits_giftcard | 2026-08-14 | 22,883 | loaded | 6807d7a0bf |
| ledger_workbook | checker_by_tx | 2026-08-13 | 34,355 | backfilled | fc41a7af43 |
| ledger_workbook | consolidation_all | 2026-08-13 | 60,499 | backfilled | 88e05a654b |
| ledger_workbook | dd_by_order_date | 2026-08-13 | 10,297 | backfilled | c921989b2e |
| ledger_workbook | kd_all_orders | 2026-08-13 | 10,221 | backfilled | 84b8ea6ded |
| ledger_workbook | newsite_all_orders | 2026-08-13 | 10,297 | backfilled | b3fcadda1c |
| ledger_workbook | paymongo_report | 2026-08-13 | 21,344 | backfilled | e4aa60d23f |
| ledger_workbook | tspc_all_meals | 2026-08-13 | 25,742 | backfilled | 71863fa64e |
| ledger_workbook | tspc_all_orders | 2026-08-13 | 24,891 | backfilled | 7698cabd09 |
| ledger_workbook | tspc_dd_daily_by_order_date | 2026-08-13 | 22,898 | backfilled | f8caaaf8a6 |
| ledger_workbook | tspc_meal_credits_giftcard | 2026-08-13 | 22,883 | backfilled | 8ed0400551 |
| portal_extract | ao | 2026-08-13 | 32,650 | backfilled | 637db4aadd |
| portal_extract | dd | 2026-08-13 | 751 | backfilled | 500be754e4 |
| portal_extract | mc | 2026-08-13 | 37 | backfilled | c0fc423dc0 |
| portal_extract | pm | 2026-08-13 | 932 | backfilled | f07214ffa8 |
| portal_extract | pmh | 2026-08-13 | 20,278 | backfilled | e970f75477 |
| ops_workbook | consumption | 2026-07-31 | 248 | loaded | fdfb81c893 |
| ops_workbook | daily_usage | 2026-07-31 | 1,023 | loaded | 8ef1b6aad7 |
| ops_workbook | expense_detail | 2026-07-31 | 95 | loaded | 9061f3e461 |
| ops_workbook | expense_summary | 2026-07-31 | 8 | loaded | bc74e4348b |
| ops_workbook | pricelist | 2026-07-31 | 204 | loaded | 381068877b |
Where a recorded value disagrees with what the rules compute, the recorded value is truth, the rule is computed alongside it, and the difference is kept here. Resolving one means recording the decision and its date, never deleting the row.
| ID | Subject | Basis | Status | Raised |
|---|---|---|---|---|
| CONF_CHECKER_EMPTY | checker_by_tx holds 34,355 rows and zero values | Every column except order_parent_id exported as an unevaluated formula (=vlookup(...)), so the per-transaction variance against PayMongo cannot be read from it. The comparison it w | open | 2026-08-15 |
| CONF_COST_COVERAGE | Ingredient cost coverage — the gap that decides whether a dish margin is honest | The Krave Daily ops database holds 701 ingredient rows and only 248 carry a cost above zero. A dish whose recipe includes an uncosted ingredient produces a PARTIAL cost, and a part | open | 2026-08-14 |
| CONF_CX_CREDIT_SCOPE | Meal-credit coverage — this repository's raw model against the consolidated export | The export carries Krave Daily credit movements only. It holds none of the TSPC issuance this repository models from the gift-card sheet and the MC-order channel. Superseding krave | open | 2026-08-14 |
| CONF_CX_DUP_ROWS | Exact duplicate rows in the consolidated export's requirement and schedule tables | Loaded as delivered. Whether a repeated row is a real second requirement line or an artefact of the producing build's union cannot be decided from here — the raw tables behind it w | open | 2026-08-14 |
| CONF_CX_EVENT_ID_COLLIDES | fact_payment_event.event_id is declared a key and is not one | The producing build unioned five processor sources without namespacing their row ids, so the same event_id denotes different events with different dates and amounts. The rows are g | open | 2026-08-14 |
| CONF_CX_NOT_REDERIVABLE | The consolidated export is a rollup, and its own raw sources were not shipped | Every other source here can be rebuilt from 00_raw. This one cannot: only the conformed output arrived. Figures taken from it are traceable to a landed batch but not to a source re | open | 2026-08-14 |
| CONF_CX_NO_YIELD | Recipe yield and loss are unsourced, and inventory recovery_pct is unpopulated | The recipe source states quantities, not yields. The Krave Daily production database records recovery_pct as 1.0 almost everywhere, which is an unpopulated field rather than a find | open | 2026-08-14 |
| CONF_CX_ORDER_COVERAGE | Order-header coverage — core against the consolidated export | After stripping the amendment iteration, every core order appears in the export and the export adds more, extending history earlier than the ledger workbook reaches. The export is | open | 2026-08-14 |
| CONF_CX_PRODUCT_AMBIGUOUS | Products that cannot be crosswalked between the export and core | The two catalogues share no key; the only bridge is the product name, and names repeat on both sides. Only names appearing exactly once on both sides are treated as a match. Recipe | open | 2026-08-14 |
| CONF_LINE_COVERAGE | Orders with line-item detail, against all reportable orders | Line items exist for TSPC only, and only where a meal reference maps to a ledger order through tspc_all_orders. Krave Daily, Sodexo and the new site have no line-item source. Any p | open | 2026-08-15 |
| CONF_MC_UNSOURCED | Credit consumption exceeding recorded issuance | Credits consumed with no issuing record are held in synthetic batches of origin 'unsourced' rather than dropped. Candidate causes: manual staff grants, corporate off-system allocat | open | 2026-08-15 |
| CONF_ORDERS_PAID | Paid order value — ledger workbook vs deployed portal extract | July 2026 ledger stubs exported with no amount due and were backfilled from the daily feed in the portal build; the workbook carries no backfill. Landing must choose one basis and | open | 2026-08-15 |
| CONF_PAYMENT_METHOD_SEMANTICS | kravers.payment.method | The ledger workbook derives this column from the order reference suffix, not from the processor. It classifies the order iteration. Fees by instrument need the PayMongo payment_met | open | 2026-08-14 |
| CONF_PWD_SCOPE | PWD exemption is recorded per order, but PWD status belongs to a person | Recorded value is the count of orders the source marks PWD-exempt. Computed value is the count of VAT-charged orders placed by those same customers. If PWD registration is a person | open | 2026-08-15 |
| CONF_FORMULA_CELLS | 00_raw KRAVERS/ledger_workbook — 10 of 15 landed tables | The workbook was read in formula mode. It always held cached values; they were simply never read. | resolved | 2026-08-14 |
| CONF_COMPANY_COVERAGE | B2B company coverage — core against the consolidated export | The export is a superset here, so this is a gap fill, not a contradiction. Two caveats travel with it. First, company identity is the normalised NAME — no source carries a company | variance | 2026-08-14 |
| CONF_CONSUMPTION_UNMATCHED | Ingredients consumed that the recipe catalogue does not name | The kitchen buys and uses things the recipe catalogue does not list — prepared stocks, staff-meal items, and the same ingredient under a different name. Loaded whole and flagged, b | variance | 2026-08-14 |
| CONF_CX_CREDIT_FACE_MISSING | Credit peso value present while credit face value is zero | Carried from the export's CONFLICTS.csv. The peso value survived the export, the face value did not. | variance | 2026-08-14 |
| CONF_CX_CREDIT_PESO_EXCEEDS_FACE | Credit peso value exceeds a recorded face value | Carried from the export's CONFLICTS.csv. The two fields disagree at source. | variance | 2026-08-14 |
| CONF_CX_HEADER_COVERAGE_LAG | Delivery lines exist with no order header | Carried from the export's CONFLICTS.csv. Missing header history, not a broken key. | variance | 2026-08-14 |
| CONF_CX_LEDGER_DUPLICATE_ROWS | Krave Daily amendment orders appear up to 3 times in the source workbook | Carried from the export's CONFLICTS.csv. Resolved by the producing build; the source workbook still holds them. | variance | 2026-08-14 |
| CONF_CX_NET_ABSENT_PRE_2025 | Processor NET and FEE are absent before 2025 | Found here, not carried. Any 2021-24 "net revenue" from this source is a GROSS figure with fees unmodelled. Bears directly on how 2022 is framed: the volume is real, the net is not | variance | 2026-08-14 |
| CONF_CX_ORPHAN_LINES | Orders in the delivery-line feed with no header, inside the covered window | Carried from the export's CONFLICTS.csv. | variance | 2026-08-14 |
| CONF_CX_PAYMONGO_GAP | TSPC processor history for Mar 2023 to Dec 2024 is absent, not sparse | Carried from the export's CONFLICTS.csv. The highest-value window with no processor coverage on either side. Closed only by a PayMongo re-export. | variance | 2026-08-14 |
| CONF_CX_PRE2025_VOLUME_ONLY | The order history the export adds before 2025 states volume but no value | Those orders come from the daily feed, which carries no financial columns; the ledger only reaches back to 1 Jan 2025. So 2023 and 2024 volume and customers are sound and 2023-24 R | variance | 2026-08-14 |
| CONF_DISCOUNT_BASIS_VARIANCE | Discount rate — this warehouse against the export's analytics baseline | Neither figure from the export baseline reproduces on this data. The bases differ in scope, not in arithmetic. All four computable bases are published together in mart.kravers_disc | variance | 2026-08-14 |
| CONF_FEED_RECOVERS_2024 | 2024 revenue was not missing — it was dropped in transit | CONF_CX_PRE2025_VOLUME_ONLY recorded 2023-24 as volume with no value. The daily export feed those orders came from states the money; the build that produced the consolidated export | variance | 2026-08-14 |
| CONF_MC_RATE_CONTRACT_VS_OBSERVED | Contracted credit rate against the rate actually observed on consumption | The package table states the rate the customer was sold. The blended figure is what the book actually realised across all batches. A gap between them is discounting, mix, or issuan | variance | 2026-08-14 |
| CONF_ML_DENSITY | Millilitre costs are derived from per-kilogram prices | Exact for water and stock, out by roughly 8% for oil. The alternative was to leave every liquid uncosted, which would have blocked more dishes than the assumption distorts. Basis i | variance | 2026-08-14 |
| CONF_OPEX_SUMMARY_VS_DETAIL | Operating expenses: the summary lines and the transaction lines do not tie | The source sheet interleaves both in one column, so reading it whole double counts. They are separated at ingest and neither is adjusted. The gap is largely utilities, which the sh | variance | 2026-08-14 |
| CONF_PWD_REGISTER_FOUND | PWD status is registered against a person, and the register has been found | CONF_PWD_SCOPE asked whether exemption belongs to the person or the transaction. The production schema answers it: `users.pwd_sc` is a property of the customer. That does not resol | variance | 2026-08-14 |
| CONF_PWD_VAT_CHARGED | VAT charged on orders by customers the production register marks PWD-exempt | Surfaced the moment the register was loaded — T010 had been vacuous until then, because is_pwd_registered was FALSE on all 4,231 customers and the rule could not fail. It is either | variance | 2026-08-14 |
| CONF_TWO_MENUS | The recipes were being crosswalked onto the wrong catalogue | complete_meals is the KRAVE DAILY menu. kravers.product is TSPC's. Exactly one dish name appears in both, because the two brands sold different food. Recipe coverage was stuck at 9 | variance | 2026-08-14 |