A portfolio-ready Streamlit application that turns monthly accounting and planning data into management-focused financial analysis. It includes a fully synthetic demo company and file-import adapters for selected Standard, QuickBooks, and Xero exports. It is a focused portfolio project, not an enterprise EPM replacement.
Finance teams need a repeatable way to move from transaction and planning data to clear answers about performance, material variances, emerging trends, and the latest full-year outlook. This project demonstrates that workflow without relying on private company data or external APIs.
- Executive KPIs for revenue, operating expenses, operating profit, margin, growth, and full-year outlook.
- Actual, Budget, Forecast, and Prior-Year monthly trend analysis.
- Favorable and unfavorable variance ranking with adjustable materiality thresholds.
- Department, account, expense-mix, margin, run-rate, and forecast-reliability analysis.
- Full-year latest estimate using Actual YTD plus remaining Forecast.
- Interactive revenue, payroll, and other-opex scenario analysis.
- Rule-based management commentary and downloadable Word management report.
- Staged uploads that keep demo data active until the user explicitly confirms a custom dataset.
- Internal values use an account-normal convention: ordinary revenue and expenses are positive; refunds, credits, reversals, and contra activity remain negative.
- Operating Profit = Revenue - Operating Expenses.
- Operating Margin = Operating Profit / Revenue.
- Revenue and profit are favorable when Actual exceeds Budget.
- Expenses are favorable when Actual is below Budget.
- Full-Year Outlook = Actual YTD + remaining Forecast.
- Percentage calculations use safe division when the comparison value is zero.
| Source | Expected fields | Behavior |
|---|---|---|
| Standard Excel/CSV | Date, Account, Account Category, Actual; optional Department, Budget, Forecast, Prior Year Actual | Preserves supplied signs and planning values. |
| QuickBooks file adapter | Date, Account, Account Type, Debit/Credit or Amount; optional Class and Location | Translates common debit-positive General Ledger or P&L-detail exports into the internal sign convention. |
| Xero file adapter | Date, Account, Account Type, Debit/Credit, Amount, Net, or Gross; optional Account Code and tracking fields | Uses Debit/Credit first, followed by Amount, Net, and Gross; signed non-ledger values are preserved. |
These are file-import adapters for selected common exports, not live QuickBooks or Xero integrations. The app removes obvious blank, heading, total, and subtotal rows; excludes recognized non-P&L account types; and blocks activation when material accounts cannot be classified reliably. Optional plan files warn about unmatched account, category, or department dimensions.
Representative CSV and XLSX files are available in sample_uploads/.
- Python 3.12
- Streamlit
- pandas
- Plotly
- SQLite
- openpyxl
- pytest
fpa-budget-dashboard/
app.py
data/fpa_dashboard.sqlite
docs/screenshots/
sample_uploads/
scripts/build_sample_excels.py
src/
calculations.py
charts.py
data_import.py
database.py
generate_data.py
insights.py
reporting.py
tests/test_calculations.py
LICENSE
requirements.txt
requirements-dev.txt
python -m venv .venvWindows:
.venv\Scripts\activatemacOS or Linux:
source .venv/bin/activateInstall runtime dependencies, generate the synthetic demo database if required, and start Streamlit:
pip install -r requirements.txt
python -m src.generate_data
streamlit run app.pypip install -r requirements-dev.txt
python -m pytestThe test suite covers FP&A calculations, zero denominators, YTD and forecast logic, account classification, source-specific signs, import cleanup, plan mismatches, sample workbooks, report generation, Streamlit startup, and demo-data staging.
- All repository financial data is synthetic and represents the fictional Northstar Analytics Group.
- No API credentials or live accounting-system connections are required.
- Uploaded files are processed in the active Streamlit session and are not added to the repository.
- Streamlit secrets, environment files, local environments, caches, generated outputs, logs, and archives are excluded by
.gitignore. - Detailed Streamlit exception output is disabled in
.streamlit/config.toml.
- Import support targets the documented transaction-level formats and common aliases, not every customized QuickBooks or Xero report.
- QuickBooks and Xero samples contain actuals only; Budget and Forecast require separate Standard-format plan files.
- Scenario analysis is a high-level sensitivity model, not a driver-based enterprise planning engine.
- There is no authentication, multi-user workflow, approval process, live ERP connection, or cloud database.
This project is available under the MIT License.





