# AEG-X-005: 조정(Reconciliation) 엔드포인트 권한 승인 요청 **WBS Item:** AEG-X-005 **Status:** ⏳ IN_PROGRESS → DECISION_REQUIRED **Decision Owner:** Security Lead, Compliance **Blocks:** Portfolio Reconciliation endpoints production registration, G3 gate **Impact:** 4개 API 경로 미등록, RBAC 미정, 감사 추적 불완전 --- ## 현재 상태 **문제:** - 4개 Reconciliation 경로: `GET /reconciliation`, `POST /reconciliation/submit`, `POST /reconciliation/correct`, `GET /reconciliation/{id}` - 현재: 모두 `AllowAnonymous()` (인증 없음) - 상태: `[DontRegister]` 마크됨 — 프로덕션 등록 안 됨 - 권한: `Roles()` 또는 `Policies()` 정의 없음 **구현 완료:** - ✅ ReconciliationEngine, CostBasisCalculator (정책/로직) - ✅ ReconciliationEndpoints.cs (HTTP 라우팅, 계약) - ✅ 18/18 통합 테스트 (DB 필요) **검증 필요:** - ⏳ 각 경로별 필요 역할 정의 - ⏳ 정책 규칙 (PM/Checker/SRE 구분) - ⏳ 감사 추적 권한 연결 - ⏳ GDPR/컴플라이언스 감시 --- ## 필요한 4가지 결정 ### 1️⃣ 조정 작업 권한 (Reconciliation Action Permission) **결정:** 각 경로별 필요 권한 정의 ``` GET /reconciliation (조정 목록): ✅ 필요 역할: [ ] (e.g., "reconciliation.read", "ops.read") ✅ 대상 사용자: [ ] (PM/Checker/SRE/Admin) POST /reconciliation/submit (위반 제출): ✅ 필요 역할: [ ] (e.g., "reconciliation.submit") ✅ 대상 사용자: [ ] (PM/Checker만? SRE?) POST /reconciliation/correct (정정 제출): ✅ 필요 역할: [ ] (e.g., "reconciliation.correct") ✅ 대상 사용자: [ ] (Checker/SRE/Owner?) GET /reconciliation/{id} (상세 조회): ✅ 필요 역할: [ ] (동일 또는 별도?) ✅ 소유권 제약: [ ] (본인/팀만? 또는 누구나?) ``` ### 2️⃣ 승인 워크플로우 통합 (Approval Workflow Integration) **결정:** 대사 정정이 승인 워크플로우와 어떻게 연결되는가 ``` Current status: - ApprovalWorkflow (VS-26) exists - ReconciliationEngine (VS-29) exists - Integration: NOT DEFINED Required decisions: ✅ 정정 제출 → 자동 승인? 또는 Maker-Checker? ✅ Checker는 누가? (역할/권한 정의) ✅ 승인/거부 후 상태 전환? ✅ 감시/알림 조건? Linked Items: - ApprovalWorkflow.ApprovalPolicy - ReconciliationEngine.StateTransitions - GDPR 감시 규칙 ``` ### 3️⃣ 감사 추적 권한 (Audit Trail Hookup) **결정:** 조정 작업을 감사 추적에 기록 ``` Current state: - AuditTrailConsumer implemented (DEBT-029 discovered 2026-08-14) - Wired into OutboxPollerJob (line 99) - Events: APPROVAL_PROPOSED, APPROVAL_APPROVED, TRADE_SUBMITTED, etc. - ReconciliationCorrect event: NOT IN EVENT LIST Required decisions: ✅ ReconciliationCorrect → compliance.operation_audit_trail 기록? ✅ 정정 내용(before/after) JSONB 저장? ✅ 감사 주체: 누가? (X-KArtSell-User 헤더?) ✅ 보존 정책: [ ] (years, GDPR 호환?) Linked Items: - OutboxPollerJob (event polling) - AuditTrailConsumer (11 event types mapped) - GDPR retention (docs/CURRENT/AEG-X-007_SERILOG_CORRELATION.md) ``` ### 4️⃣ 컴플라이언스/감시 규칙 (Compliance Monitoring) **결정:** 정정 금액의 편향성, 체계적 오류 감시 ``` Scenarios requiring rules: - 같은 종목 연속 정정 (일일 3회 초과?) - 일일 정정 금액 한계 (예: 계좌별 5천만원) - Checker와 PM이 다른 사람인가? (이해관계 충돌) - 정정 비율이 20% 초과? (이상 거래 의심) Approval needed: ✅ 감시 임계값: [ ] (건수, 금액, 비율) ✅ 알림 채널: [ ] (email/Slack/SMS) ✅ 에스컬레이션: [ ] (SRE/CFO/Compliance) ✅ 자동 잠금: [ ] (정정 일시 중지 가능?) Linked Items: - Serilog correlation (structured properties) - Alert rules (.gitea/workflows/ or Grafana) - Runbook (정정 비상 시나리오) ``` --- ## 제출 형식 **승인자는 다음 정보 제공:** ### 1. Reconciliation Endpoint Permissions ```yaml GET /reconciliation: Roles: [ ] Users: [ ] POST /reconciliation/submit: Roles: [ ] Users: [ ] POST /reconciliation/correct: Roles: [ ] Users: [ ] GET /reconciliation/{id}: Roles: [ ] Ownership: [ ] ``` ### 2. Approval Workflow Integration ``` Correct → Maker-Checker: [ ] (Yes/No) Checker Role: [ ] Auto-Approve Policy: [ ] Notification Channel: [ ] ``` ### 3. Audit Trail Specification ``` ReconciliationCorrect Event: Log to compliance.operation_audit_trail: [ ] (Yes/No) Payload includes before/after: [ ] (Yes/No) Retention: [ ] (years) GDPR compliant: [ ] (Yes/No) ``` ### 4. Compliance Monitoring Rules ``` Alert Threshold (daily): Max corrections: [ ] (count) Max amount: [ ] (KRW) Max ratio: [ ] (%) Escalation: Channel: [ ] (Email/Slack/SMS) Owner: [ ] Auto-lock: [ ] (Yes/No) ``` --- ## 의존성 - **Blocks:** VS-29 production registration, G3 gate - **Related:** ApprovalWorkflow (VS-26), AuditTrail (VS-27), GDPR (DEBT-X) - **Prerequisite:** Security/Compliance team sign-off --- **제출 기한:** 2026-08-21 (1주) **승인자:** Security Lead, Compliance Lead **Escalation:** Chief Compliance Officer