{
  "engine": "ironparse",
  "layer": "deterministic-verification",
  "copybook": "ACCTREC.CPY",
  "verdict": "PASS",
  "inputSha256": "1a3861a36382ff20b0e2da7c5af7063ee696896fb139b0a8f1359edf95e2b990",
  "outputSha256": "3e9315f18f0a8c82f1d2ca420611b6453a94378c1224b1eb5144cd12d8f14a70",
  "counts": {
    "records": 1,
    "elementaryFields": 12,
    "redefines": 0,
    "occursDependingOn": 0,
    "fixedOccurs": 0
  },
  "gates": [
    {
      "id": "01",
      "name": "PARSER",
      "detail": "Deterministic AST extraction yields a non-empty, field-bearing record set. No LLM involved.",
      "pass": true,
      "measure": "1 records · 12 elementary fields"
    },
    {
      "id": "02",
      "name": "SCHEMA_SANITY",
      "detail": "Candidate schema parses as valid Zod — balanced delimiters, no markdown fences, no prose.",
      "pass": true,
      "measure": "valid Zod module"
    },
    {
      "id": "03",
      "name": "FIELD_PARITY",
      "detail": "len(COBOL elementary fields) === len(emitted schema leaves). Off by one and the build fails.",
      "pass": true,
      "measure": "COBOL 12 ⇄ schema 12"
    },
    {
      "id": "04",
      "name": "DARK_CORNER",
      "detail": "Every REDEFINES overlay compiles to a union (discriminated where a record-type byte exists); every OCCURS to a dynamic array.",
      "pass": true,
      "measure": "0/0 overlays · 0/0 arrays"
    },
    {
      "id": "05",
      "name": "MOCK_STRUCTURE",
      "detail": "A mock document generated from the schema re-validates against it — the schema is internally consistent.",
      "pass": true,
      "measure": "13 nodes round-tripped"
    }
  ],
  "mappings": [
    {
      "cobol": "ACCT-ID",
      "level": 5,
      "pic": "X(10)",
      "storage": "alphanumeric (10 chars)",
      "tsPath": "acctRecord.acctId",
      "tsType": "z.string().max(10)"
    },
    {
      "cobol": "ACCT-NAME",
      "level": 5,
      "pic": "X(50)",
      "storage": "alphanumeric (50 chars)",
      "tsPath": "acctRecord.acctName",
      "tsType": "z.string().max(50)"
    },
    {
      "cobol": "ACCT-BALANCE",
      "level": 5,
      "pic": "S9(9)V99 COMP-3",
      "storage": "packed decimal (COMP-3, signed, scaled)",
      "tsPath": "acctRecord.acctBalance",
      "tsType": "z.number()"
    },
    {
      "cobol": "ACCT-STATUS",
      "level": 5,
      "pic": "X(1)",
      "storage": "alphanumeric (1 chars)",
      "tsPath": "acctRecord.acctStatus",
      "tsType": "z.string().max(1)"
    },
    {
      "cobol": "ACCT-OPEN-DATE",
      "level": 5,
      "pic": "X(8)",
      "storage": "alphanumeric (8 chars)",
      "tsPath": "acctRecord.acctOpenDate",
      "tsType": "z.string().max(8)"
    },
    {
      "cobol": "ACCT-LAST-ACTIVITY",
      "level": 5,
      "pic": "X(8)",
      "storage": "alphanumeric (8 chars)",
      "tsPath": "acctRecord.acctLastActivity",
      "tsType": "z.string().max(8)"
    },
    {
      "cobol": "ACCT-TYPE",
      "level": 5,
      "pic": "X(3)",
      "storage": "alphanumeric (3 chars)",
      "tsPath": "acctRecord.acctType",
      "tsType": "z.string().max(3)"
    },
    {
      "cobol": "ACCT-INTEREST-RATE",
      "level": 5,
      "pic": "S9V999",
      "storage": "display numeric, signed, implied decimal (4 digits)",
      "tsPath": "acctRecord.acctInterestRate",
      "tsType": "z.string()"
    },
    {
      "cobol": "ACCT-OVERDRAFT-LIMIT",
      "level": 5,
      "pic": "S9(7)V99",
      "storage": "display numeric, signed, implied decimal (9 digits)",
      "tsPath": "acctRecord.acctOverdraftLimit",
      "tsType": "z.string()"
    },
    {
      "cobol": "ACCT-CURRENCY",
      "level": 5,
      "pic": "X(3)",
      "storage": "alphanumeric (3 chars)",
      "tsPath": "acctRecord.acctCurrency",
      "tsType": "z.string().max(3)"
    },
    {
      "cobol": "ACCT-PIN",
      "level": 5,
      "pic": "X(4)",
      "storage": "alphanumeric (4 chars)",
      "tsPath": "acctRecord.acctPin",
      "tsType": "z.string().max(4)"
    },
    {
      "cobol": "ACCT-CREATED-TIME",
      "level": 5,
      "pic": "X(26)",
      "storage": "alphanumeric (26 chars)",
      "tsPath": "acctRecord.acctCreatedTime",
      "tsType": "z.string().max(26)"
    }
  ],
  "schema": "import { z } from \"zod\";\n\nexport const RecordSchema = z.object({\n  acctRecord: z.object({\n    acctId: z.string().max(10),\n    acctName: z.string().max(50),\n    acctBalance: z.number(),\n    acctStatus: z.string().max(1),\n    acctOpenDate: z.string().max(8),\n    acctLastActivity: z.string().max(8),\n    acctType: z.string().max(3),\n    acctInterestRate: z.string(),\n    acctOverdraftLimit: z.string(),\n    acctCurrency: z.string().max(3),\n    acctPin: z.string().max(4),\n    acctCreatedTime: z.string().max(26),\n  }),\n});\n\nexport type Record = z.infer<typeof RecordSchema>;"
}