Signal: Proactive Healthcare Infrastructure starting with DMEPOS suppliers dispensing CGM supplies for T1D patients. https://git.forgejo.sttilsolutions.com/sttil/Signal/
Find a file
Kisa b4f5707937 fix: engine-dropped rows surface in the skipped list (failed-data honesty)
Kisa ruling 2026-07-07: failed CSV info must be visible and Signal never acts
on rows whose required information was not provided. Rows that survive
normalization but die in the scoring engine (no coverage rule for the
component) previously vanished from the response; they now append to
skipped_reasons before persistence so the stored count matches what the
supplier saw. Auditor SHIP; its MEDIUM (persist-order) fixed in-commit.
Known bound (auditor LOW, tracked): a dropped component inside an otherwise
scored same-DOS group is covered by the scored line and not separately
reported. 169 tests green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 06:15:27 -04:00
.claude Update Signal brand language and add pitch/build artifacts 2026-05-28 10:14:16 -04:00
context state: hand-merge parallel lanes — P2-P5 done, attorney bundle details kept [CC] 2026-07-07 05:50:35 -04:00
docs state-sync + ledger + P6 mockup: readiness-model backend complete [CC] 2026-07-07 05:49:18 -04:00
n8n-workflows update CLAUDE.md and coverage calculator; add n8n content radar workflow, vercel SPA rewrite, and ui workspace config 2026-06-02 00:41:49 -04:00
pitch Add attorney-review legal bundle: BAA template v1, cover memo, send-ready docx set 2026-07-07 05:35:21 -04:00
python-backend fix: engine-dropped rows surface in the skipped list (failed-data honesty) 2026-07-07 06:15:27 -04:00
research feat: add reason strings per patient, fix export headers, add signal-ui source 2026-05-26 09:45:02 -04:00
scripts security: rotate leaked Signal API key, remove it from frontend + source 2026-06-21 14:00:54 -04:00
signal-ui feat: plan-type enforcement in the live path (plan 02, P5) 2026-07-07 05:46:03 -04:00
test-data feat: plan-type enforcement in the live path (plan 02, P5) 2026-07-07 05:46:03 -04:00
tests fix: engine-dropped rows surface in the skipped list (failed-data honesty) 2026-07-07 06:15:27 -04:00
.gitignore chore(state): clean-start current-state.md, ignore context recovery artifacts, add workflow-consolidation brief for Pi 2026-06-23 21:22:31 -04:00
CLAUDE.md feat(workflow): build consolidation foundation from Pi's recovered design 2026-06-23 23:30:56 -04:00
Dockerfile feat: FastAPI backend + full deployment stack (Railway + Vercel) 2026-05-18 19:01:35 -04:00
LICENSE.md feat: Signal CGM Level 1 foundation — calculator, audit logger, payer rules, license 2026-04-11 19:48:31 -04:00
mempalace.yaml refactor: reorganize repo structure — flatten CGM-Denial-Prevention/ and Projects/ into docs/ pitch/ research/ 2026-05-12 05:10:00 -04:00
railway.toml feat: FastAPI backend + full deployment stack (Railway + Vercel) 2026-05-18 19:01:35 -04:00
README.md Update Signal brand language and add pitch/build artifacts 2026-05-28 10:14:16 -04:00
requirements.txt Add Phase 3: Clerk auth with org-scoped data isolation 2026-05-29 12:12:17 -04:00
TERAX.md Update Signal brand language and add pitch/build artifacts 2026-05-28 10:14:16 -04:00
vercel.json feat: FastAPI backend + full deployment stack (Railway + Vercel) 2026-05-18 19:01:35 -04:00

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.