The Watchtower
The moat is the pipeline, not the data.
28 sources across 13 jurisdictions — FDA NDC, DailyMed, RxNorm, dm+d, CIMA, BDPM, AIFA, BAG-SL, AIPS, EPha, EMA SPOR and more — drift upstream without notice. Every consumer rediscovers the breakage individually, usually weeks late, usually after a customer complaint. We catch it at staging.
Pinned schemas
Per-source assertions across all 28 feeds — BAG-SL column checks, AIPS / dm+d / CIMA XSD, EPha / FDA NDC / DailyMed JSON-schema, oddb and RxNorm per-column regex. Failed rows land in a per-source quarantine; promotion is blocked above a 1% fail-rate.
Drift alerts
A run flagged `schema_drift` keeps the last-good snapshot in production, fires PagerDuty + Slack, and surfaces `schema_state: "stale"` in every API response so customers know before they ship a broken refill.
Diff-based change feed
Every promoted row writes a row to `changes` (before, after, source, occurred_at). Subscribe via webhook or `GET /v1/changes?since=...` — most-requested feature from EHR vendors.
Stale-data honesty
Every response carries `_meta.last_synced_at` and `schema_state` per source. The previous good snapshot is still served, but flagged. Silent shipping of broken data is the failure mode this exists to prevent.
In every response_meta
{
"drug": { ... },
"_meta": {
"ndc": { "last_synced_at": "2026-05-30T04:00:00Z", "schema_state": "ok" },
"dmd": { "last_synced_at": "2026-05-29T02:00:00Z", "schema_state": "ok" },
"cima": { "last_synced_at": "2026-05-30T03:00:00Z", "schema_state": "ok" },
"bag_sl": { "last_synced_at": "2026-05-15T05:01:00Z", "schema_state": "ok" },
"aips": { "last_synced_at": "2026-05-26T05:00:00Z", "schema_state": "ok" },
"epha": { "last_synced_at": "2026-05-25T03:00:00Z",
"schema_state": "stale", "reason": "schema_drift_2026-05-29" }
}
}