ACAS Modernization — Executive Summary

Payment Processing subsystem · COBOL on GnuCOBOL with ISAM/MySQL dual storage and 80×24 terminal UI → a modernized single-page UI presenting the whole supplier-disbursement journey as one continuous flow, on Python (FastAPI) / Pydantic v2 / SQLAlchemy 2.0 / Docker Compose / AWS ECS Fargate + PostgreSQL 16 + RabbitMQ
Prepared by Concho.AI · May 2026 · Run 012

This engagement modernizes one subsystem of the ACAS platform — the Payment Processing module that handles supplier disbursement, cash posting, cheque writing, BACS issuance, and remittance generation — rather than rewriting the whole 1.36 million-line accounting system at once. The chosen subsystem is rebuilt on a current language runtime (Python with FastAPI), a modern user interface (React, replacing the 80×24 terminal), and a cloud-native hosting platform (AWS ECS Fargate); the rest of the application keeps running on COBOL unchanged. The modern subsystem operates side-by-side with the legacy via the SAROC coexistence bridge (Snapshot and Replay Ordered Cutover), and as subsequent subsystems follow the same pattern, the COBOL footprint shrinks one piece at a time until the modernization is complete. Subsystems are picked by combining business-functionality boundaries with technical boundaries so each modernization is small enough to ship safely but large enough to deliver visible business value — three independent agent runs converged unanimously on Payment Processing as the right first slice.

Runtime modernized GnuCOBOL + Mono terminal → Python 3.12 + FastAPI. One supported runtime; COMP-3 packed decimals and YYYYMMDD packed dates replaced by NUMERIC and ISO 8601.
Modern web stack 80×24 terminal & ACCEPT/DISPLAY → React SPA + REST APIs. Responsive; live MOD-11 supplier validation; live appropriation preview before commit.
Dependency cleanup 12 platform constraints retired (100% hard-coded); COBOL ISAM, MySQL dual-storage bridge, 80×24 terminal, 4-character credentials, OCCURS-array row caps all replaced.
Behavior preserved 9 of 10 business rules carried over verbatim. Only the 99-item batch cap (BR-PAY-008) needs a documented SAROC-window mitigation; the cheque/BACS dual pipeline (BR-PAY-005) and remittance content parity (BR-PAY-010) are delivery refactors — identical per-payment behavior, different materialization — not behavioral changes.
Database modernized ISAM + MySQL → PostgreSQL 16; 7 target tables mapped from the legacy copybooks. Composite key oi-b-nos * 1000 + oi-b-item preserved; OCCURS-array row caps replaced by child tables.

What changes

How the subsystem was chosen

Roadmap

Phase 1
Build the modernized subsystem
Stand up the 3-service architecture (payment-api + payment-batch + payment-reporting) on FastAPI / SQLAlchemy 2.0 / PostgreSQL 16; preserve every business rule; validate against real test data; wire OpenTelemetry, structlog, and the SAROC consumer.
Phase 2
Run side-by-side
Engage the SAROC bridge against the live ACAS ISAM files; the modern services consume acas.legacy.* events from RabbitMQ. Legacy COBOL operators keep using pl080pl960 unchanged; the modern UI runs in parallel with read-only access. Compare outputs row-for-row.
Phase 3
Cutover
Switch operators to the React UI; the modern services become authoritative; the SAROC bridge drains residual legacy writes and stops. Run parallel validation for one month-end cycle before retiring the COBOL Payment Processing programs.
Phase 4
Next subsystem
Apply the same playbook to the next chosen subsystem (Supplier Management is the fast-follow, then Purchase Invoicing, Sales Invoicing, and finally the General Ledger). Each cycle shrinks the COBOL footprint and grows the modern footprint.

How we know it works — automated verification

Concho read the entire ACAS codebase — 1,358,687 lines across 449 COBOL files — and extracted a complete inventory of business rules (308 system-wide, 10 specific to Payment Processing), architectural elements (56 aggregate roots, 37 bounded contexts, 136 integration points), and platform constraints (197 cataloged at the system level). From that inventory, it derived 10 formal behavioral rule specifications with Given-When-Then scenarios, mapped 7 target tables to the legacy copybooks, and selected the SAROC coexistence pattern by matching the legacy interaction surface (green-screen terminal, no HTTP request path to fork). Every claim in the analysis was then verified: 12 of 12 sampled factual assertions were checked against the actual COBOL source via Concho MCP, with 0 hallucinations found; 11 of 11 Mermaid diagrams passed syntax checks; 0 cross-section inconsistencies after one iteration of targeted fixes.

