Add Subsystem C (KYU01-09): all 9 programs, design docs, resource lists, DDL, COPY, coverage stats

KYU programs for payroll calculation:
  KYU01CVT - CSV conversion
  KYU02REG - attendance registration
  KYU03AGG - aggregation
  KYU04CAL - salary calculation
  KYU05DED - deduction calculation
  KYU06UPD - DB update
  KYU07DIV - division/pay-slip
  KYU08PRI - print output
  KYU09MRG - merge output

Includes:
  - Source programs (9 .cbl)
  - Compiled executables (9 .exe)
  - Detailed design docs (9 + sign-off)
  - Basic design doc (subsystem C overview)
  - Resource lists (9)
  - DDL schema (schema_kyu.sql)
  - COPY book (KYU99REC.cpy)
  - Coverage statistics update
  - DB definition update (STATUS values)
  - Overall system design document
This commit is contained in:
qiuqiuqiu
2026-07-09 08:09:59 +08:00
parent 02dd36e094
commit 75475b3fa1
43 changed files with 7212 additions and 41 deletions
+317
View File
@@ -0,0 +1,317 @@
IDENTIFICATION DIVISION.
PROGRAM-ID. KYU06UPD.
*****************************************************************
* システム名 : 給与計算システム *
* プログラムID : KYU06UPD *
* プログラム名 : 給与計算結果DB2更新処理 *
* 作成日 : 2026-07-01 *
* 処理概要 : SALARY-NETをDB2 SALARY-RESULTSに登録 *
* 重複時(-803)はUPDATEに切替 *
* プログラム分類: No.09 DB更新 *
*****************************************************************
* 更新履歴 *
*---------------------------------------------------------------*
* 更新日付 担当者 更新内容 *
*---------------------------------------------------------------*
* 2026-07-01 @@@ 新規作成 *
* *
*****************************************************************
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-ZSERIES.
OBJECT-COMPUTER. IBM-ZSERIES.
*
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT R02INNFIL ASSIGN TO EXTERNAL KYU06R02.
SELECT W03OUTFIL ASSIGN TO EXTERNAL KYU06W03.
*
DATA DIVISION.
FILE SECTION.
*
*****************************************************************
* R02: SALARY-NET200B FB *
*****************************************************************
FD R02INNFIL
LABEL RECORD IS STANDARD
BLOCK CONTAINS 0
RECORDING MODE IS F.
01 R02INNREC.
COPY KYU04REC REPLACING ==(A)== BY ==R02==.
*
*****************************************************************
* W03: ERROR-LOGVB *
*****************************************************************
FD W03OUTFIL
LABEL RECORD IS STANDARD
BLOCK CONTAINS 0
RECORDING MODE IS V.
01 W03OUTREC.
COPY KYU99REC REPLACING ==(A)== BY ==W03==.
*
WORKING-STORAGE SECTION.
*
*****************************************************************
* SQLCA *
*****************************************************************
EXEC SQL INCLUDE SQLCA END-EXEC.
*
*****************************************************************
* コンスタント領域 *
*****************************************************************
01 CNSARA.
03 CNS-PRGIDX PIC X(008) VALUE 'KYU06UPD'.
03 CNS-MSGSTR PIC 9(003) VALUE 001.
03 CNS-MSGFIN PIC 9(003) VALUE 002.
03 CNS-MSGSUBEEK PIC 9(003) VALUE 005.
03 CNS-MSGIINKES PIC 9(003) VALUE 006.
03 CNS-MSGOUTKES PIC 9(003) VALUE 007.
03 CNS-MSGKEYINF PIC 9(003) VALUE 033.
03 CNS-KN0002 PIC 9(001) VALUE 2.
03 CNS-ABD999 PIC 9(003) VALUE 999.
03 CNS-YEAR-MONTH-PARM PIC X(006).
*
*****************************************************************
* カウンタ領域 *
*****************************************************************
01 CUNARA.
03 CUN-R02INN PIC S9(009) COMP-3 VALUE ZERO.
03 CUN-W03OUT PIC S9(009) COMP-3 VALUE ZERO.
03 CUN-DB-INS PIC S9(009) COMP-3 VALUE ZERO.
03 CUN-DB-UPD PIC S9(009) COMP-3 VALUE ZERO.
*
*****************************************************************
* 作業領域 *
*****************************************************************
01 WRKARA.
03 WRK-EOF PIC X(001).
88 WRK-EOF-Y VALUE '1'.
03 WRK-YEAR-MONTH PIC X(006).
*
*****************************************************************
* DB2ホスト変数 *
*****************************************************************
01 DBVARA.
03 DBV-EMP-ID PIC X(008).
03 DBV-YEAR-MONTH PIC X(006).
03 DBV-GROSS-PAYMENT PIC 9(009).
03 DBV-INCOME-TAX PIC 9(009).
03 DBV-INSURANCE PIC 9(009).
03 DBV-RESIDENT-TAX PIC 9(009).
03 DBV-NET-PAYMENT PIC 9(009).
*
*****************************************************************
* サブプログラム連絡領域 *
*****************************************************************
COPY ZANMSGAC.
COPY ZANENDAC.
*
PROCEDURE DIVISION.
*****************************************************************
* サブモジュールNO: (0.0) *
* サブモジュール名: 制御処理 *
*****************************************************************
0000MAJCOLSOR SECTION.
*
PERFORM 1000ITTSOR.
PERFORM 2000MAJSOR
UNTIL WRK-EOF-Y.
PERFORM 3000STPSOR.
*
0000MAJCOLSOR-EXT.
GOBACK.
*
*****************************************************************
* サブモジュールNO: (1.0) *
* サブモジュール名: 初期処理 *
*****************************************************************
1000ITTSOR SECTION.
*
INITIALIZE M00MHOPAR.
MOVE CNS-MSGSTR TO M00MSGCOD.
PERFORM 4000MSGOUTSOR.
*
INITIALIZE M00MHOPAR.
MOVE CNS-MSGKEYINF TO M00MSGCOD.
MOVE FUNCTION WHEN-COMPILED TO M00UMKDATS22-01.
MOVE 'COMPILED' TO M00UMKDATS22-02.
PERFORM 4000MSGOUTSOR.
*
INITIALIZE WRKARA.
*
*** PARM取得
ACCEPT WRK-YEAR-MONTH
FROM COMMAND-LINE.
IF WRK-YEAR-MONTH = SPACES
MOVE '202605' TO WRK-YEAR-MONTH
END-IF.
MOVE WRK-YEAR-MONTH TO CNS-YEAR-MONTH-PARM.
*
OPEN INPUT R02INNFIL.
OPEN OUTPUT W03OUTFIL.
*
*** DB接続
EXEC SQL
CONNECT TO 'data/SALARY.db'
END-EXEC.
*
PERFORM 1100R02INNSOR.
*
1000ITTSOR-EXT.
EXIT.
*
*****************************************************************
* サブモジュールNO: (1.1) *
* サブモジュール名: R02読込処理 *
*****************************************************************
1100R02INNSOR SECTION.
*
READ R02INNFIL
AT END
SET WRK-EOF-Y TO TRUE
NOT AT END
ADD 1 TO CUN-R02INN
END-READ.
*
1100R02INNSOR-EXT.
EXIT.
*
*****************************************************************
* サブモジュールNO: (2.0) *
* サブモジュール名: 主処理 *
*****************************************************************
2000MAJSOR SECTION.
*
MOVE R02EMP-ID TO DBV-EMP-ID.
MOVE CNS-YEAR-MONTH-PARM TO DBV-YEAR-MONTH.
MOVE R02GROSS-PAYMENT TO DBV-GROSS-PAYMENT.
MOVE R02INCOME-TAX TO DBV-INCOME-TAX.
MOVE R02INSURANCE TO DBV-INSURANCE.
MOVE R02RESIDENT-TAX TO DBV-RESIDENT-TAX.
MOVE R02NET-PAYMENT TO DBV-NET-PAYMENT.
*
EXEC SQL
INSERT INTO SALARY-RESULTS
(EMP-ID, YEAR-MONTH,
GROSS-PAYMENT, INCOME-TAX,
INSURANCE, RESIDENT-TAX,
NET-PAYMENT, UPDATED-AT)
VALUES
(:DBV-EMP-ID, :DBV-YEAR-MONTH,
:DBV-GROSS-PAYMENT, :DBV-INCOME-TAX,
:DBV-INSURANCE, :DBV-RESIDENT-TAX,
:DBV-NET-PAYMENT, CURRENT TIMESTAMP)
END-EXEC.
*
IF SQLCODE = 0
ADD 1 TO CUN-DB-INS
PERFORM 1100R02INNSOR
EXIT SECTION
END-IF.
*
IF SQLCODE = -803
EXEC SQL
UPDATE SALARY-RESULTS SET
GROSS-PAYMENT = :DBV-GROSS-PAYMENT
,INCOME-TAX = :DBV-INCOME-TAX
,INSURANCE = :DBV-INSURANCE
,RESIDENT-TAX = :DBV-RESIDENT-TAX
,NET-PAYMENT = :DBV-NET-PAYMENT
,UPDATED-AT = CURRENT TIMESTAMP
WHERE EMP-ID = :DBV-EMP-ID
AND YEAR-MONTH = :DBV-YEAR-MONTH
END-EXEC
IF SQLCODE = 0
ADD 1 TO CUN-DB-UPD
ELSE
PERFORM 2100ERROUTSOR
END-IF
PERFORM 1100R02INNSOR
EXIT SECTION
END-IF.
*
PERFORM 2100ERROUTSOR.
PERFORM 1100R02INNSOR.
*
2000MAJSOR-EXT.
EXIT.
*
*****************************************************************
* サブモジュールNO: (2.1) *
* サブモジュール名: エラー出力処理 *
*****************************************************************
2100ERROUTSOR SECTION.
*
MOVE 'DB-ERR' TO W03ERR-CATEGORY.
MOVE DBV-EMP-ID TO W03ERR-DETAIL.
WRITE W03OUTREC.
ADD 1 TO CUN-W03OUT.
*
2100ERROUTSOR-EXT.
EXIT.
*
*****************************************************************
* サブモジュールNO: (3.0) *
* サブモジュール名: 終了処理 *
*****************************************************************
3000STPSOR SECTION.
*
CLOSE R02INNFIL
W03OUTFIL.
*
INITIALIZE M00MHOPAR.
MOVE CNS-MSGIINKES TO M00MSGCOD.
MOVE 'KYU06R02' TO M00UMKDATS22-01.
MOVE CUN-R02INN TO M00UMKDATS22-02.
PERFORM 4000MSGOUTSOR.
*
INITIALIZE M00MHOPAR.
MOVE CNS-MSGOUTKES TO M00MSGCOD.
MOVE 'DB-INSERT' TO M00UMKDATS22-01.
MOVE CUN-DB-INS TO M00UMKDATS22-02.
PERFORM 4000MSGOUTSOR.
*
INITIALIZE M00MHOPAR.
MOVE CNS-MSGOUTKES TO M00MSGCOD.
MOVE 'DB-UPDATE' TO M00UMKDATS22-01.
MOVE CUN-DB-UPD TO M00UMKDATS22-02.
PERFORM 4000MSGOUTSOR.
*
INITIALIZE M00MHOPAR.
MOVE CNS-MSGOUTKES TO M00MSGCOD.
MOVE 'KYU06W03' TO M00UMKDATS22-01.
MOVE CUN-W03OUT TO M00UMKDATS22-02.
PERFORM 4000MSGOUTSOR.
*
INITIALIZE M00MHOPAR.
MOVE CNS-MSGFIN TO M00MSGCOD.
PERFORM 4000MSGOUTSOR.
*
3000STPSOR-EXT.
EXIT.
*
*****************************************************************
* サブモジュールNO: (4.0) *
* サブモジュール名: メッセージ出力処理 *
*****************************************************************
4000MSGOUTSOR SECTION.
*
MOVE CNS-KN0002 TO M00UMKDATS22-03(1:1).
MOVE CNS-KN0002 TO M00UMKDATS22-04(1:1).
MOVE CNS-PRGIDX TO M00UMKDATS22-05.
CALL 'SUB02MSG' USING M00MHOPAR.
*
4000MSGOUTSOR-EXT.
EXIT.
*
*****************************************************************
* サブモジュールNO: (9.9) *
* サブモジュール名: ABEND処理 *
*****************************************************************
9999ABDSOR SECTION.
*
MOVE CNS-ABD999 TO E01ABDCOD.
CALL 'SUB03END' USING E01ABDPAR.
*
9999ABDSOR-EXT.
EXIT.