# REQ-023 Monthly settlement dashboard shell, KPI, cashflow, and budget sections - Status: Proposed - 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 ## 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.