The analysis runs in hours, not months. The full modernization report — legacy architecture analysis, target architecture design, platform-affinity scoring, business rule catalog, code translation examples, data mapping strategy, UI transformation examples, service architecture, and the strangler-fig cutover plan — was generated in approximately 14 hours of orchestration including a 3-perspective consensus for both subsystem selection and service decomposition. Comparable manual analysis is estimated at roughly 30 weeks. This speed comes from Concho’s pre-built Language-Agnostic Deep Scan, which provides 100% codebase coverage versus the 20–30% sampling typical of manual reviews.

Codebase coverage 1,358,687 lines / 449 COBOL files analyzed at 100% coverage. 36 business functions cataloged; 56 aggregate roots; 308 enforced business rules; 197 implementation constraints; 136 integration points.
Behavioral fidelity 10 formal rule specifications with Given-When-Then scenarios, confidence scores 0.60–0.88 (average 0.77), and verified COBOL source citations at file:line precision. 7 transfer verbatim; 3 require documented SAROC-window mitigation tests.
Verification result 12 of 12 sampled claims verified; 0 hallucinations — score 10.0 / 10. 12 platform constraints reconciled across 3 independent agent runs at 100% hard-coded rate, all retired or mitigated by the target.

What Happens Next — Automated Code Generation

This report is not the end of the process — it is the input to a companion agentic code generation workflow that turns the architectural guidance, schema decisions, business rule specifications, and UI transformation patterns documented here into runnable implementation artifacts: FastAPI services, Pydantic v2 entity models, SQLAlchemy 2.0 repositories, Alembic migrations, React UI components, PostgreSQL schemas, RabbitMQ topology, the SAROC coexistence bridge, Dockerfiles, ECS task definitions, Terraform / CloudFormation IaC, and CI/CD pipelines.

The code generation workflow uses a BDD/TDD iterate-till-green approach: it generates code from the behavioral rule specifications (Given-When-Then), writes automated tests derived from those specs, executes the full test suite, and — if any test fails — identifies the discrepancy, corrects the generated artifact, and re-runs until all tests pass. A human never reviews a broken artifact. Only when the modernized subsystem passes all behavioral, integration, and smoke tests does the workflow present it for human review. It does not arrive and get polished — it arrives already verified.

The modernized payment-processing experience — five screens

Five legacy 80×24 terminal screens rebuilt as React components against the FastAPI services. Each screen below is derived from the actual COBOL source code discovered via Concho — same fields, same business rules, modern interaction. The fifth panel is the Payment Cycle Workbench: a single SPA page that consolidates data from five separate legacy programs (pl080 entry, pl090 proof, pl100 cash post, pl940 cheque run, pl960 remittance) that were never visible together on the green-screen terminal.

New Payment
New Payment · Batch #42
$8,742.55
Allocate $25.00 unapplied (BR-PAY-007)
InvNetDiscApply
42-001$1,000$25$975
42-002$250$0$250
Batch Dashboard
Batch #42 · 6 / 99
Total $4,100 gross · $70 disc PROOFED
SupplierPaidStatus
SUP0001 ACME$975P
SUP0001 ACME$250P
SUP0002 BAKER$500P
SUP0003 COMET$735P
SUP0004 DELTA$1,170P
SUP0005 ECHO$400P
Lifecycle: ENTERED → APPROPRIATED → PROOFED → POSTED
GL Preview
Post Batch #42
6 payments · $4,030 paid · $70 disc
GL journal (one DB transaction):
AcctDebitCredit
5000 Trade Creditors$4,030
5050 Disc received$70
1200 Bank$4,100
Total (D=C)$4,100$4,100
Same DB txn: UPDATE payment SET status='POSTED' + INSERT gl_posting
Remittance Inbox
Remittances · #42
6 remittances 4 BACS · 2 Cheque
SupplierMethodTotal
SUP0001Chq 12345$1,225
SUP0002BACS$500
SUP0003BACS$735
SUP0004Chq 12346$1,170
SUP0005BACS$400
S3-backed PDFs · 9-line OCCURS cap removed (BR-PAY-010)
Cycle Workbench
Workbench · #42
ENT APP PRF POST REM
Header
SUP0001 ACME
$1,250.00
Lines
42-001 · $975
42-002 · $250
GL preview
DR 5000 $4,030
DR 5050 $70
CR 1200 $4,100
Remit
Cheque 12345
PDF ready
5 legacy programs on one page