PAYROLL-BATCH-001.cbl→PayrollBatchJob.java97.2% confidencemedium risk
PAYROLL-BATCH-001.cblCOBOL
1 IDENTIFICATION DIVISION.2 PROGRAM-ID. PAYROLL-BATCH-001.3 AUTHOR. SYSTEM.45 ENVIRONMENT DIVISION.6 INPUT-OUTPUT SECTION.7 FILE-CONTROL.8 SELECT EMPLOYEE-FILE ASSIGN TO "EMP.DAT"9 ORGANIZATION IS SEQUENTIAL.10 SELECT PAYROLL-OUTPUT ASSIGN TO "PAY.OUT"11 ORGANIZATION IS SEQUENTIAL.1213 DATA DIVISION.14 FILE SECTION.15 FD EMPLOYEE-FILE.16 01 EMPLOYEE-RECORD.17 05 EMP-ID PIC X(8).18 05 EMP-NAME PIC X(30).19 05 EMP-HOURS PIC 9(3)V9(2).20 05 EMP-RATE PIC 9(5)V9(2).21 05 EMP-TAX-CODE PIC X(2).2223 WORKING-STORAGE SECTION.24 01 WS-GROSS-PAY PIC 9(7)V9(2).25 01 WS-TAX-AMOUNT PIC 9(7)V9(2).26 01 WS-NET-PAY PIC 9(7)V9(2).27 01 WS-EOF PIC X VALUE 'N'.2829 PROCEDURE DIVISION.30 MAIN-PARA.31 OPEN INPUT EMPLOYEE-FILE32 OPEN OUTPUT PAYROLL-OUTPUT33 PERFORM READ-EMPLOYEES34 UNTIL WS-EOF = 'Y'35 CLOSE EMPLOYEE-FILE36 CLOSE PAYROLL-OUTPUT37 STOP RUN.3839 READ-EMPLOYEES.40 READ EMPLOYEE-FILE41 AT END MOVE 'Y' TO WS-EOF42 NOT AT END PERFORM CALC-PAYROLL43 END-READ.4445 CALC-PAYROLL.46 COMPUTE WS-GROSS-PAY =47 EMP-HOURS * EMP-RATE48 PERFORM CALC-TAX49 COMPUTE WS-NET-PAY =50 WS-GROSS-PAY - WS-TAX-AMOUNT51 WRITE PAYROLL-OUTPUT FROM WS-NET-PAY.5253 CALC-TAX.54 EVALUATE EMP-TAX-CODE55 WHEN 'S1'56 COMPUTE WS-TAX-AMOUNT =57 WS-GROSS-PAY * 0.2058 WHEN 'S2'59 COMPUTE WS-TAX-AMOUNT =60 WS-GROSS-PAY * 0.2861 WHEN OTHER62 COMPUTE WS-TAX-AMOUNT =63 WS-GROSS-PAY * 0.3564 END-EVALUATE.
PayrollBatchJob.javaJava 21
1package com.bank.payroll;23import com.bank.payroll.model.Employee;4import com.bank.payroll.model.PayrollResult;5import com.bank.payroll.repository.EmployeeRepository;6import com.bank.payroll.repository.PayrollOutputRepository;7import org.springframework.batch.core.Job;8import org.springframework.batch.core.Step;9import org.springframework.batch.core.job.builder.JobBuilder;10import org.springframework.batch.core.step.builder.StepBuilder;11import org.springframework.batch.item.ItemProcessor;12import org.springframework.stereotype.Component;13import java.math.BigDecimal;14import java.math.RoundingMode;1516/**17 * PayrollBatchJob — translated from PAYROLL-BATCH-001.cbl18 * Translation confidence: 97.2% | Semantic equivalence: HIGH19 */20@Component21public class PayrollBatchJob {2223 private final EmployeeRepository employeeRepository;24 private final PayrollOutputRepository payrollOutputRepository;2526 public PayrollBatchJob(27 EmployeeRepository employeeRepository,28 PayrollOutputRepository payrollOutputRepository) {29 this.employeeRepository = employeeRepository;30 this.payrollOutputRepository = payrollOutputRepository;31 }3233 public Job buildJob(JobBuilder jobBuilder, Step payrollStep) {34 return jobBuilder.get("payrollBatchJob")35 .start(payrollStep)36 .build();37 }3839 public Step buildPayrollStep(StepBuilder stepBuilder) {40 return stepBuilder.get("payrollStep")41 .<Employee, PayrollResult>chunk(100)42 .reader(employeeRepository::findAll)43 .processor(payrollProcessor())44 .writer(payrollOutputRepository::saveAll)45 .build();46 }4748 // Corresponds to CALC-PAYROLL + CALC-TAX paragraphs49 private ItemProcessor<Employee, PayrollResult> payrollProcessor() {50 return employee -> {51 BigDecimal grossPay = employee.getHoursWorked()52 .multiply(employee.getHourlyRate())53 .setScale(2, RoundingMode.HALF_UP);5455 BigDecimal taxAmount = calculateTax(grossPay, employee.getTaxCode());56 BigDecimal netPay = grossPay.subtract(taxAmount);5758 return new PayrollResult(59 employee.getId(),60 grossPay,61 taxAmount,62 netPay63 );64 };65 }6667 // EVALUATE EMP-TAX-CODE → Java 21 switch expression68 private BigDecimal calculateTax(BigDecimal grossPay, String taxCode) {69 return switch (taxCode) {70 case "S1" -> grossPay.multiply(BigDecimal.valueOf(0.20));71 case "S2" -> grossPay.multiply(BigDecimal.valueOf(0.28));72 default -> grossPay.multiply(BigDecimal.valueOf(0.35));73 };74 }75}