Inflation & Cost-of-Living BI Dashboard — ETL pipeline for Ethiopian CPI data
# MetricMinds — Inflation & Cost-of-Living BI Dashboard
A data pipeline and dashboard for analyzing Ethiopian inflation and cost-of-living
trends, built from the architecture described in the *MetricMinds* capstone paper
(Chapters 1–4): an ETL pipeline that crawls and parses Ethiopian Statistical Service
(ESS) monthly bulletins, validates the extracted figures, loads them into a
PostgreSQL Star Schema warehouse, and surfaces them through a Streamlit dashboard.
This README is written to be read alongside the capstone paper, and is
deliberately explicit about which parts of this implementation were actually run
and verified during development versus which parts are written-but-unexecuted code,
since the paper itself is careful about that same distinction.
## Project Structure
```
metricminds/
├── dags/
│ ├── dag.py # Airflow DAG: check -> extract -> validate -> load -> notify
│ └── scripts/
│ ├── calendar_utils.py # Ethiopian Gregorian calendar resolution
│ ├── crawler.py # Discovers/downloads new ESS bulletin PDFs
│ ├── extract.py # Parses the 5 CPI tables out of a bulletin PDF
│ ├── schemas.py # Pandera validation schemas for the 5 tables
│ ├── load.py # Idempotent SQLAlchemy loader (get-or-create + upsert)
│ ├── worldbank.py # World Bank Indicators API connector (annual CPI)
│ └── init_db.py # Schema bootstrap, used for local SQLite dev/testing
├── sql/
│ └── schema.sql # Authoritative PostgreSQL Star Schema DDL
├── dashboard/
│ └── app.py # Streamlit dashboard, reads from the warehouse
├── tests/
│ └── test_pipeline.py # 22 pytest tests — see "What Was Verified" below
├── data/
│ ├── fixtures/
│ │ ├── generate_bulletin.py # Generates the synthetic ESS bulletin PDF
│ │ └── ESS_Statistical_Bulletin_Issue_34_2018EFY.pdf
│ └── raw_bulletins/ # Downloaded bulletins land here at …