Nigeria immunisation scheduling & survey analytics package
Project description
nimmunize
Nigeria immunisation scheduling & survey‑analytics toolkit Offline‑ready • FHIR‑friendly • GPL‑3
nimmunize turns Nigeria’s routine‑immunisation schedule into a library and a set of command‑line tools
What it does — in one glance
| Layer | Capability | Key APIs / CLI |
|---|---|---|
| Schedule engine | • Calculate next-due dose with volume, route & diseases prevented. • Flag overdue series and number of days late. • Surface rich poster metadata ( title, url, image_url) for audit trails. |
next_due() • overdue() • reference() |
| Survey analytics | • Bulk-audit CSV/Excel exports. • Compute coverage %, FIC, route-level coverage & disease-level protection. • Produce defaulter lists & “Fully immunised” rosters. |
nimmunize survey … • audit() • metrics() • route_coverage() • disease_coverage() |
| Catch-up planner | Generate safe catch-up schedules that respect minimum ages & intervals (WHO algorithm). | catchup_plan() • nimmunize catchup … (coming soon) |
Installation Installation
pip install nimmunize # Python ≥ 3.9
Need dev extras? pip install nimmunize[dev] to get pytest, black, and pre‑commit hooks.
🚀 Quick start
1 · Library usage
from datetime import date
from nimmunize import next_due, overdue, disease_coverage
# Child record
child_dob = date(2024, 7, 15)
shots_taken = {"bcg": child_dob, "opv": [child_dob]} # BCG + OPV0 at birth
# 1️⃣ Compute next doses (simple dictionary)
print(next_due(child_dob, shots_taken))
# 2️⃣ Same but ask for deep details (dosage / route / diseases)
print(next_due(child_dob, shots_taken, include_details=True)["opv"])
# 3️⃣ Were we late by 1 January 2025?
print(overdue(child_dob, shots_taken, as_of=date(2025, 1, 1)))
2 · Survey workflow
import nimmunize as ni
survey_df = ni.load("baseline_clusters.xlsx") # any .csv/.xls/.xlsx or DataFrame
annotated = ni.audit(survey_df) # adds missed_/delay_/next_due_ cols
print(ni.metrics(annotated)) # {'coverage_%': …, 'FIC_%': …}
print(ni.route_coverage(annotated)) # {'Intramuscular': 88.4, 'Oral': 91.2, …}
print(ni.disease_coverage(annotated)) # {'polio': 89.6, 'measles': 82.3, …}
print("⚠️ Diseases <80 % protected:", ni.diseases_at_risk(annotated))
3 · CLI in two commands
# Bulk annotate a survey and print coverage dashboard
nimmunize survey data/cluster.csv -o cluster_audited.csv
# One‑off JSON catch‑up (verbose output)
nimmunize nextdose 2019-04-12 -t pentavalent 2019-10-27 -t opv 2019-10-27 --as-of 2025-05-01 --details
Run nimmunize --help for the full option tree.
Essentials
# SCHEDULING
next_due(dob, taken, *, as_of=None, include_details=False) -> {ag: date|dict}
overdue(dob, taken, *, as_of=None) -> {missed_<ag>, delay_<ag>}
reference() -> {'title', 'published', 'url', 'image_url'}
# SURVEY
load(path|DF, *, dob_col='dob') -> DataFrame
audit(df, *, as_of=None) -> DataFrame
metrics(df) -> {'coverage_%', 'FIC_%'}
route_coverage(df) -> {route: %}
disease_coverage(df) -> {disease: %}
diseases_at_risk(df, threshold=80) -> [disease]
# CATCH‑UP\ ncatchup_plan(dob, taken, *, as_of=None) -> {ag: [dates]}
All objects are plain Python & pandas—easy to feed into Streamlit, FastAPI, or Jupyter notebooks.
🗺️ Road‑map (public backlog)
- Detailed schedule with route & disease metadata.
- Disease‑level coverage & risk flags.
- CLI catch‑up planner (
nimmunize catchup). - Dash mini‑dashboard.
-
nimmunizeRwrapper for the Stata/epi community.
Love a feature? Open an issue or up‑vote existing ones.
🧪 Contributing & dev setup
# After forking the repo
python -m venv .venv && source .venv/bin/activate
pip install -e .[dev] # pytest, black, pre‑commit, isort, mypy
pre-commit install # automatic lint on every git commit
pytest -q # run fast unit tests ✨
- Branch off
main→ commit logically → open a PR. - Ensure
pytest&flake8pass. - Follow Conventional Commits for commit messages.
Data sources & license
- Schedule data © NPHCDA Immunization Schedule (18 Dec 2024)
- Code licensed under GNU GPL v3—see
LICENSE. - By using the library you agree to verify clinical decisions with qualified healthcare professionals. No warranty.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file nimmunize-1.0.1.tar.gz.
File metadata
- Download URL: nimmunize-1.0.1.tar.gz
- Upload date:
- Size: 26.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.9.22
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ddc22c4a8c2aba199c6bf50e21afbd9b2965a1116295b8b5dc3eaf4faee0bf4f
|
|
| MD5 |
412b113303e38350d9a9e30e1d37cffd
|
|
| BLAKE2b-256 |
97897cc270efb4bcdb21f48068b46d6c1b281a3dedbe0f4524a0793b2d526a2e
|
File details
Details for the file nimmunize-1.0.1-py3-none-any.whl.
File metadata
- Download URL: nimmunize-1.0.1-py3-none-any.whl
- Upload date:
- Size: 25.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.9.22
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
77d4f91f597fc0186ad31df46c8d6d291a320a106bfd54fb1223bf81fda2fd5d
|
|
| MD5 |
42f528a38c6b057438139a5cdb9db473
|
|
| BLAKE2b-256 |
79a64af9caf315ce5a816b1e55fb6712a3e1822052c2db0f8a859bb64d32bb5a
|