diff --git a/card-settlement-migration/src/main/java/com/bais/card/settlement/SettlementInvariantTable.java b/card-settlement-migration/src/main/java/com/bais/card/settlement/SettlementInvariantTable.java new file mode 100644 index 0000000..3da7c20 --- /dev/null +++ b/card-settlement-migration/src/main/java/com/bais/card/settlement/SettlementInvariantTable.java @@ -0,0 +1,76 @@ +package com.bais.card.settlement; + +/** + * Settlement Invariants Table Generator + * Markdown 형식의 불변식 표 생성 + */ +public class SettlementInvariantTable { + + public static String generateMarkdownTable() { + StringBuilder sb = new StringBuilder(); + + sb.append("# 카드 정산 불변식 표 (Card Settlement Invariants)\n\n"); + sb.append("**범위**: card-settlement-migration\n\n"); + + sb.append("## 1. 브랜드 정산 불변식\n\n"); + sb.append("| ID | 설명 | 수식 | 영향 클래스 | 보존 주의사항 |\n"); + sb.append("|---|---|---|---|---|\n"); + for (SettlementInvariant.Invariant inv : SettlementInvariant.getAllInvariants()) { + if (inv.getId().startsWith("BRAND_SETTLEMENT") || inv.getId().startsWith("BRAND_COMMISSION")) { + sb.append(String.format("| %s | %s | %s | %s | %s |\n", + inv.getId(), inv.getDescription(), inv.getFormula(), + inv.getAffectedClass(), inv.getPreservationNote())); + } + } + + sb.append("\n## 2. IRD 불변식\n\n"); + sb.append("| ID | 설명 | 수식 | 영향 클래스 | 보존 주의사항 |\n"); + sb.append("|---|---|---|---|---|\n"); + for (SettlementInvariant.Invariant inv : SettlementInvariant.getAllInvariants()) { + if (inv.getId().startsWith("IRD")) { + sb.append(String.format("| %s | %s | %s | %s | %s |\n", + inv.getId(), inv.getDescription(), inv.getFormula(), + inv.getAffectedClass(), inv.getPreservationNote())); + } + } + + sb.append("\n## 3. 발급사 수수료 불변식\n\n"); + sb.append("| ID | 설명 | 수식 | 영향 클래스 | 보존 주의사항 |\n"); + sb.append("|---|---|---|---|---|\n"); + for (SettlementInvariant.Invariant inv : SettlementInvariant.getAllInvariants()) { + if (inv.getId().startsWith("ISSUER")) { + sb.append(String.format("| %s | %s | %s | %s | %s |\n", + inv.getId(), inv.getDescription(), inv.getFormula(), + inv.getAffectedClass(), inv.getPreservationNote())); + } + } + + sb.append("\n## 4. 공통 금액 검증 불변식\n\n"); + sb.append("| ID | 설명 | 수식 | 영향 클래스 | 보존 주의사항 |\n"); + sb.append("|---|---|---|---|---|\n"); + for (SettlementInvariant.Invariant inv : SettlementInvariant.getAllInvariants()) { + if (inv.getId().startsWith("AMOUNT")) { + sb.append(String.format("| %s | %s | %s | %s | %s |\n", + inv.getId(), inv.getDescription(), inv.getFormula(), + inv.getAffectedClass(), inv.getPreservationNote())); + } + } + + sb.append("\n## 5. 금액 정밀도 불변식\n\n"); + sb.append("| ID | 설명 | 수식 | 영향 클래스 | 보존 주의사항 |\n"); + sb.append("|---|---|---|---|---|\n"); + for (SettlementInvariant.Invariant inv : SettlementInvariant.getAllInvariants()) { + if (inv.getId().equals("AMOUNT_SCALE") || inv.getId().equals("ROUNDING_MODE")) { + sb.append(String.format("| %s | %s | %s | %s | %s |\n", + inv.getId(), inv.getDescription(), inv.getFormula(), + inv.getAffectedClass(), inv.getPreservationNote())); + } + } + + return sb.toString(); + } + + public static void main(String[] args) { + System.out.println(generateMarkdownTable()); + } +}