{"version":"1.0.0","fixtures":[{"id":"catalogue","title":"The supplier feed","service":"catalog_audit","question":"A comma is not always a decimal point. Which products need review?","payload":{"records":[{"sku":"A-10","price":"1.234,50"},{"sku":"B-20","price":"29,95"},{"sku":"B-20","price":"29,95"},{"price":"-5,00"},{"sku":"E-50","price":29.95}],"id_field":"sku","price_field":"price","locale":"de-DE","currency":"EUR"},"checks":[{"label":"Read the German price as 1234.5","path":["normalized",0,"price_decimal"],"expected":"1234.5"},{"label":"Flag both rows with the duplicate ID","path":["issues"],"project":"duplicate_indices","expected":[1,2]},{"label":"Catch missing ID, negative price and a non-string price","path":["issues"],"project":"issue_codes","expected":["duplicate_identity","duplicate_identity","missing_or_invalid_identity","negative_price","price_string_required"]}]},{"id":"snapshots","title":"The changing inventory","service":"record_reconcile","question":"Is numeric 7 the same ID as text \"7\"? Is missing the same as null?","payload":{"before":[{"id":7,"stock":10},{"id":"7","stock":null},{"id":"B","stock":5},{"id":"D","stock":1}],"after":[{"id":7,"stock":10},{"id":"7"},{"id":"C","stock":8},{"id":"D","stock":2}],"key":"id","fields":["stock"]},"checks":[{"label":"Find one added, one removed, two changed and one unchanged","path":[],"project":"counts","expected":[1,1,2,1]},{"label":"Keep numeric and string identities distinct","path":["changes"],"project":"changed_keys","expected":["7","D"]},{"label":"Distinguish explicit null from a missing field","path":["changes"],"project":"null_missing_change","expected":{"field":"stock","before":{"present":true,"value":null},"after":{"present":false}}}]},{"id":"invoice","title":"The three-cent slip","service":"invoice_arithmetic","question":"19.99 × 3. The invoice says 60.00. Would your workflow catch it?","payload":{"currency":"USD","scale":2,"lines":[{"quantity":3,"unit_minor":"1999","line_minor":"6000"}],"subtotal_minor":"6000","tax_minor":"0","shipping_minor":"0","discount_minor":"0","total_minor":"6000"},"checks":[{"label":"Calculate the line as 5997 minor units","path":["expected","line_minor"],"expected":["5997"]},{"label":"Calculate the final total as 59.97","path":["expected","total_decimal"],"expected":"59.97"},{"label":"Flag the line, subtotal and total mismatches","path":["issues"],"project":"issue_fields","expected":["line_minor","subtotal_minor","total_minor"]}]}],"reference_outputs":{"catalogue":{"service":"catalog_audit","version":"0.5.0","status":"resolved","flags":[],"valid":false,"summary":"5 issues across 5 products","issues":[{"index":3,"field":"sku","code":"missing_or_invalid_identity"},{"index":3,"field":"price","code":"negative_price"},{"index":4,"field":"price","code":"price_string_required"},{"index":1,"field":"sku","code":"duplicate_identity","related_indices":[1,2]},{"index":2,"field":"sku","code":"duplicate_identity","related_indices":[1,2]}],"normalized":[{"index":0,"identity":"A-10","price_decimal":"1234.5"},{"index":1,"identity":"B-20","price_decimal":"29.95"},{"index":2,"identity":"B-20","price_decimal":"29.95"},{"index":3,"identity":null,"price_decimal":"-5"},{"index":4,"identity":"E-50","price_decimal":null}],"currency":"EUR","locale":"de-DE","scope":"Import-readiness diagnostic only. Exact typed IDs; no fuzzy matching, store-specific certification, FX conversion, price verification or writes to a store."},"snapshots":{"service":"record_reconcile","version":"0.5.0","status":"resolved","flags":[],"summary":"1 added · 1 removed · 2 changed · 1 unchanged","added":[{"key":"C","after_index":2}],"removed":[{"key":"B","before_index":2}],"changes":[{"key":"7","before_index":1,"after_index":1,"fields":[{"field":"stock","before":{"present":true,"value":null},"after":{"present":false}}]},{"key":"D","before_index":3,"after_index":3,"fields":[{"field":"stock","before":{"present":true,"value":1},"after":{"present":true,"value":2}}]}],"unchanged":1,"checked_fields":["stock"],"scope":"Exact comparison of supplied snapshots only. Missing fields differ from explicit null. Unselected fields are discarded before storage; no live monitoring or automatic changes."},"invoice":{"service":"invoice_arithmetic","version":"0.5.0","status":"resolved","flags":[],"valid":false,"summary":"3 arithmetic mismatches across 1 lines","issues":[{"index":0,"field":"line_minor","code":"line_mismatch","expected":"5997","supplied":"6000"},{"field":"subtotal_minor","code":"total_mismatch","expected":"5997","supplied":"6000"},{"field":"total_minor","code":"total_mismatch","expected":"5997","supplied":"6000"}],"currency":"USD","scale":2,"expected":{"line_minor":["5997"],"subtotal_minor":"5997","total_minor":"5997","total_decimal":"59.97"},"scope":"Exact arithmetic of supplied amounts. Scale is caller-declared, not inferred from currency. Tax and shipping are taken as supplied; discount is subtracted. No rounding, FX, tax compliance, authenticity or accounting approval."}}}