MVP 범위와 일정
- 작성일: 2026-10-17
- 상태: 확정 (변경 시 Changelog 기록)
1. 목표
2026-10-23까지 3분 안에 시연할 수 있는 MVP를 만들고, GitHub 링크를 첨부해 지원서를 낸다(마감 10-25, 조기 마감 가능). 지원 후에도 면접 전까지 2단계를 계속 진행한다.
2. 핵심 시나리오 (MVP)
- 작성자(preparer)가 감사 대상(engagement)을 만든다. 입력값은 회사명, 회계연도, 결산일, 수행중요성 금액이다.
- 합성 총계정원장(GL) CSV를 업로드하거나, 내장 생성기로 만든다.
- 테스트를 실행하면 룰 기반 분개 테스트가 병렬로 돌고, 진행률이 화면에 실시간으로 보인다.
- 걸러진 전표마다 AI 에이전트가 위험도, 근거, 추가 감사절차를 제안한다. 제안만 하고 결론은 내리지 않는다.
- 작성자가 각 항목에 판단(이상 없음 / 추가 확인 필요 / 예외)과 코멘트를 남긴다.
- 검토자(reviewer)가 검토 후 승인하거나 반려한다. 작성자 본인은 승인할 수 없다(직무분리).
- 위의 모든 행위(사람, AI, 시스템)를 감사 로그에서 시간순으로 볼 수 있다.
3. 기능 범위
| 기능 | MVP | 2단계 |
|---|---|---|
로그인 (phx.gen.auth) |
O | |
| engagement 생성, 멤버 역할(작성자/검토자) 지정 | O | |
| GL CSV 업로드 (검증, 대량 적재) | O | |
| 합성 GL 생성기 (이상 전표 주입, 정답 라벨 포함) | O | |
| 룰 기반 분개 테스트 (6~8개) | O | |
| 실시간 진행률 (PubSub + LiveView) | O | |
| AI 트리아지 (Claude API, fake 구현 포함) | O | |
| 작성자 판단, 검토자 승인/반려 (직무분리) | O | |
| append-only 감사 로그와 조회 화면 | O | |
| Presence (지금 누가 같은 화면을 보고 있는지) | O | |
| 배포 (데모 URL) | O | |
| OpenTelemetry trace (HTTP -> Oban -> LLM) | O | |
| Terraform + Azure 배포 | O | |
| ClickHouse + 벤포드 법칙 분석 | O | |
| Ash Framework로 일부 영역 재구현 | O | |
| 미계상부채 검토 등 두 번째 감사 절차 | O |
4. 범위 밖
- 실제 고객 데이터, 외부 ERP 연동
- 다중 통화 (MVP는 KRW만)
- 이메일 발송 (로컬 메일박스로 대체)
- 정교한 권한 체계 (engagement 단위 역할 2개만)
5. 분개 데이터 계약 (GL CSV 컬럼)
도메인 문서(룰 정의)와 설계 문서(스키마)가 동시에 참조하는 공통 계약이다. 컬럼을 추가하거나 바꾸려면 메인 세션의 승인을 받는다.
| 컬럼 | 타입 | 필수 | 설명 |
|---|---|---|---|
entry_number |
string | O | 전표번호. 같은 번호의 행들이 하나의 전표를 이룬다 |
line_number |
integer | O | 전표 내 행 번호 (1부터) |
posting_date |
date | O | 전기일 (장부에 반영된 날) |
document_date |
date | O | 증빙일 (거래가 실제 일어난 날) |
entered_at |
datetime | O | 시스템 입력 일시 (KST, 시간대 판단용) |
fiscal_year |
integer | O | 회계연도 |
fiscal_period |
integer | O | 회계기간 (1~12, 결산 조정은 13) |
account_code |
string | O | 계정 코드 |
account_name |
string | O | 계정명 |
debit |
decimal | O | 차변 금액 (없으면 0) |
credit |
decimal | O | 대변 금액 (없으면 0) |
description |
string | 적요 | |
counterparty |
string | 거래처 | |
entered_by |
string | O | 입력자 사용자 ID |
approved_by |
string | 승인자 사용자 ID (자동 전표는 비어 있을 수 있음) | |
source |
string | O | manual(수기) 또는 system(자동) |
검증 규칙:
- 한 행은 차변과 대변 중 정확히 하나만 0보다 크다.
- 같은
entry_number의 차변 합계와 대변 합계가 같아야 한다. - 금액은 KRW 원 단위 정수이고, 저장은
numeric(18,2)로 한다. - 같은
entry_number의 행들은 헤더 필드(posting_date,document_date,entered_at,fiscal_year,fiscal_period,entered_by,approved_by,source,counterparty)가 모두 같아야 한다. 어긋나면 적재를 거부한다. posting_date의 연월과fiscal_period가 어긋나면 경고만 남기고 적재한다.fiscal_period = 13은 예외다.source = manual인데approved_by가 비어 있어도 거부하지 않는다. 승인 통제 이탈 룰이 찾아야 할 대상이기 때문이다.entered_at은 시간대 표기가 없는 KST 일시로 해석한다. 형식은YYYY-MM-DD HH:MM:SS이고 오프셋(+09:00,Z)이 붙으면 거부한다.- 같은
entry_number의 행들은 파일 안에서 연속으로 나와야 한다. 떨어져 나오면 거부한다(스트리밍 적재에서 전표 단위로 검증하기 위해서다). debit,credit의 소수부는 0이어야 한다(1000또는1000.00). 그 외는 거부한다.
6. 일정
| 날짜 | 작업 | 완료 기준 |
|---|---|---|
| 10/17 (금) | 작업 원칙, 툴체인, Phoenix 스캐폴딩, 도메인/설계 문서 | mix test 통과, 문서 3종 |
| 10/18 (토) | 스키마와 마이그레이션, 인증, engagement, 합성 GL 생성기, CSV 적재 | 2만 행 적재 테스트 통과 |
| 10/19 (일) | 룰 엔진과 Oban worker, 실시간 진행률 | 정답 라벨 대비 룰 적중 테스트 통과 |
| 10/20 (월) | AI 트리아지 (behaviour, Claude 구현, fake) | 키 없이 fake로 전체 흐름 동작 |
| 10/21 (화) | 작성자 판단, 검토자 승인, 직무분리, 감사 로그 화면, Presence | LiveView 테스트 통과 |
| 10/22 (수) | 디자인 정리, 배포, 시드 데이터 | 데모 URL 접속 가능 |
| 10/23 (목) | README, 데모 GIF, 지원서 제출 | 제출 완료 |
| 10/24 이후 | 2단계 (OpenTelemetry, Terraform+Azure, ClickHouse, Ash) | 면접 전까지 |
7. 성공 기준
- 2장의 시나리오를 3분 안에 끊김 없이 시연할 수 있다.
mix precommit(컴파일 경고 0, 포맷, 테스트)이 통과한다.- 외부에서 접속 가능한 데모 URL이 있다.
- README에 아키텍처, Why Elixir, 학습 기록 링크가 있다.
8. 미결정 사항
- MVP 배포처: 빠른 배포(Fly.io 등)를 먼저 하고 2단계에 Azure로 옮길지, 처음부터 Azure로 갈지 (10/22 전에 결정)
Changelog
- 2026-10-17: 최초 작성
- 2026-10-17: 5장 검증 규칙 4개 추가 (도메인 문서 요청 V1-V4 승인)
- 2026-10-17: 5장 검증 규칙 3개 추가 (설계 문서 요청: 전표 행 연속,
entered_at형식, 원 단위 금액)