44 lines
2.0 KiB
Markdown
44 lines
2.0 KiB
Markdown
# REQ-023 Monthly settlement dashboard shell, KPI, cashflow, and budget sections
|
|
|
|
- Status: Approved
|
|
- Type: Interface
|
|
- Priority: High
|
|
- Owner: 렛저장인
|
|
- Source Discovery: `docs/discovery/dcy-015_20260711_monthly-settlement-page-requirements-wireframe.md`
|
|
- Depends On: REQ-022
|
|
- Created At (KST): 2026-07-11 20:56 KST
|
|
- Approved At: 2026-07-12 09:01 KST
|
|
|
|
## 1. Intent
|
|
|
|
Add the visible Streamlit `월정산` page shell and implement the first user-facing sections that rely on the REQ-022 read model.
|
|
|
|
## 2. In Scope
|
|
|
|
- Add `월정산` to Streamlit routing/sidebar.
|
|
- Provide Header / 월 선택 with selected month, basis date, KST timestamp, and read-only status badge.
|
|
- Render 월간 핵심 KPI: actual income, actual expense, net cashflow, savings rate, budget overrun count, unresolved blocker count.
|
|
- Render 현금흐름 / 지출 구조 using existing category/person/cashflow groupings where available.
|
|
- Render 예산 대비 점검 with budget, actual, remaining, usage rate, and status.
|
|
- Provide user-friendly CTA/menu guidance to existing transaction/budget pages without creating new writes.
|
|
- Add AppTest coverage for page routing, headings, month selector, and key section rendering.
|
|
|
|
## 3. Out of Scope
|
|
|
|
- Detailed blocker/import/account/asset status sections.
|
|
- Evidence/next action section hardening.
|
|
- Monthly close persistence, MCP tool, or export.
|
|
|
|
## 4. Acceptance Criteria
|
|
|
|
- AC-1: Streamlit can navigate to `월정산`.
|
|
- AC-2: The page displays selected month and basis date.
|
|
- AC-3: KPI, cashflow/spending structure, and budget sections render on the synthetic fixture DB.
|
|
- AC-4: The UI calls the read-model/gateway seam rather than duplicating core formulas in `dashboard/app.py`.
|
|
- AC-5: AppTest verifies the core headings and representative KPI/budget content.
|
|
- AC-6: `python -m ruff check .` and the relevant dashboard tests pass.
|
|
|
|
## 5. Notes
|
|
|
|
This slice intentionally stops before operational blocker/import/asset sections to keep the first UI delivery small and verifiable.
|