# Signal CGM powered by STTIL Solutions B2B CGM documentation worklist tool for DMEPOS suppliers. Ingests CSV shipment data (Brightree/WellSky exports), calculates coverage expiration per patient using device wear-day rules, and produces a prioritized worklist for proactive outreach — so small DME teams act before claims deny, not after. **Self-hosted. Data never leaves the supplier network.** --- ## What It Does Most DMEPOS suppliers manage CGM coverage reactively: a claim denies, then staff scramble to appeal. Signal CGM flips that. The system watches coverage windows continuously and surfaces patients approaching expiration before the denial condition exists. - Ingests shipment CSV from Brightree or WellSky - Calculates coverage expiration per patient per device using payer-specific wear-day rules - Flags each patient: `REFILL_WINDOW`, `VISIT_DUE`, `OUT_OF_COVERAGE`, or `OK` - Delivers a prioritized worklist to DME staff via encrypted email - Staff handle outreach locally — Signal CGM never contacts patients directly ## Stack | Layer | Technology | |-------|-----------| | Backend | Python / FastAPI | | Database | PostgreSQL (encrypted at rest) | | Orchestration | n8n (self-hosted, 24-hour batch trigger) | | Notifications | Mailcow (self-hosted SMTP — staff email only) | | Hosting | Hostinger VPS — data stays on-prem | ## PHI Architecture Signal CGM is designed to minimize PHI surface area: - **Sole crosswalk key:** `patient_id` (the supplier's internal MRN or account number). No names, SSNs, DOBs, or contact information enter the system. - DME staff maintain the `patient_id` ↔ real identity mapping in their own systems (Brightree, EHR, etc.). - The calculation layer sees: `patient_id`, `device_type`, `shipment_date`, `quantity`, `payer` — nothing else. - All audit logs hash `patient_id` before storage. Raw identifiers never appear in logs. ## Coverage Flag Logic | Flag | Meaning | |------|---------| | `REFILL_WINDOW` | Patient is within the refillable window — safe to ship | | `VISIT_DUE` | Physician visit renewal is approaching (Medicare: 180 days) | | `OUT_OF_COVERAGE` | Coverage has lapsed — outreach required before next shipment | | `OK` | No action needed at this time | ## Directory Structure ``` signal-cgm/ ├── python-backend/ │ ├── core/ │ │ ├── coverage_calculator.py # Coverage clock logic │ │ ├── audit_logger.py # PHI-safe audit logging │ │ └── db_models.py # PostgreSQL models │ └── config/ │ └── payer_rules.json # Wear-day rules by device and payer ├── n8n-workflows/ # n8n batch trigger exports └── CLAUDE.md # Active dev context ``` ## BAA Status (Level 1) | Vendor | BAA Required | Status | |--------|-------------|--------| | Hostinger VPS | Yes — PHI host | Pending | | Anthropic API | Only if AI layer touches PHI | Not applicable (Level 1) | | All other components | Self-hosted — operator is STTIL | N/A | --- © 2026 STTIL Solutions LLC. Proprietary software — see LICENSE.md.