feat(domain): V22 비즈니스 도메인 6 카테고리 29개 + 사전 매핑 30+
신규 카테고리: AUDIT (5) — 모든 테이블 공통 감사 컬럼 - DOM_CREATED_BY / DOM_UPDATED_BY (사용자 ID) - DOM_IP_ADDRESS (IPv4/IPv6 통합) - DOM_USER_AGENT (HTTP 헤더) - DOM_VERSION (낙관적 잠금) WORKFLOW (5) — 결재 / 승인 흐름 - DOM_APPROVE_STATUS (PENDING/APPROVED/REJECTED/CANCELLED) - DOM_APPROVER_ID / DOM_APPROVE_COMMENT - DOM_WORKFLOW_STAGE (DRAFT/REVIEW/APPROVED/PUBLISHED/ARCHIVED) - DOM_PRIORITY (HIGH/MEDIUM/LOW) SETTLEMENT_BIZ (6) — GA 정산 핵심 비즈 - DOM_RECONCILE_STATUS (대사 상태) - DOM_RECONCILE_DIFF (보험사-시스템 차액) - DOM_LAPSE_MONTH (실효 경과월 — 환수 규정 매칭) - DOM_INSTALLMENT_SEQ / DOM_INSTALLMENT_TOTAL (분할 환수 회차) - DOM_PERFORMANCE_GRADE (A/B/C/D/F) FILE (4) — 파일 첨부 - DOM_FILE_ID (file_storage FK) - DOM_FILE_PATH / DOM_FILE_SIZE / DOM_MIME_TYPE TAX (4) — 세무 - DOM_TAX_INVOICE_NO (세금계산서) - DOM_VAT (부가세 10%) - DOM_INCOME_TAX (소득세 3%) / DOM_LOCAL_TAX (지방세) BANKING (5) — 은행 / 결제 - DOM_TRANSFER_REF (이체 참조번호) - DOM_TRANSFER_FEE / DOM_CURRENCY (ISO 4217) - DOM_FX_RATE (환율 6자리) / DOM_SWIFT_CODE (BIC) 데이터 사전 매핑 30+ 추가: - exception_ledger (8) / chargeback (7) / reconciliation (7) / batch_job_log (6) - file_storage (6) / api_access_log (6) / data_change_log (6) - recruit_ledger·maintain_ledger·settle_master 의 audit 컬럼 검증: - Flyway V22 적용 35ms - 전체 도메인 49 → 78 (16 카테고리) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,196 @@
|
|||||||
|
-- V22: GA 정산 솔루션의 비즈니스 도메인 확장 (6 카테고리 29개 + 사전 매핑 보강)
|
||||||
|
|
||||||
|
INSERT INTO ga.data_domain
|
||||||
|
(domain_code, domain_name, domain_category, data_type, length, precision, scale,
|
||||||
|
format_pattern, validation_regex, example_value, masking_type, encrypted, description, is_active)
|
||||||
|
VALUES
|
||||||
|
|
||||||
|
-- ============================================================
|
||||||
|
-- AUDIT (감사) — 모든 테이블의 공통 감사 컬럼 표준화
|
||||||
|
-- ============================================================
|
||||||
|
('DOM_CREATED_BY', '등록자 ID', 'AUDIT', 'BIGINT', NULL, NULL, NULL,
|
||||||
|
NULL, NULL, '1001', 'NONE', 'N',
|
||||||
|
'users.user_id 참조 (생성한 사용자)', 'Y'),
|
||||||
|
('DOM_UPDATED_BY', '수정자 ID', 'AUDIT', 'BIGINT', NULL, NULL, NULL,
|
||||||
|
NULL, NULL, '1001', 'NONE', 'N',
|
||||||
|
'users.user_id 참조 (마지막 수정자)', 'Y'),
|
||||||
|
('DOM_IP_ADDRESS', 'IP 주소', 'AUDIT', 'VARCHAR', 45, NULL, NULL,
|
||||||
|
NULL, '^([0-9]{1,3}\.){3}[0-9]{1,3}$|^([0-9a-fA-F:]+)$', '192.168.0.60', 'NONE', 'N',
|
||||||
|
'IPv4(15) 또는 IPv6(45)', 'Y'),
|
||||||
|
('DOM_USER_AGENT', '클라이언트 정보', 'AUDIT', 'VARCHAR', 500, NULL, NULL,
|
||||||
|
NULL, NULL, 'Mozilla/5.0 ...', 'NONE', 'N',
|
||||||
|
'HTTP User-Agent 헤더', 'Y'),
|
||||||
|
('DOM_VERSION', '낙관적 잠금 버전','AUDIT', 'INTEGER', NULL, NULL, NULL,
|
||||||
|
NULL, NULL, '3', 'NONE', 'N',
|
||||||
|
'동시 수정 충돌 감지용 (UPDATE 시 +1)', 'Y'),
|
||||||
|
|
||||||
|
-- ============================================================
|
||||||
|
-- WORKFLOW (결재 / 승인)
|
||||||
|
-- ============================================================
|
||||||
|
('DOM_APPROVE_STATUS', '승인 상태', 'WORKFLOW', 'VARCHAR', 20, NULL, NULL,
|
||||||
|
NULL, NULL, 'PENDING', 'NONE', 'N',
|
||||||
|
'PENDING / APPROVED / REJECTED / CANCELLED', 'Y'),
|
||||||
|
('DOM_APPROVER_ID', '승인자 ID', 'WORKFLOW', 'BIGINT', NULL, NULL, NULL,
|
||||||
|
NULL, NULL, '1001', 'NONE', 'N',
|
||||||
|
'users.user_id 참조', 'Y'),
|
||||||
|
('DOM_APPROVE_COMMENT', '승인/반려 사유','WORKFLOW', 'TEXT', NULL, NULL, NULL,
|
||||||
|
NULL, NULL, '예외 사유 검토 후 승인', 'NONE', 'N',
|
||||||
|
'결재 메모 (반려 시 필수)', 'Y'),
|
||||||
|
('DOM_WORKFLOW_STAGE', '워크플로 단계', 'WORKFLOW', 'VARCHAR', 30, NULL, NULL,
|
||||||
|
NULL, NULL, 'REVIEW', 'NONE', 'N',
|
||||||
|
'DRAFT / REVIEW / APPROVED / PUBLISHED / ARCHIVED', 'Y'),
|
||||||
|
('DOM_PRIORITY', '우선순위', 'WORKFLOW', 'VARCHAR', 10, NULL, NULL,
|
||||||
|
NULL, '^(HIGH|MEDIUM|LOW)$', 'HIGH', 'NONE', 'N',
|
||||||
|
'HIGH / MEDIUM / LOW', 'Y'),
|
||||||
|
|
||||||
|
-- ============================================================
|
||||||
|
-- SETTLEMENT_BIZ (정산 비즈니스 — GA 솔루션 핵심)
|
||||||
|
-- ============================================================
|
||||||
|
('DOM_RECONCILE_STATUS', '대사 상태', 'SETTLEMENT_BIZ', 'VARCHAR', 20, NULL, NULL,
|
||||||
|
NULL, NULL, 'MATCH', 'NONE', 'N',
|
||||||
|
'PENDING / MATCH / MISMATCH / DIFF', 'Y'),
|
||||||
|
('DOM_RECONCILE_DIFF', '대사 차액', 'SETTLEMENT_BIZ', 'DECIMAL', NULL, 15, 2,
|
||||||
|
'#,##0', NULL, '12500.00', 'NONE', 'N',
|
||||||
|
'보험사 통보액 - 시스템 계산액 (음수 가능)', 'Y'),
|
||||||
|
('DOM_LAPSE_MONTH', '실효 경과월', 'SETTLEMENT_BIZ', 'INTEGER', NULL, NULL, NULL,
|
||||||
|
NULL, '^[0-9]{1,3}$', '13', 'NONE', 'N',
|
||||||
|
'계약 효력일~실효일 사이 개월 수 (환수 규정 매칭)', 'Y'),
|
||||||
|
('DOM_INSTALLMENT_SEQ', '분할 회차', 'SETTLEMENT_BIZ', 'INTEGER', NULL, NULL, NULL,
|
||||||
|
NULL, NULL, '2', 'NONE', 'N',
|
||||||
|
'환수 분할 시 N차 (1~installment_total)', 'Y'),
|
||||||
|
('DOM_INSTALLMENT_TOTAL','분할 총 회차', 'SETTLEMENT_BIZ', 'INTEGER', NULL, NULL, NULL,
|
||||||
|
NULL, NULL, '6', 'NONE', 'N',
|
||||||
|
'환수 분할 총 회차 (보통 1/3/6/12)', 'Y'),
|
||||||
|
('DOM_PERFORMANCE_GRADE','실적 등급', 'SETTLEMENT_BIZ', 'VARCHAR', 10, NULL, NULL,
|
||||||
|
NULL, '^[A-F]$|^GOLD$|^SILVER$|^BRONZE$', 'A', 'NONE', 'N',
|
||||||
|
'A/B/C/D/F 또는 GOLD/SILVER/BRONZE — 지급율 차등', 'Y'),
|
||||||
|
|
||||||
|
-- ============================================================
|
||||||
|
-- FILE (파일 / 첨부)
|
||||||
|
-- ============================================================
|
||||||
|
('DOM_FILE_ID', '파일 ID', 'FILE', 'BIGINT', NULL, NULL, NULL,
|
||||||
|
NULL, NULL, '12345', 'NONE', 'N',
|
||||||
|
'file_storage.file_id 참조', 'Y'),
|
||||||
|
('DOM_FILE_PATH', '파일 경로', 'FILE', 'VARCHAR', 500, NULL, NULL,
|
||||||
|
NULL, NULL, '/upload/2026/05/abc.pdf', 'NONE', 'N',
|
||||||
|
'서버 저장 경로 (또는 S3 키)', 'Y'),
|
||||||
|
('DOM_FILE_SIZE', '파일 크기', 'FILE', 'BIGINT', NULL, NULL, NULL,
|
||||||
|
NULL, NULL, '1048576', 'NONE', 'N',
|
||||||
|
'바이트 단위 (1MB = 1048576)', 'Y'),
|
||||||
|
('DOM_MIME_TYPE', 'MIME 타입', 'FILE', 'VARCHAR', 100, NULL, NULL,
|
||||||
|
NULL, NULL, 'application/pdf', 'NONE', 'N',
|
||||||
|
'application/pdf, image/png 등', 'Y'),
|
||||||
|
|
||||||
|
-- ============================================================
|
||||||
|
-- TAX (세무)
|
||||||
|
-- ============================================================
|
||||||
|
('DOM_TAX_INVOICE_NO', '세금계산서 번호', 'TAX', 'VARCHAR', 50, NULL, NULL,
|
||||||
|
NULL, NULL, '202605-00123', 'NONE', 'N',
|
||||||
|
'국세청 발행 번호 또는 내부 일련번호', 'Y'),
|
||||||
|
('DOM_VAT', '부가세', 'TAX', 'DECIMAL', NULL, 15, 2,
|
||||||
|
'#,##0', NULL, '300000.00', 'NONE', 'N',
|
||||||
|
'부가가치세 (10%)', 'Y'),
|
||||||
|
('DOM_INCOME_TAX', '소득세', 'TAX', 'DECIMAL', NULL, 15, 2,
|
||||||
|
'#,##0', NULL, '99000.00', 'NONE', 'N',
|
||||||
|
'원천징수 소득세 (3%)', 'Y'),
|
||||||
|
('DOM_LOCAL_TAX', '지방세', 'TAX', 'DECIMAL', NULL, 15, 2,
|
||||||
|
'#,##0', NULL, '9900.00', 'NONE', 'N',
|
||||||
|
'지방소득세 (소득세의 10%)', 'Y'),
|
||||||
|
|
||||||
|
-- ============================================================
|
||||||
|
-- BANKING (은행 / 결제)
|
||||||
|
-- ============================================================
|
||||||
|
('DOM_TRANSFER_REF', '이체 참조번호', 'BANKING', 'VARCHAR', 50, NULL, NULL,
|
||||||
|
NULL, NULL, 'TRX-20260510-0001', 'NONE', 'N',
|
||||||
|
'은행/PG 측 이체 추적 번호', 'Y'),
|
||||||
|
('DOM_TRANSFER_FEE', '이체 수수료', 'BANKING', 'DECIMAL', NULL, 15, 2,
|
||||||
|
'#,##0', NULL, '500.00', 'NONE', 'N',
|
||||||
|
'건당 이체 수수료 (지급액에서 차감 가능)', 'Y'),
|
||||||
|
('DOM_CURRENCY', '통화 코드', 'BANKING', 'CHAR', 3, NULL, NULL,
|
||||||
|
NULL, '^[A-Z]{3}$', 'KRW', 'NONE', 'N',
|
||||||
|
'ISO 4217 (KRW / USD / EUR / JPY)', 'Y'),
|
||||||
|
('DOM_FX_RATE', '환율', 'BANKING', 'DECIMAL', NULL, 15, 6,
|
||||||
|
'#,##0.000000', NULL, '1350.123456', 'NONE', 'N',
|
||||||
|
'기준 통화 → 거래 통화 (소수점 6자리)', 'Y'),
|
||||||
|
('DOM_SWIFT_CODE', 'SWIFT BIC', 'BANKING', 'VARCHAR', 11, NULL, NULL,
|
||||||
|
NULL, '^[A-Z]{6}[A-Z0-9]{2,5}$', 'KOEXKRSE', 'NONE', 'N',
|
||||||
|
'국제 송금용 은행 식별 코드', 'Y')
|
||||||
|
|
||||||
|
ON CONFLICT (domain_code) DO NOTHING;
|
||||||
|
|
||||||
|
|
||||||
|
-- ============================================================
|
||||||
|
-- 데이터 사전 매핑 보강 (V20 / V21 누락분 + 신규 매핑)
|
||||||
|
-- ============================================================
|
||||||
|
INSERT INTO ga.data_dictionary
|
||||||
|
(table_name, column_name, domain_code, column_label, is_pk, is_fk, fk_reference, is_required, description)
|
||||||
|
VALUES
|
||||||
|
-- exception_ledger 핵심
|
||||||
|
('exception_ledger', 'ledger_id', 'DOM_ID_BIGINT', '원장ID', 'Y', 'N', NULL, 'Y', NULL),
|
||||||
|
('exception_ledger', 'agent_id', 'DOM_ID_BIGINT', '설계사ID', 'N', 'Y', 'agent.agent_id', 'Y', NULL),
|
||||||
|
('exception_ledger', 'exception_code', 'DOM_STATUS', '예외코드', 'N', 'Y', 'exception_type_code.exception_code', 'Y', NULL),
|
||||||
|
('exception_ledger', 'amount', 'DOM_AMOUNT', '금액', 'N', 'N', NULL, 'Y', NULL),
|
||||||
|
('exception_ledger', 'settle_month', 'DOM_SETTLE_MONTH', '정산월', 'N', 'N', NULL, 'Y', NULL),
|
||||||
|
('exception_ledger', 'approve_status', 'DOM_APPROVE_STATUS', '승인상태', 'N', 'N', NULL, 'Y', 'PENDING/APPROVED/REJECTED'),
|
||||||
|
('exception_ledger', 'approver_id', 'DOM_APPROVER_ID', '승인자', 'N', 'Y', 'users.user_id', 'N', NULL),
|
||||||
|
('exception_ledger', 'approve_date', 'DOM_DATETIME', '승인일시', 'N', 'N', NULL, 'N', NULL),
|
||||||
|
|
||||||
|
-- chargeback 핵심
|
||||||
|
('chargeback', 'cb_id', 'DOM_ID_BIGINT', '환수ID', 'Y', 'N', NULL, 'Y', NULL),
|
||||||
|
('chargeback', 'agent_id', 'DOM_ID_BIGINT', '설계사ID', 'N', 'Y', 'agent.agent_id', 'Y', NULL),
|
||||||
|
('chargeback', 'lapse_month', 'DOM_LAPSE_MONTH', '실효경과월', 'N', 'N', NULL, 'Y', NULL),
|
||||||
|
('chargeback', 'cb_rate', 'DOM_RATE_PCT', '환수율', 'N', 'N', NULL, 'Y', NULL),
|
||||||
|
('chargeback', 'cb_amount', 'DOM_COMMISSION', '환수금액', 'N', 'N', NULL, 'Y', NULL),
|
||||||
|
('chargeback', 'current_installment','DOM_INSTALLMENT_SEQ','분할회차', 'N', 'N', NULL, 'N', NULL),
|
||||||
|
('chargeback', 'settle_month', 'DOM_SETTLE_MONTH', '정산월', 'N', 'N', NULL, 'Y', NULL),
|
||||||
|
|
||||||
|
-- reconciliation
|
||||||
|
('reconciliation', 'recon_id', 'DOM_ID_BIGINT', '대사ID', 'Y', 'N', NULL, 'Y', NULL),
|
||||||
|
('reconciliation', 'company_code', 'DOM_COMPANY_CODE', '보험사', 'N', 'N', NULL, 'Y', NULL),
|
||||||
|
('reconciliation', 'settle_month', 'DOM_SETTLE_MONTH', '정산월', 'N', 'N', NULL, 'Y', NULL),
|
||||||
|
('reconciliation', 'company_amount', 'DOM_AMOUNT', '보험사통보액','N','N', NULL, 'Y', NULL),
|
||||||
|
('reconciliation', 'system_amount', 'DOM_AMOUNT', '시스템계산액','N','N', NULL, 'Y', NULL),
|
||||||
|
('reconciliation', 'diff_amount', 'DOM_RECONCILE_DIFF', '차액', 'N', 'N', NULL, 'Y', NULL),
|
||||||
|
('reconciliation', 'status', 'DOM_RECONCILE_STATUS', '대사상태', 'N', 'N', NULL, 'Y', NULL),
|
||||||
|
|
||||||
|
-- batch_job_log
|
||||||
|
('batch_job_log', 'job_id', 'DOM_ID_BIGINT', '배치ID', 'Y', 'N', NULL, 'Y', NULL),
|
||||||
|
('batch_job_log', 'batch_id', 'DOM_BATCH_ID', '배치코드', 'N', 'N', NULL, 'Y', 'monthlySettlementJob 등'),
|
||||||
|
('batch_job_log', 'settle_month', 'DOM_SETTLE_MONTH','정산월', 'N', 'N', NULL, 'N', NULL),
|
||||||
|
('batch_job_log', 'status', 'DOM_STATUS', '상태', 'N', 'N', NULL, 'Y', 'REQUESTED/RUNNING/COMPLETED/FAILED'),
|
||||||
|
('batch_job_log', 'started_at', 'DOM_DATETIME', '시작일시', 'N', 'N', NULL, 'N', NULL),
|
||||||
|
('batch_job_log', 'finished_at', 'DOM_DATETIME', '종료일시', 'N', 'N', NULL, 'N', NULL),
|
||||||
|
|
||||||
|
-- file_storage
|
||||||
|
('file_storage', 'file_id', 'DOM_FILE_ID', '파일ID', 'Y', 'N', NULL, 'Y', NULL),
|
||||||
|
('file_storage', 'original_name', 'DOM_TEXT_SHORT', '원본파일명', 'N', 'N', NULL, 'Y', NULL),
|
||||||
|
('file_storage', 'stored_name', 'DOM_TEXT_SHORT', '저장파일명', 'N', 'N', NULL, 'Y', NULL),
|
||||||
|
('file_storage', 'file_path', 'DOM_FILE_PATH', '파일경로', 'N', 'N', NULL, 'Y', NULL),
|
||||||
|
('file_storage', 'file_size', 'DOM_FILE_SIZE', '파일크기', 'N', 'N', NULL, 'N', NULL),
|
||||||
|
('file_storage', 'mime_type', 'DOM_MIME_TYPE', 'MIME타입', 'N', 'N', NULL, 'N', NULL),
|
||||||
|
|
||||||
|
-- api_access_log
|
||||||
|
('api_access_log', 'log_id', 'DOM_ID_BIGINT', '로그ID', 'Y', 'N', NULL, 'Y', NULL),
|
||||||
|
('api_access_log', 'user_id', 'DOM_ID_BIGINT', '사용자ID', 'N', 'Y', 'users.user_id', 'N', NULL),
|
||||||
|
('api_access_log', 'request_url', 'DOM_TEXT_SHORT', '요청URL', 'N', 'N', NULL, 'Y', NULL),
|
||||||
|
('api_access_log', 'response_status', 'DOM_ID_BIGINT', 'HTTP상태', 'N', 'N', NULL, 'N', NULL),
|
||||||
|
('api_access_log', 'response_time', 'DOM_ID_BIGINT', '응답시간', 'N', 'N', NULL, 'N', '단위: ms'),
|
||||||
|
('api_access_log', 'ip_address', 'DOM_IP_ADDRESS', 'IP', 'N', 'N', NULL, 'N', NULL),
|
||||||
|
|
||||||
|
-- data_change_log
|
||||||
|
('data_change_log', 'log_id', 'DOM_ID_BIGINT', '로그ID', 'Y', 'N', NULL, 'Y', NULL),
|
||||||
|
('data_change_log', 'table_name', 'DOM_TEXT_SHORT', '테이블명', 'N', 'N', NULL, 'Y', NULL),
|
||||||
|
('data_change_log', 'record_id', 'DOM_TEXT_SHORT', 'PK', 'N', 'N', NULL, 'N', NULL),
|
||||||
|
('data_change_log', 'action_type', 'DOM_STATUS', '액션', 'N', 'N', NULL, 'Y', 'CREATE/UPDATE/DELETE'),
|
||||||
|
('data_change_log', 'change_data', 'DOM_JSONB', '변경 데이터','N', 'N', NULL, 'N', 'before/after JSON'),
|
||||||
|
('data_change_log', 'user_id', 'DOM_ID_BIGINT', '사용자ID', 'N', 'Y', 'users.user_id', 'N', NULL),
|
||||||
|
|
||||||
|
-- 모든 정산/원장 테이블의 created_by/updated_by 매핑 (감사 표준화)
|
||||||
|
('recruit_ledger', 'created_at', 'DOM_DATETIME', '등록일시', 'N', 'N', NULL, 'Y', NULL),
|
||||||
|
('recruit_ledger', 'updated_at', 'DOM_DATETIME', '수정일시', 'N', 'N', NULL, 'N', NULL),
|
||||||
|
('maintain_ledger', 'created_at', 'DOM_DATETIME', '등록일시', 'N', 'N', NULL, 'Y', NULL),
|
||||||
|
('maintain_ledger', 'updated_at', 'DOM_DATETIME', '수정일시', 'N', 'N', NULL, 'N', NULL),
|
||||||
|
('settle_master', 'confirmed_by','DOM_APPROVER_ID','확정자', 'N', 'Y', 'users.user_id', 'N', NULL),
|
||||||
|
('settle_master', 'confirmed_at','DOM_DATETIME', '확정일시', 'N', 'N', NULL, 'N', NULL)
|
||||||
|
|
||||||
|
ON CONFLICT (table_name, column_name) DO NOTHING;
|
||||||
Reference in New Issue
Block a user