A modernized event-driven implementation of the NYC Benefits Screening API, replacing the legacy rule-based system with a decoupled architecture using Camunda 8 (Zeebe), DMN 1.3, and Python.
- Orchestration: Camunda 8 (Zeebe) handles the process flow (
master_eligibility.bpmn). - Decision Logic: 50+ DMN 1.3 tables converted from legacy Drools (DRL) files.
- Frontend: A lightweight Flask application acting as a "Backend for Frontend" (BFF).
- Workers: Python workers (
aggregation_worker.py) handling data enrichment, aggregation, and external API calls (PolicyEngine).
- Real-time Eligibility: Determines eligibility for 40+ NYC/NYS benefits.
- Tax Analysis: Estimates Federal and NY State tax liabilities and credits (EITC, CTC) via PolicyEngine integration.
- Save Results: Persists user sessions for printing or later review.
- Rich Metadata: Provides "How to Apply" instructions and local office lookups.
- Docker & Docker Compose
- Python 3.9+
This project uses a self-hosted Zeebe broker via Docker Compose.
docker compose up -dpip install -r requirements.txtDeploy the BPMN and DMN models to the Zeebe engine.
python3 deploy_master_system.pyUse the provided startup script to launch both the background worker and the web application.
chmod +x start.sh
./start.shVisit http://localhost:5001 to use the screener.
public_app.py: The Flask web server.aggregation_worker.py: The Zeebe job worker.master_eligibility.bpmn: The main process definition.ACCESS-NYC-Rules/: Legacy rule analysis.dmn_output/: Converted DMN files.
MIT