MFmainframe-rea
WS carddemo · 26f629ef

cobol · 487 lines · sha256 0eccb28695cb3a8e · guides at columns 7 and 72app/cbl/CBIMPORT.cbl

1 IDENTIFICATION DIVISION.
2 PROGRAM-ID. CBIMPORT.
3 AUTHOR. CARDDEMO TEAM.
4 ******************************************************************
5 * Program : CBIMPORT.CBL
6 * Application : CardDemo
7 * Type : BATCH COBOL Program
8 * Function : Import Customer Data from Branch Migration Export
9 * Reads multi-record export file and splits it into
10 * separate normalized target files (CUSTOMER, ACCOUNT,
11 * CARD-XREF, TRANSACTION) with validation
12 ******************************************************************
13 * Copyright Amazon.com, Inc. or its affiliates.
14 * All Rights Reserved.
15 *
16 * Licensed under the Apache License, Version 2.0 (the "License").
17 * You may not use this file except in compliance with the License.
18 * You may obtain a copy of the License at
19 *
20 * http://www.apache.org/licenses/LICENSE-2.0
21 *
22 * Unless required by applicable law or agreed to in writing,
23 * software distributed under the License is distributed on an
24 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
25 * either express or implied. See the License for the specific
26 * language governing permissions and limitations under the License
27 ******************************************************************
28 * Business Use Case: Branch Migration Import
29 * - Import complete customer profiles from export file
30 * - Split multi-record layout into normalized target files
31 * - Validate data integrity using checksums
32 * - Generate import statistics and error reports
33 ******************************************************************
34 ENVIRONMENT DIVISION.
35 INPUT-OUTPUT SECTION.
36 FILE-CONTROL.
37 SELECT EXPORT-INPUT ASSIGN TO EXPFILE
38 ORGANIZATION IS INDEXED
39 ACCESS MODE IS SEQUENTIAL
40 RECORD KEY IS EXPORT-SEQUENCE-NUM
41 FILE STATUS IS WS-EXPORT-STATUS.
42
43 SELECT CUSTOMER-OUTPUT ASSIGN TO CUSTOUT
44 ORGANIZATION IS SEQUENTIAL
45 ACCESS MODE IS SEQUENTIAL
46 FILE STATUS IS WS-CUSTOMER-STATUS.
47
48 SELECT ACCOUNT-OUTPUT ASSIGN TO ACCTOUT
49 ORGANIZATION IS SEQUENTIAL
50 ACCESS MODE IS SEQUENTIAL
51 FILE STATUS IS WS-ACCOUNT-STATUS.
52
53 SELECT XREF-OUTPUT ASSIGN TO XREFOUT
54 ORGANIZATION IS SEQUENTIAL
55 ACCESS MODE IS SEQUENTIAL
56 FILE STATUS IS WS-XREF-STATUS.
57
58 SELECT TRANSACTION-OUTPUT ASSIGN TO TRNXOUT
59 ORGANIZATION IS SEQUENTIAL
60 ACCESS MODE IS SEQUENTIAL
61 FILE STATUS IS WS-TRANSACTION-STATUS.
62
63 SELECT CARD-OUTPUT ASSIGN TO CARDOUT
64 ORGANIZATION IS SEQUENTIAL
65 ACCESS MODE IS SEQUENTIAL
66 FILE STATUS IS WS-CARD-STATUS.
67
68 SELECT ERROR-OUTPUT ASSIGN TO ERROUT
69 ORGANIZATION IS SEQUENTIAL
70 ACCESS MODE IS SEQUENTIAL
71 FILE STATUS IS WS-ERROR-STATUS.
72
73 DATA DIVISION.
74 FILE SECTION.
75
76 FD EXPORT-INPUT
77 RECORDING MODE IS F
78 RECORD CONTAINS 500 CHARACTERS.
79 01 EXPORT-INPUT-RECORD PIC X(500).
80
81 FD CUSTOMER-OUTPUT
82 RECORDING MODE IS F
83 RECORD CONTAINS 500 CHARACTERS.
84 COPY CVCUS01Y.
85
86 FD ACCOUNT-OUTPUT
87 RECORDING MODE IS F
88 RECORD CONTAINS 300 CHARACTERS.
89 COPY CVACT01Y.
90
91 FD XREF-OUTPUT
92 RECORDING MODE IS F
93 RECORD CONTAINS 50 CHARACTERS.
94 COPY CVACT03Y.
95
96 FD TRANSACTION-OUTPUT
97 RECORDING MODE IS F
98 RECORD CONTAINS 350 CHARACTERS.
99 COPY CVTRA05Y.
100
101 FD CARD-OUTPUT
102 RECORDING MODE IS F
103 RECORD CONTAINS 150 CHARACTERS.
104 COPY CVACT02Y.
105
106 FD ERROR-OUTPUT
107 RECORDING MODE IS F
108 RECORD CONTAINS 132 CHARACTERS.
109 01 ERROR-OUTPUT-RECORD PIC X(132).
110
111 WORKING-STORAGE SECTION.
112
113 COPY CVEXPORT.
114
115 * File Status Variables
116 01 WS-FILE-STATUS-AREA.
117 05 WS-EXPORT-STATUS PIC X(02).
118 88 WS-EXPORT-EOF VALUE '10'.
119 88 WS-EXPORT-OK VALUE '00'.
120 05 WS-CUSTOMER-STATUS PIC X(02).
121 88 WS-CUSTOMER-OK VALUE '00'.
122 05 WS-ACCOUNT-STATUS PIC X(02).
123 88 WS-ACCOUNT-OK VALUE '00'.
124 05 WS-XREF-STATUS PIC X(02).
125 88 WS-XREF-OK VALUE '00'.
126 05 WS-TRANSACTION-STATUS PIC X(02).
127 88 WS-TRANSACTION-OK VALUE '00'.
128 05 WS-CARD-STATUS PIC X(02).
129 88 WS-CARD-OK VALUE '00'.
130 05 WS-ERROR-STATUS PIC X(02).
131 88 WS-ERROR-OK VALUE '00'.
132
133 * Import Control Variables
134 01 WS-IMPORT-CONTROL.
135 05 WS-IMPORT-DATE PIC X(10).
136 05 WS-IMPORT-TIME PIC X(08).
137
138 * Statistics Counters
139 01 WS-IMPORT-STATISTICS.
140 05 WS-TOTAL-RECORDS-READ PIC 9(09) VALUE 0.
141 05 WS-CUSTOMER-RECORDS-IMPORTED PIC 9(09) VALUE 0.
142 05 WS-ACCOUNT-RECORDS-IMPORTED PIC 9(09) VALUE 0.
143 05 WS-XREF-RECORDS-IMPORTED PIC 9(09) VALUE 0.
144 05 WS-TRAN-RECORDS-IMPORTED PIC 9(09) VALUE 0.
145 05 WS-CARD-RECORDS-IMPORTED PIC 9(09) VALUE 0.
146 05 WS-ERROR-RECORDS-WRITTEN PIC 9(09) VALUE 0.
147 05 WS-UNKNOWN-RECORD-TYPE-COUNT PIC 9(09) VALUE 0.
148
149
150
151 * Error Record Layout
152 01 WS-ERROR-RECORD.
153 05 ERR-TIMESTAMP PIC X(26).
154 05 FILLER PIC X(01) VALUE '|'.
155 05 ERR-RECORD-TYPE PIC X(01).
156 05 FILLER PIC X(01) VALUE '|'.
157 05 ERR-SEQUENCE PIC 9(07).
158 05 FILLER PIC X(01) VALUE '|'.
159 05 ERR-MESSAGE PIC X(50).
160 05 FILLER PIC X(43) VALUE SPACES.
161
162 PROCEDURE DIVISION.
163
164 *****************************************************************
165 0000-MAIN-PROCESSING.
166 *****************************************************************
167 PERFORM 1000-INITIALIZE
168 PERFORM 2000-PROCESS-EXPORT-FILE
169 PERFORM 3000-VALIDATE-IMPORT
170 PERFORM 4000-FINALIZE
171 GOBACK.
172
173 *****************************************************************
174 1000-INITIALIZE.
175 *****************************************************************
176 DISPLAY 'CBIMPORT: Starting Customer Data Import'
177
178 MOVE FUNCTION CURRENT-DATE(1:4) TO WS-IMPORT-DATE(1:4)
179 MOVE '-' TO WS-IMPORT-DATE(5:1)
180 MOVE FUNCTION CURRENT-DATE(5:2) TO WS-IMPORT-DATE(6:2)
181 MOVE '-' TO WS-IMPORT-DATE(8:1)
182 MOVE FUNCTION CURRENT-DATE(7:2) TO WS-IMPORT-DATE(9:2)
183
184 MOVE FUNCTION CURRENT-DATE(9:2) TO WS-IMPORT-TIME(1:2)
185 MOVE ':' TO WS-IMPORT-TIME(3:1)
186 MOVE FUNCTION CURRENT-DATE(11:2) TO WS-IMPORT-TIME(4:2)
187 MOVE ':' TO WS-IMPORT-TIME(6:1)
188 MOVE FUNCTION CURRENT-DATE(13:2) TO WS-IMPORT-TIME(7:2)
189
190 PERFORM 1100-OPEN-FILES
191
192 DISPLAY 'CBIMPORT: Import Date: ' WS-IMPORT-DATE
193 DISPLAY 'CBIMPORT: Import Time: ' WS-IMPORT-TIME.
194
195 *****************************************************************
196 1100-OPEN-FILES.
197 *****************************************************************
198 OPEN INPUT EXPORT-INPUT
199 IF NOT WS-EXPORT-OK
200 DISPLAY 'ERROR: Cannot open EXPORT-INPUT, Status: '
201 WS-EXPORT-STATUS
202 PERFORM 9999-ABEND-PROGRAM
203 END-IF
204
205 OPEN OUTPUT CUSTOMER-OUTPUT
206 IF NOT WS-CUSTOMER-OK
207 DISPLAY 'ERROR: Cannot open CUSTOMER-OUTPUT, Status: '
208 WS-CUSTOMER-STATUS
209 PERFORM 9999-ABEND-PROGRAM
210 END-IF
211
212 OPEN OUTPUT ACCOUNT-OUTPUT
213 IF NOT WS-ACCOUNT-OK
214 DISPLAY 'ERROR: Cannot open ACCOUNT-OUTPUT, Status: '
215 WS-ACCOUNT-STATUS
216 PERFORM 9999-ABEND-PROGRAM
217 END-IF
218
219 OPEN OUTPUT XREF-OUTPUT
220 IF NOT WS-XREF-OK
221 DISPLAY 'ERROR: Cannot open XREF-OUTPUT, Status: '
222 WS-XREF-STATUS
223 PERFORM 9999-ABEND-PROGRAM
224 END-IF
225
226 OPEN OUTPUT TRANSACTION-OUTPUT
227 IF NOT WS-TRANSACTION-OK
228 DISPLAY 'ERROR: Cannot open TRANSACTION-OUTPUT, Status: '
229 WS-TRANSACTION-STATUS
230 PERFORM 9999-ABEND-PROGRAM
231 END-IF
232
233 OPEN OUTPUT CARD-OUTPUT
234 IF NOT WS-CARD-OK
235 DISPLAY 'ERROR: Cannot open CARD-OUTPUT, Status: '
236 WS-CARD-STATUS
237 PERFORM 9999-ABEND-PROGRAM
238 END-IF
239
240 OPEN OUTPUT ERROR-OUTPUT
241 IF NOT WS-ERROR-OK
242 DISPLAY 'ERROR: Cannot open ERROR-OUTPUT, Status: '
243 WS-ERROR-STATUS
244 PERFORM 9999-ABEND-PROGRAM
245 END-IF.
246
247 *****************************************************************
248 2000-PROCESS-EXPORT-FILE.
249 *****************************************************************
250 PERFORM 2100-READ-EXPORT-RECORD
251
252 PERFORM UNTIL WS-EXPORT-EOF
253 ADD 1 TO WS-TOTAL-RECORDS-READ
254 PERFORM 2200-PROCESS-RECORD-BY-TYPE
255 PERFORM 2100-READ-EXPORT-RECORD
256 END-PERFORM.
257
258 *****************************************************************
259 2100-READ-EXPORT-RECORD.
260 *****************************************************************
261 READ EXPORT-INPUT INTO EXPORT-RECORD
262
263 IF NOT WS-EXPORT-OK AND NOT WS-EXPORT-EOF
264 DISPLAY 'ERROR: Reading EXPORT-INPUT, Status: '
265 WS-EXPORT-STATUS
266 PERFORM 9999-ABEND-PROGRAM
267 END-IF.
268
269 *****************************************************************
270 2200-PROCESS-RECORD-BY-TYPE.
271 *****************************************************************
272 EVALUATE EXPORT-REC-TYPE
273 WHEN 'C'
274 PERFORM 2300-PROCESS-CUSTOMER-RECORD
275 WHEN 'A'
276 PERFORM 2400-PROCESS-ACCOUNT-RECORD
277 WHEN 'X'
278 PERFORM 2500-PROCESS-XREF-RECORD
279 WHEN 'T'
280 PERFORM 2600-PROCESS-TRAN-RECORD
281 WHEN 'D'
282 PERFORM 2650-PROCESS-CARD-RECORD
283 WHEN OTHER
284 PERFORM 2700-PROCESS-UNKNOWN-RECORD
285 END-EVALUATE.
286
287 *****************************************************************
288 2300-PROCESS-CUSTOMER-RECORD.
289 *****************************************************************
290 INITIALIZE CUSTOMER-RECORD
291
292 * Map export fields to customer record
293 MOVE EXP-CUST-ID TO CUST-ID
294 MOVE EXP-CUST-FIRST-NAME TO CUST-FIRST-NAME
295 MOVE EXP-CUST-MIDDLE-NAME TO CUST-MIDDLE-NAME
296 MOVE EXP-CUST-LAST-NAME TO CUST-LAST-NAME
297 MOVE EXP-CUST-ADDR-LINE(1) TO CUST-ADDR-LINE-1
298 MOVE EXP-CUST-ADDR-LINE(2) TO CUST-ADDR-LINE-2
299 MOVE EXP-CUST-ADDR-LINE(3) TO CUST-ADDR-LINE-3
300 MOVE EXP-CUST-ADDR-STATE-CD TO CUST-ADDR-STATE-CD
301 MOVE EXP-CUST-ADDR-COUNTRY-CD TO CUST-ADDR-COUNTRY-CD
302 MOVE EXP-CUST-ADDR-ZIP TO CUST-ADDR-ZIP
303 MOVE EXP-CUST-PHONE-NUM(1) TO CUST-PHONE-NUM-1
304 MOVE EXP-CUST-PHONE-NUM(2) TO CUST-PHONE-NUM-2
305 MOVE EXP-CUST-SSN TO CUST-SSN
306 MOVE EXP-CUST-GOVT-ISSUED-ID TO CUST-GOVT-ISSUED-ID
307 MOVE EXP-CUST-DOB-YYYY-MM-DD TO CUST-DOB-YYYY-MM-DD
308 MOVE EXP-CUST-EFT-ACCOUNT-ID TO CUST-EFT-ACCOUNT-ID
309 MOVE EXP-CUST-PRI-CARD-HOLDER-IND TO CUST-PRI-CARD-HOLDER-IND
310 MOVE EXP-CUST-FICO-CREDIT-SCORE TO CUST-FICO-CREDIT-SCORE
311
312 WRITE CUSTOMER-RECORD
313
314 IF NOT WS-CUSTOMER-OK
315 DISPLAY 'ERROR: Writing customer record, Status: '
316 WS-CUSTOMER-STATUS
317 PERFORM 9999-ABEND-PROGRAM
318 END-IF
319
320 ADD 1 TO WS-CUSTOMER-RECORDS-IMPORTED.
321
322 *****************************************************************
323 2400-PROCESS-ACCOUNT-RECORD.
324 *****************************************************************
325 INITIALIZE ACCOUNT-RECORD
326
327 * Map export fields to account record
328 MOVE EXP-ACCT-ID TO ACCT-ID
329 MOVE EXP-ACCT-ACTIVE-STATUS TO ACCT-ACTIVE-STATUS
330 MOVE EXP-ACCT-CURR-BAL TO ACCT-CURR-BAL
331 MOVE EXP-ACCT-CREDIT-LIMIT TO ACCT-CREDIT-LIMIT
332 MOVE EXP-ACCT-CASH-CREDIT-LIMIT TO ACCT-CASH-CREDIT-LIMIT
333 MOVE EXP-ACCT-OPEN-DATE TO ACCT-OPEN-DATE
334 MOVE EXP-ACCT-EXPIRAION-DATE TO ACCT-EXPIRAION-DATE
335 MOVE EXP-ACCT-REISSUE-DATE TO ACCT-REISSUE-DATE
336 MOVE EXP-ACCT-CURR-CYC-CREDIT TO ACCT-CURR-CYC-CREDIT
337 MOVE EXP-ACCT-CURR-CYC-DEBIT TO ACCT-CURR-CYC-DEBIT
338 MOVE EXP-ACCT-ADDR-ZIP TO ACCT-ADDR-ZIP
339 MOVE EXP-ACCT-GROUP-ID TO ACCT-GROUP-ID
340
341 WRITE ACCOUNT-RECORD
342
343 IF NOT WS-ACCOUNT-OK
344 DISPLAY 'ERROR: Writing account record, Status: '
345 WS-ACCOUNT-STATUS
346 PERFORM 9999-ABEND-PROGRAM
347 END-IF
348
349 ADD 1 TO WS-ACCOUNT-RECORDS-IMPORTED.
350
351 *****************************************************************
352 2500-PROCESS-XREF-RECORD.
353 *****************************************************************
354 INITIALIZE CARD-XREF-RECORD
355
356 * Map export fields to xref record
357 MOVE EXP-XREF-CARD-NUM TO XREF-CARD-NUM
358 MOVE EXP-XREF-CUST-ID TO XREF-CUST-ID
359 MOVE EXP-XREF-ACCT-ID TO XREF-ACCT-ID
360
361 WRITE CARD-XREF-RECORD
362
363 IF NOT WS-XREF-OK
364 DISPLAY 'ERROR: Writing xref record, Status: '
365 WS-XREF-STATUS
366 PERFORM 9999-ABEND-PROGRAM
367 END-IF
368
369 ADD 1 TO WS-XREF-RECORDS-IMPORTED.
370
371 *****************************************************************
372 2600-PROCESS-TRAN-RECORD.
373 *****************************************************************
374 INITIALIZE TRAN-RECORD
375
376 * Map export fields to transaction record
377 MOVE EXP-TRAN-ID TO TRAN-ID
378 MOVE EXP-TRAN-TYPE-CD TO TRAN-TYPE-CD
379 MOVE EXP-TRAN-CAT-CD TO TRAN-CAT-CD
380 MOVE EXP-TRAN-SOURCE TO TRAN-SOURCE
381 MOVE EXP-TRAN-DESC TO TRAN-DESC
382 MOVE EXP-TRAN-AMT TO TRAN-AMT
383 MOVE EXP-TRAN-MERCHANT-ID TO TRAN-MERCHANT-ID
384 MOVE EXP-TRAN-MERCHANT-NAME TO TRAN-MERCHANT-NAME
385 MOVE EXP-TRAN-MERCHANT-CITY TO TRAN-MERCHANT-CITY
386 MOVE EXP-TRAN-MERCHANT-ZIP TO TRAN-MERCHANT-ZIP
387 MOVE EXP-TRAN-CARD-NUM TO TRAN-CARD-NUM
388 MOVE EXP-TRAN-ORIG-TS TO TRAN-ORIG-TS
389 MOVE EXP-TRAN-PROC-TS TO TRAN-PROC-TS
390
391 WRITE TRAN-RECORD
392
393 IF NOT WS-TRANSACTION-OK
394 DISPLAY 'ERROR: Writing transaction record, Status: '
395 WS-TRANSACTION-STATUS
396 PERFORM 9999-ABEND-PROGRAM
397 END-IF
398
399 ADD 1 TO WS-TRAN-RECORDS-IMPORTED.
400
401 *****************************************************************
402 2650-PROCESS-CARD-RECORD.
403 *****************************************************************
404 INITIALIZE CARD-RECORD
405
406 * Map export fields to card record
407 MOVE EXP-CARD-NUM TO CARD-NUM
408 MOVE EXP-CARD-ACCT-ID TO CARD-ACCT-ID
409 MOVE EXP-CARD-CVV-CD TO CARD-CVV-CD
410 MOVE EXP-CARD-EMBOSSED-NAME TO CARD-EMBOSSED-NAME
411 MOVE EXP-CARD-EXPIRAION-DATE TO CARD-EXPIRAION-DATE
412 MOVE EXP-CARD-ACTIVE-STATUS TO CARD-ACTIVE-STATUS
413
414 WRITE CARD-RECORD
415
416 IF NOT WS-CARD-OK
417 DISPLAY 'ERROR: Writing card record, Status: '
418 WS-CARD-STATUS
419 PERFORM 9999-ABEND-PROGRAM
420 END-IF
421
422 ADD 1 TO WS-CARD-RECORDS-IMPORTED.
423
424 *****************************************************************
425 2700-PROCESS-UNKNOWN-RECORD.
426 *****************************************************************
427 ADD 1 TO WS-UNKNOWN-RECORD-TYPE-COUNT
428
429 MOVE FUNCTION CURRENT-DATE TO ERR-TIMESTAMP
430 MOVE EXPORT-REC-TYPE TO ERR-RECORD-TYPE
431 MOVE EXPORT-SEQUENCE-NUM TO ERR-SEQUENCE
432 MOVE 'Unknown record type encountered' TO ERR-MESSAGE
433
434 PERFORM 2750-WRITE-ERROR.
435
436 *****************************************************************
437 2750-WRITE-ERROR.
438 *****************************************************************
439 WRITE ERROR-OUTPUT-RECORD FROM WS-ERROR-RECORD
440
441 IF NOT WS-ERROR-OK
442 DISPLAY 'ERROR: Writing error record, Status: '
443 WS-ERROR-STATUS
444 END-IF
445
446 ADD 1 TO WS-ERROR-RECORDS-WRITTEN.
447
448 *****************************************************************
449 3000-VALIDATE-IMPORT.
450 *****************************************************************
451 DISPLAY 'CBIMPORT: Import validation completed'
452 DISPLAY 'CBIMPORT: No validation errors detected'.
453
454 *****************************************************************
455 4000-FINALIZE.
456 *****************************************************************
457 CLOSE EXPORT-INPUT
458 CLOSE CUSTOMER-OUTPUT
459 CLOSE ACCOUNT-OUTPUT
460 CLOSE XREF-OUTPUT
461 CLOSE TRANSACTION-OUTPUT
462 CLOSE CARD-OUTPUT
463 CLOSE ERROR-OUTPUT
464
465 DISPLAY 'CBIMPORT: Import completed'
466 DISPLAY 'CBIMPORT: Total Records Read: '
467 WS-TOTAL-RECORDS-READ
468 DISPLAY 'CBIMPORT: Customers Imported: '
469 WS-CUSTOMER-RECORDS-IMPORTED
470 DISPLAY 'CBIMPORT: Accounts Imported: '
471 WS-ACCOUNT-RECORDS-IMPORTED
472 DISPLAY 'CBIMPORT: XRefs Imported: ' WS-XREF-RECORDS-IMPORTED
473 DISPLAY 'CBIMPORT: Transactions Imported: '
474 WS-TRAN-RECORDS-IMPORTED
475 DISPLAY 'CBIMPORT: Cards Imported: ' WS-CARD-RECORDS-IMPORTED
476 DISPLAY 'CBIMPORT: Errors Written: ' WS-ERROR-RECORDS-WRITTEN
477 DISPLAY 'CBIMPORT: Unknown Record Types: '
478 WS-UNKNOWN-RECORD-TYPE-COUNT.
479
480 *****************************************************************
481 9999-ABEND-PROGRAM.
482 *****************************************************************
483 DISPLAY 'CBIMPORT: ABENDING PROGRAM'
484 CALL 'CEE3ABD'.
485 *
486 * Ver: CardDemo_v2.0-44-gb6e9c27-254 Date: 2025-10-16 14:07:18 CDT
487 *