Human-in-the-loop thresholds, settlement auto-approve rules, dispute escalation, AI audit trail
BOS AI Agent는 정해진 임계값 내에서만 자동 결정을 실행하며, 임계값 초과 또는 불확실한 사례는 반드시 인간에게 에스컬레이션한다. 모든 AI 결정은 감사 추적(Audit Trail)에 기록된다.
| 결정 유형 | 자동 결정 조건 | 인간 검토 조건 | Fallback |
|---|---|---|---|
| 정산 집계 승인 | 불일치 < RM 0.50 | 불일치 ≥ RM 0.50 | billing-lead 검토 |
| 이의신청 자동 기각 | 중복 기록 명확, 신뢰도 > 95% | 신뢰도 95% 미만 | violation-lead 심사 |
| JPJ 차단 실행 | Tier 3 도달 + 고객 통보 완료 확인 후 | 통보 기록 누락 시 | 수동 검토 후 실행 |
| Write-off 실행 | 불가 (항상 CFO 승인 필요) | 항상 | CFO + 감사팀 이중 승인 |
| ANPR 매칭 자동 승인 |
| 신뢰도 ≥ 0.95 |
| 0.80~0.95 |
| 0.80 미만: 수동 |
| TnG ACK 불일치 | 불일치 < RM 1.00 | 불일치 ≥ RM 1.00 | CFO 알림 |
class AiDecisionEngine:
def approve_settlement(self, batch_id: str, bos_total: Decimal, partner_total: Decimal) -> Decision:
diff = abs(bos_total - partner_total)
if diff < Decimal("0.50"):
# 자동 승인
self._record_ai_decision(
decision_type="SETTLEMENT_AUTO_APPROVE",
resource_id=batch_id,
confidence=1.0,
rationale=f"Difference RM {diff} < threshold RM 0.50",
approved_by="ai-billing-agent"
)
return Decision.AUTO_APPROVED
else:
# 인간 에스컬레이션
self._escalate_to_human(
resource_id=batch_id,
reason=f"Difference RM {diff} >= threshold",
assignee="billing-lead",
sla_hours=4
)
return Decision.ESCALATED_TO_HUMAN
def _record_ai_decision(self, **kwargs):
# 감사 추적 필수 기록
AiAuditLog.create(**kwargs, timestamp=datetime.utcnow())
이의신청 접수
│
▼
[증거 분석 — Claude Sonnet]
입력: RFID 로그, ANPR 이미지, TnG 결제 기록
│
├── 신뢰도 > 95% + 이중 기록 명확 → 자동 기각
│ └── 고객 자동 이메일 발송 (14일 항소 안내)
│
└── 신뢰도 ≤ 95% → violation-lead 24시간 SLA 심사
CREATE TABLE ai_audit_log (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
decision_type VARCHAR(100) NOT NULL, -- 'SETTLEMENT_AUTO_APPROVE', 'DISPUTE_AUTO_REJECT'
resource_id UUID NOT NULL,
agent_id VARCHAR(100) NOT NULL, -- 어떤 AI Agent가 결정
model_version VARCHAR(50), -- 'claude-sonnet-4-5-20261001'
confidence NUMERIC(5,4), -- 0.0000 ~ 1.0000
rationale TEXT NOT NULL,
input_snapshot JSONB, -- 결정 당시 입력 데이터 스냅샷
output JSONB, -- 결정 결과
human_override BOOLEAN DEFAULT FALSE, -- 인간이 AI 결정을 뒤집었는가
override_reason TEXT,
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
-- 보관: 7년 (금융 감사 요건)
-- 삭제 불가 (append-only table)
| 결정 유형 | SLA | 알림 채널 | 에스컬레이션 대상 |
|---|---|---|---|
| 정산 불일치 | 4시간 | Slack + Email | billing-lead |
| 이의신청 심사 | 24시간 | Task Queue + Email | violation-lead |
| JPJ 차단 검토 | 48시간 | Slack + Jira | compliance-officer |
| Write-off 승인 | 5영업일 | Email + DocuSign | CFO + 감사팀 |
ai_decision_thresholds 테이블에서 조회. 하드코딩 금지human_override=TRUE + override_reason 필수 기록| 참조 | 경로 |
|---|---|
| AI 이상 탐지 | ../ai-fault-detection/SKILL.md |
| AI 기능 설계 | ../../docs/02_system/04_ai_features.md |
| Phase 9 AI 통합 | ../../docs/06_phases/09_phase09_ai.md |