One record, three programs.
ORDMAIN, ORDCALC and ORDVALID all use ORDREC. Changing the shared layout means reviewing every program that relies on it.
From inherited code to deliberate change
Every change to a critical application raises the same question: what else depends on this behaviour? Trazadera modernAIze helps your team understand the source, decide the target and inspect the resulting project before migration.
01 / The business logic
A rewrite can compile and still calculate a different amount. Before changing the implementation, make the expected behaviour explicit. In our Order Management demo, that starts with a percentage discount.
Order Management · COBOL example
COMPUTE WS-DISCOUNT-AMOUNT =
ORD-AMOUNT * ORD-DISCOUNT-PCT / 100
COMPUTE ORD-NET-AMOUNT = ORD-AMOUNT - WS-DISCOUNT-AMOUNT.The source rule gives the team a concrete result to check in the target implementation.
Synthetic demonstration: three COBOL programs and one shared copybook, with a prepared Java / Spring Boot target.
02 / The dependencies
The calculation is only one part of the application. Its callers, validation logic and shared data layout determine what can change together. Modernization starts by making those relationships visible.
EnlargeORDMAIN, ORDCALC and ORDVALID all use ORDREC. Changing the shared layout means reviewing every program that relies on it.
Calculation and validation can call each other when the net amount is negative. That return path belongs in the design and the tests.
ORDVALID increments the counter after a negative result and calls calculation again while it is below three. The Java target counts calculation attempts. Those meanings need an explicit review.
IF ORD-NET-AMOUNT < 0
ADD 1 TO ORD-RETRY-COUNT
IF ORD-RETRY-COUNT < 3
CALL 'ORDCALC' USING ORD-RECORD
03 / The target decisions
modernAIze uses deterministic parsing and AI enrichment to build a semantic model for review. Your team decides the target structure and blueprint conventions. In this demo, Java services separate orchestration, calculation and validation around a typed order record.
ORDMAINOrderProcessingServiceWhere the sequence starts, ends and records its result.
ORDCALCDiscountCalculationServiceDecimal precision and rounding of monetary values.
ORDVALIDOrderValidationServiceInvalid outcomes, retry limits and counter semantics.
ORDRECOrderField types, status values and how updates propagate.
BigDecimal discount = order.amount()
.multiply(order.discountPercentage())
.divide(ONE_HUNDRED, 2, RoundingMode.HALF_UP);
return order.withCalculation(order.amount().subtract(discount));This target uses BigDecimal and rounds the discount to two decimal places with HALF_UP. Rounding behaviour is a design choice to validate against the source.
Setup establishes the source boundary. Understand exposes the model. Optimize records target decisions. Modernaize produces the project to inspect.
Explore modernAIze04 / The verification
The target should arrive with readable files and specific checks. The prepared Spring Boot project compiles and its two tests pass. They establish a useful starting point for a wider acceptance plan.
Calculation test
The target’s discount service returns the expected net amount for the example order.
Processing test
The order returns with a valid status, one calculation attempt and an entry in the in-memory audit repository.
Enlarge
EnlargeExtend the checks to decimal boundaries, invalid discounts, retry behaviour and downstream integrations. Passing these two tests does not establish complete equivalence with the COBOL application.
Start with one application boundary
Bring a representative application, its shared data definitions and the business cases it must continue to support. We can establish what is understood, which target decisions need review and how acceptance will be measured.
Discuss an application