01 · The estate
Nobody wrote it down.
Thirty years of COBOL, JCL and copybooks, changed by people who have since retired. The documentation is the code, and the code only tells you what it does if you already know where to look.
One claims system, as Telikos counts it
- 12programs
- 5jobs
- 16datasets
- 3tables
- 445data items
- 16open unknowns
02 · Parse
Read it line by line. No model yet.
Parsers walk every program, job and copybook and record what they find as facts, each with the file and line it came from. What they cannot resolve is recorded as a gap, never guessed.
- 118
011800 CALL 'CLMCALC' USING WS-CALC-AREA. - 119
011900 MOVE WS-CALC-PAY-AMT TO ADJ-PAY-AMT. - 120
012000 MOVE 'AD' TO ADJ-STATUS. - 121
012100 2400-CHECK-LIMIT. - 122
012200 IF CLM-REASON-CODE = 900 - 123
012300 SET SUPV-APPROVED TO TRUE - 124
012400 ELSE - 125
012500 MOVE 'N' TO WS-SUPV-APPROVED - 126
012600 END-IF. - 127
012700 IF ADJ-CLAIM-AMOUNT > WS-LIMIT-AMT - 128
012800 AND NOT SUPV-APPROVED - 129
012900 MOVE ADJ-RECORD TO SUSP-CLAIM-DATA - 130
013000 MOVE 'OVER LIMIT' TO SUSP-REASON - 131
013100 WRITE SUSP-RECORD - 132
013200 ADD 1 TO WS-SUSP-COUNT - 133
013300 ELSE - 134
013400 WRITE ADJ-RECORD - 135
013500 ADD 1 TO WS-ADJ-COUNT - 136
013600 END-IF. - 137
013700 IF WS-EXIT-PGM NOT = SPACES - 138
013800 CALL WS-EXIT-PGM USING ADJ-RECORD - 139
013900 END-IF.
- CALLSconfidence 0.95
2300-CALC-PAYMENT calls CLMCALC
cobol/CLM0200.cbl:118
- Condition siteconfidence 0.95
IF ADJ-CLAIM-AMOUNT > WS-LIMIT-AMT AND NOT SUPV-APPROVED
cobol/CLM0200.cbl:127-136
- WRITESconfidence 0.95
2400-CHECK-LIMIT writes file SUSP-OUT
cobol/CLM0200.cbl:131
- Gapseverity warn
CALL WS-EXIT-PGM: the target is decided at run time. Recorded as a gap, not guessed.
cobol/CLM0200.cbl:138
03 · Model
The facts become a graph.
Programs, jobs, datasets, tables and rules, and the links between them. Every link keeps where it came from and how sure Telikos is. A link it cannot prove is a gap in the map, not a line on it.
04 · Answer
Ask. Every sentence cites its line.
Question
Which program decides whether a claim needs supervisor approval?
- 1
CLM0200describes itself in its header comment as: “CLM0200 - CLAIM ADJUDICATION READS VALIDATED CLAIMS, APPLIES DENTAL EXCLUSION RULES, CALCULATES THE PAYABLE AMOUNT AND ROUTES LARGE CLAIMS WITHOUT SUPERVISOR APPROVAL TO SUSPENSE.”cites E1 - 2
CLM0200's change history records: “2014-02-11 DPS SUPERVISOR APPROVAL LIMIT 50,000”cites E1 - 3In
CLM0200, paragraph2400-CHECK-LIMITtests “IF ADJ-CLAIM-AMOUNT > WS-LIMIT-AMT AND NOT SUPV-APPROVED” atcobol/CLM0200.cbl:127-136.cites E2, E3
Evidence
- E1Programcobol/CLM0200.cbl:4-15confidence 0.954
000400*----------------------------------------------------------------5000500* CLM0200 - CLAIM ADJUDICATION6000600* READS VALIDATED CLAIMS, APPLIES DENTAL EXCLUSION RULES,7000700* CALCULATES THE PAYABLE AMOUNT AND ROUTES LARGE CLAIMS8000800* WITHOUT SUPERVISOR APPROVAL TO SUSPENSE.9000900* - E2ConditionSitecobol/CLM0200.cbl:127-136confidence 0.95127
012700 IF ADJ-CLAIM-AMOUNT > WS-LIMIT-AMT128012800 AND NOT SUPV-APPROVED129012900 MOVE ADJ-RECORD TO SUSP-CLAIM-DATA130013000 MOVE 'OVER LIMIT' TO SUSP-REASON131013100 WRITE SUSP-RECORD132013200 ADD 1 TO WS-SUSP-COUNT - E3Paragraphcobol/CLM0200.cbl:121-139confidence 0.95121
012100 2400-CHECK-LIMIT.122012200 IF CLM-REASON-CODE = 900123012300 SET SUPV-APPROVED TO TRUE124012400 ELSE125012500 MOVE 'N' TO WS-SUPV-APPROVED126012600 END-IF.
01 · The estate
Nobody wrote it down.
Thirty years of COBOL, JCL and copybooks, changed by people who have since retired. The documentation is the code, and the code only tells you what it does if you already know where to look.
One claims system, as Telikos counts it
- 12programs
- 5jobs
- 16datasets
- 3tables
- 445data items
- 16open unknowns
02 · Parse
Read it line by line. No model yet.
Parsers walk every program, job and copybook and record what they find as facts, each with the file and line it came from. What they cannot resolve is recorded as a gap, never guessed.
Four lines of CLM0200, and what the parser recorded
- cobol/CLM0200.cblline 118
- 118
CALL 'CLMCALC' USING WS-CALC-AREA.
CALLSconfidence 0.95
2300-CALC-PAYMENT calls CLMCALC
- 118
- cobol/CLM0200.cbllines 127-128
- 127
IF ADJ-CLAIM-AMOUNT > WS-LIMIT-AMT - 128
AND NOT SUPV-APPROVED
Condition siteconfidence 0.95
IF ADJ-CLAIM-AMOUNT > WS-LIMIT-AMT AND NOT SUPV-APPROVED
- 127
- cobol/CLM0200.cblline 131
- 131
WRITE SUSP-RECORD
WRITESconfidence 0.95
2400-CHECK-LIMIT writes file SUSP-OUT
- 131
- cobol/CLM0200.cblline 138
- 138
CALL WS-EXIT-PGM USING ADJ-RECORD
Gapseverity warn
CALL WS-EXIT-PGM: the target is decided at run time. Recorded as a gap, not guessed.
- 138
03 · Model
The facts become a graph.
Programs, jobs, datasets, tables and rules, and the links between them. Every link keeps where it came from and how sure Telikos is. A link it cannot prove is a gap in the map, not a line on it.
What runs CLM0200
- CLMNIGHTjob
- has stepconfidence 0.95
- STEP020.ADJUDjob step
- executesconfidence 0.90
- CLM0200program
Every link from CLM0200
calls0.95
CLMCALCprogram
calls, via VALUE clause0.80
CLMRULESprogram
reads0.90
ACME.PROD.CLAIMS.VALIDdataset
reads0.90
ACME.PROD.POLMASTdataset
writes0.90
ACME.PROD.CLAIMS.ADJdataset
writes0.90
ACME.PROD.CLAIMS.SUSPdataset
calls, unresolvedgap
WS-EXIT-PGM ?unresolved
The last call's target is decided at run time, so Telikos records it as a gap and lists it among the unknowns instead of drawing a line it cannot prove.
04 · Answer
Ask. Every sentence cites its line.
Question
Which program decides whether a claim needs supervisor approval?
The answer, and the lines behind each sentence
- 1
CLM0200describes itself in its header comment as: “CLM0200 - CLAIM ADJUDICATION READS VALIDATED CLAIMS, APPLIES DENTAL EXCLUSION RULES, CALCULATES THE PAYABLE AMOUNT AND ROUTES LARGE CLAIMS WITHOUT SUPERVISOR APPROVAL TO SUSPENSE.”- E1Programcobol/CLM0200.cbl:4-150.95
- 5
* CLM0200 - CLAIM ADJUDICATION - 6
* READS VALIDATED CLAIMS, APPLIES DENTAL EXCLUSION RULES, - 7
* CALCULATES THE PAYABLE AMOUNT AND ROUTES LARGE CLAIMS - 8
* WITHOUT SUPERVISOR APPROVAL TO SUSPENSE.
- 2
CLM0200's change history records: “2014-02-11 DPS SUPERVISOR APPROVAL LIMIT 50,000”- E1Programcobol/CLM0200.cbl:4-150.95
- 14
* 2014-02-11 DPS SUPERVISOR APPROVAL LIMIT 50,000
- 3
In
CLM0200, paragraph2400-CHECK-LIMITtests “IF ADJ-CLAIM-AMOUNT > WS-LIMIT-AMT AND NOT SUPV-APPROVED” atcobol/CLM0200.cbl:127-136.- E2ConditionSitecobol/CLM0200.cbl:127-1360.95
- E3Paragraphcobol/CLM0200.cbl:121-1390.95
- 127
IF ADJ-CLAIM-AMOUNT > WS-LIMIT-AMT - 128
AND NOT SUPV-APPROVED
Real output from Telikos. Its composer is deterministic: no model wrote a word of it. Nothing here was written by hand.