Originally created by: grynn-in
Summary
- Fiscal calendar fix: Scoped fiscal period join to entity's calendar, eliminating 12x fan-out. Monthly periods generated from year ranges.
- Documentation site: 31-file MkDocs Material docs suite with GitHub Pages deployment, Grynn branding, reorganized nav (5 top-level groups)
- Excel VBA: EPMSAVE() immediate write-back function, scenario_id as 9th param on EPM/EPM_BUDGET/EPM_VARIANCE, EPM_BUDGET_SAVE batch macro, EnsureLogin helper
- Budget layers: Full documentation with worked example showing 4 additive layers (base/challenge/management/board) across 12 periods
- Scenario ID filtering: Optional filter on epm_value/epm_batch for multi-scenario queries (e.g., BUDGET_2025 vs BUDGET_2025_V2)
- Roadmap: Updated with D365 budget write-back (Phase 3) including OData endpoints, dimension mapping, and prerequisites
Konsol app changes (separate repo: grynn-in/konsol)
- 12 new doctypes in EPM module (Scenario Definition, Dimension, Measure, Fiscal Period, Spread Profile, Allocation Rule/Driver, Consolidation Group/Adjustment, IC Elimination Rule, Budget Input + Child)
- Budget workflow: Draft → Submitted → Approved → Rejected with 4 roles
- Shared infrastructure: clickhouse.py (sync_table/sync_doctype), dbt_config.py (regenerate_vars)
- API: budget_save, budget_save_batch, budget_cell_save endpoints
- scenario_id filter on epm_value/epm_batch
- 166 TDD tests across 10 test files
Test plan
- [x] 166 pytest tests passing (konsol)
- [x] VBA functions verified via static analysis tests
- [ ] Manual: bench --site epm.local migrate (12 doctypes install)
- [ ] Manual: Budget Input workflow in Frappe Desk
- [ ] Manual: EPMSAVE from Excel → Budget Input doc created
- [ ] Manual: mkdocs serve — docs render correctly
🤖 Generated with Claude Code
Ticket changed by: grynn-in