diff --git a/docs/JOURNAL.md b/docs/JOURNAL.md index b1869e61..9ab865a4 100644 --- a/docs/JOURNAL.md +++ b/docs/JOURNAL.md @@ -1,5 +1,25 @@ # Journal +## 2026-07-16 — MIE product research + the #254 assumption register (self-sufficiency doc) + +`docs/MIE_PRODUCT_RESEARCH_2026-07-16.md` executes Doug's "know our products, stop waiting on us" +directive. §1 maps the landscape (WebChart = the ONC-certified platform EHR; **Enterprise Health = +the occupational-health EHR built ON it** — surveillance programs, immunizations, OSHA +recordkeeping, case management; NoMoreClipboard = the PHR line; BlueHive = a third-party network, +not MIE). §2 fixes WorkWell's position in one sentence: **the standards-based CQL/eCQM layer over +EH-shaped data** — WorkWell complements EH's native panel due/decertification logic by pulling data +over FHIR and computing portable standards-based compliance (authorable CQL measures, +evidence-carrying outcomes, audit-first case workflow, eCQM exports), with a module-level +EH↔WorkWell seam mapping. §3 is the register: every still-open #254 item now carries a working +assumption + falsifier + the live surface that verifies it (A2/A5 land automatically when the +teatea runbook runs; B9's WorkWell-side roster is promoted to *the working design*; C14/C15/C16 +stay flagged as genuinely MIE-gated production questions, not trial blockers). A8 requires a real +coded FHIR Condition for cms122, and B11 keeps MRNs system-local until a shared authority is proven. +§4 names the +deployability shape: the whole live integration is env-var configuration on one seam — *configure, +don't build* — with the PHI environment split still the production gate. Cross-linked from the +#254 Answer log so that doc stays the single index. + ## 2026-07-16 — teatea runbook: auth probe + import-file generator (owner steps packaged) Everything the owner needs to bring the teatea trial live, in one PR. **Runbook** diff --git a/docs/MIE_INTEGRATION_QUESTIONS_2026-07-09.md b/docs/MIE_INTEGRATION_QUESTIONS_2026-07-09.md index 04a41057..13430a99 100644 --- a/docs/MIE_INTEGRATION_QUESTIONS_2026-07-09.md +++ b/docs/MIE_INTEGRATION_QUESTIONS_2026-07-09.md @@ -241,5 +241,18 @@ what does its contract look like? `/webchart.cgi/jwks/`, no dynamic registration. The remaining open items (A2 pagination, A4–A8, B9–B12, C14–C16) were not covered in the meeting; per Doug's be-self-sufficient direction they move to an assumption register with live verification where observable - (`docs/MIE_PRODUCT_RESEARCH_2026-07-16.md`, forthcoming) instead of re-blocking on MIE. This + (`docs/MIE_PRODUCT_RESEARCH_2026-07-16.md`) instead of re-blocking on MIE. This entry supersedes "send #254" as an owner step — the package is delivered and discussed. +- **2026-07-16 (assumption register):** `docs/MIE_PRODUCT_RESEARCH_2026-07-16.md` §3 records a + working assumption + falsifier + live-verification surface for **every** still-open item — A2 + (standard `link[next]`, observed on the runbook's live pull), A4 (conservative serial posture), + A5 (LOINC-coded valueQuantity, spot-checked post-import), A6 (content-hash — the #263 decided + design), A7/A8 (cms122 requires an actual coded FHIR Condition; fail-closed), B9 + (**WorkWell-side roster is the working design**), B10 (flat live-tenant placement until real keys + observed), B11 + (MRNs remain system-local `(authority, partition, value)` identifiers until a shared enterprise + key is confirmed), B12 (per-endpoint tenant + topology sidesteps employer fields for v1), C14/C15/C16 (not self-resolvable — posture + unchanged; they gate production, not trial work). §1–2 map MIE's products (WebChart platform / + **Enterprise Health** occ-health EHR / NoMoreClipboard; BlueHive is third-party) and fix + WorkWell's position: the standards-based CQL/eCQM layer alongside EH's native surveillance logic. diff --git a/docs/MIE_PRODUCT_RESEARCH_2026-07-16.md b/docs/MIE_PRODUCT_RESEARCH_2026-07-16.md new file mode 100644 index 00000000..fc3b2070 --- /dev/null +++ b/docs/MIE_PRODUCT_RESEARCH_2026-07-16.md @@ -0,0 +1,181 @@ +# MIE Product Landscape & the #254 Assumption Register + +**Date:** 2026-07-16 · **Status:** Research record (Doug's be-self-sufficient directive, 2026-07-15 +meeting) · **Companion to:** `docs/MIE_INTEGRATION_QUESTIONS_2026-07-09.md` (the #254 index — every +self-resolved item below is cross-linked from its Answer log) and +`docs/INTEGRATION_RESEARCH_2026-07-13.md` (the verified API contract). + +Two jobs: (1) map MIE's products so it's explicit **what WorkWell is and complements**; (2) give +every still-open #254 question a **documented working assumption + what would falsify it**, so +nothing re-blocks on MIE. + +--- + +## 1. MIE's product landscape (researched 2026-07-15/16; sources cited) + +| Product | What it is | Source | +|---|---|---| +| **WebChart EHR** | MIE's flagship cloud EHR — ONC-ACB 2015-certified ambulatory EHR (primary care, specialty, student health, federal, occupational health). The platform everything else builds on. FHIR R4 / US Core 7.0.0 / USCDI v4 / SMART App Launch 2.2.0 / Bulk Data 2.0.0, Inferno g10-tested. | webchartnow.com/packages/webchart-ehr; docs.webchartnow.com FHIR API page | +| **Enterprise Health (EH)** | MIE's **occupational/employee health EHR built ON the WebChart platform** (2013; co-developed with Dow, Eli Lilly, Disney). Modules: clinical charting, **medical/health surveillance programs**, **immunization/vaccination programs**, **OSHA recordkeeping + audit-ready compliance reporting**, case management, injury care, return-to-work, onsite-clinic management. Customers incl. NASA, the VA, Phillips 66. | enterprisehealth.com + /features | +| **NoMoreClipboard** | Patient engagement / PHR / portal line. | historical MIE product line | +| **BlueHive** | **Not MIE** — a third-party occupational-health provider network that integrates with WebChart/EH via HL7 (routes orders to 20k+ external providers, returns results). Relevant as the "out-of-clinic" leg EH documents against. | bluehive.com/integrations | +| Quality reporting | WebChart advertises MACRA/QPP + MIPS workflows (the trial dashboard's "Quality Reporting — Enroll / Check MIPS Participation Status" portlet links the CMS QPP participation lookup). | docs.webchartnow.com Quality Resources | + +**Shared infrastructure notes:** WebChart and EH share one docs system and one **Data Migration / +CSV import engine** (the formats PR 4's generator emits), one FHIR surface, and the +`webchart.cgi?f=&s=` admin UI scheme. The dev DB (`ghcr.io/mieweb/dev-wcdb`) carries the +EH-flavored occupational fields (`employer_name`, incident/OSHA tables). + +## 2. Where WorkWell sits (Doug-confirmed direction) + +**WorkWell is the standards-based CQL/eCQM measure layer alongside Enterprise Health's native +operational surveillance workflows**. EH captures the occupational-health *data* (surveillance +exams, immunizations, OSHA events, encounters) and already evaluates panel due dates, required +actions, and decertification; WorkWell **pulls that data out over FHIR and computes externally +authorable CQL measures** — deterministic population runs, evidence-carrying outcomes, case +workflow, audit-first posture, and eCQM-grade exports (MeasureReport/QRDA). Doug's D17 answer fixed +the direction: **data flows WebChart→WorkWell; CQL runs on our side** (no engine-inside-the-DB, no +CQL→SQL now). The complement is CQL/standards portability and evidence, not a claim that EH lacks +its own program-specific due/compliance logic. + +Module-level mapping (EH concept → WorkWell seam): + +| Enterprise Health concept | WorkWell counterpart | Seam | +|---|---|---| +| Health-surveillance program membership | measure enrollment | `stampEnrollment` roster (B9) | +| Surveillance exams / labs / vitals | measure events | ingress crosswalk (`terminology.ts`) | +| Immunization program | vax measures + ICE forecasts | CVX crosswalk + ADR-029 sidecar | +| Employer / location / provider | tenant→enterprise→location→provider hierarchy | directory model (ADR-019) | +| OSHA recordkeeping (incidents) | OSHA surveillance measures (catalog) | measure catalog; incident *data* not yet consumed | +| Case management / injury care | case workflow (worklist, outreach, rerun-to-verify) | `caseflow` | +| Audit-ready reporting | append-only `audit_events` + auditor packets | `audit` | +| MIPS/QPP quality reporting | eCQM measures + MeasureReport/QRDA exports | `standards`/`fhir` | + +So the demo story is: *EH-shaped data, WorkWell-computed compliance* — which is exactly what the +dev-DB proof (#246), the HAPI simulator (ADR-032), and the live teatea tenant (2026-07-16 spec) +demonstrate at increasing levels of realism. + +## 3. The assumption register — every still-open #254 item + +Convention: **Assumption** = what we build against today · **Falsifier** = the observation that +would change it · **Where verified** = the live surface that can confirm it without MIE. + +### A2 — pagination semantics *(partially observable now)* +- **Assumption:** standard FHIR searchset `Bundle.link[relation=next]` with `_count` honored; + no ordering guarantee relied on (the client dedupes by id across pages). +- **Falsifier:** teatea returning offset-style params, ignoring `_count`, or minting off-origin + next links (the client's origin guard would surface this loudly). +- **Where verified:** runbook §5 records the observed page size + link shape from the live pull. + +### A4 — rate limits & latency +- **Assumption:** none published; the client's conservative posture stands — serial per-patient + composition, bounded 429/5xx retries (2, short backoff), 10s timeouts. No parallel fan-out + against teatea until observed behavior justifies it. +- **Falsifier:** 429s on the ~30-patient pull (runbook §5 records any). + +### A5 — observation representation *(observable after seeding)* +- **Assumption:** imported observations surface as FHIR `Observation` with `valueQuantity` and a + LOINC coding resolved via the instance's observation-code compendium (the dev DB behaved this + way: LOINC-coded numeric observations). Titer-proves-immunity (coded/text results) remains + deferred until a coded-result example is observed. +- **Falsifier:** the runbook's post-import spot-check finding name-only (LOINC-less) or + text-blob observations — that immediately matters to the crosswalk and gets recorded on A5. + +### A6 — change signals +- **Assumption (decided design):** none usable — no `_lastUpdated`, no history. Delta evaluation + uses **content-hash change detection** (#263 design; owner-gated `eval_state` DDL). `$export + _since` remains unverified and is not load-bearing. +- **Falsifier:** teatea honoring `Group/$export?_since=` (worth one probe once a `Group` exists). + +### A7 — procedure coding density +- **Assumption:** production procedures are denser than the dev seed's 1/99 CPT-coded rows, but we + don't depend on it: lab-driven measures ride LOINC observations (the crosswalk's + Observation→Procedure synthesis), and mammography enters as a completed order (runbook §4). +- **Falsifier:** a production dataset where procedures carry neither CPT nor a LOINC-mapped + observation twin — pre-production unknowable; flagged risk, revisit at first real-customer data. + +### A8 — problem list +- **Assumption:** cms122 requires a real problem-list/FHIR `Condition` carrying the Diabetes value + set code (the teatea seed uses SNOMED CT 44054006). An ICD value on + `Encounter.primary_diagnosis` is not sufficient: the current normalizer does not synthesize a + Condition from Encounter data, and CQL retrieves `[Condition: "Diabetes"]`. MIE's Conditions CSV + API can record SNOMED concept ids, but whether that record appears on the trial's FHIR Condition + surface remains an observation to verify. Missing Condition ⇒ out of IPP, fail closed. +- **Falsifier:** a future, explicitly tested ICD→Condition normalization rule or a different + standards-approved diagnosis source; neither is assumed today. + +### B9 — OH program enrollment home +- **Assumption (now the working design):** **WorkWell-side roster** is the authoritative home — + `stampEnrollment` + `ROSTER_ELIGIBLE_MEASURES`, with the live tenant defaulting to enroll-all + (spec §4) and an env-JSON override. WebChart carries no `urn:workwell:vs:*` membership Condition. +- **Falsifier:** EH's surveillance-panel tables (Panel Membership Import exists in the Data + Migration hub!) surfacing per-program membership over FHIR — then the roster gets a WebChart + *reader* behind the same seam. Worth one look on teatea: whether panel membership manifests in + any FHIR resource. + +### B10 — provider/location keys +- **Assumption:** unresolved; the live tenant uses a **flat single-location/single-provider** + placement (spec §1) precisely so no wrong hierarchy is baked in. +- **Falsifier/next data:** `Practitioner`/`Location`/`Organization` resources on teatea patients + (the trial exposes all three resource types — inspect once charts exist). + +### B11 — identity keys +- **Assumption:** an MRN is **system-local identity only**, keyed by + `(WebChart instance/assigning authority, partition, value)`. MIE documents partition+MRN + uniqueness within a database; that does not make the value globally shared, and raw MRNs must not + drive E15 cross-system linkage. Live-tenant subjects therefore remain deliberately unlinked to + twh/ihn people (#187 PR-3). +- **Falsifier / promotion rule:** only an explicitly documented enterprise master-person identifier + on `Patient`/`Person` (or another MIE-confirmed shared authority) may be promoted into E15's + `nationalId`/`matchKey` seam. + +### B12 — employer/occupational fields +- **Assumption:** employer fields (`employer_name`, `employer_uid`) do **not** surface in base + US-Core FHIR; tenant attribution for a real deployment will need either an EH extension, the + legacy API, or deployment topology (one WorkWell per employer). The live tenant sidesteps it + (one tenant per configured endpoint — which IS the topology answer for v1). +- **Falsifier:** an employer extension/Observation on teatea patients (check once seeded — the + import's `patients.employer_country` hints the fields exist in the model). + +### C14 — PHI/BAA · C15 — user auth · C16 — volume +- **Posture unchanged** — these were not discussed and are **not self-resolvable** (legal/contract + + MIE-side decisions). Standing assumptions: the demo stack never receives PHI and no + PHI-capable environment is provisioned before the BAA chain is answered + (`docs/PRODUCTION_READINESS_2026-07.md` — C14); auth stays hardcoded demo accounts, with the + JWT mechanics provider-agnostic for whichever of MIE-SSO/WebChart-delegated/own-OIDC wins (C15, + #265); volume assumed **≤10k subjects initially** (trial + first integration scale — measured + baseline ~68 ms/eval single-threaded, worker-pool 3.7–5.1× — comfortably inside a nightly + window at 10k×14; the 120k question stays parked with #256/#263). +- These three stay flagged in every MIE conversation; they gate *production*, not the trial work. + +### D17/D18 — answered +D17: WebChart→WorkWell, CQL our side (Doug); Option B (#292) dormant. D18: self-hosted ICE +(ADR-029) — residual question is only whether MIE prefers an MIE-hosted ICE eventually. + +## 4. Deployability follow-ups this research surfaces + +1. **Per-customer onboarding runbook** — PR 4's teatea runbook §§1–3 (keypair → JWT-screen client + registration → probe) *is* the per-practice recipe; generalize it into `docs/DEPLOY.md` once the + grant question (A3 residual) is settled by the first probe run. +2. **Env-var contract is complete** — the whole live integration is 3–6 `WORKWELL_WEBCHART_*` vars + on the existing seam; no code fork per customer. That is the deployable shape: *configure, don't + build*. +3. **The PHI gap remains the production gate** — everything in this wave is trial/synthetic; + `PRODUCTION_READINESS_2026-07.md` items 1–2 (env split #267, auth #265) are still the floor + before any real-customer data. +4. **HL7 ingestion exists as a WebChart-side alternative** (ADT/VXU/ORU) if FHIR read-back ever + proves insufficient for a data class — noted, not planned. + +## 5. Sources + +- [`mieweb/docs` FHIR API](https://github.com/mieweb/docs/tree/master/content/resources/system-specifications/fhir-application-programming-interface-api) + and Data Migration sources, including + [Conditions CSV](https://github.com/mieweb/docs/blob/master/content/features/system-administration/data-migration/conditions-csv-api.md), + [MRN import semantics](https://github.com/mieweb/docs/blob/master/content/features/system-administration/data-migration/chart-medical-record-number-mrn-import-options.md), and + [Panel Membership](https://github.com/mieweb/docs/blob/master/content/features/health-surveillance/panel-membership-portlet.md) + (plus their published Google-Sheet column specs) +- Live probes 2026-07-16: `teatea.webchartnow.com/webchart.cgi/fhir/{metadata,.well-known/smart-configuration}` +- [Enterprise Health](https://www.enterprisehealth.com/), webchartnow.com, and + [BlueHive](https://bluehive.com/) product pages +- `docs/INTEGRATION_RESEARCH_2026-07-13.md` (the verified FHIR contract), `docs/WEBCHART_FHIR_MAPPING.md` +- Doug meeting 2026-07-15 (owner recollection, recorded in the #254 Answer log 2026-07-16)