MDClarity · Pipeline explainer
How SeaRad's scheduled pipelines work
SeaRad (Seattle Radiologists) runs a ClarityFlow patient-access setup fed two ways — HL7 every 10 minutes and a daily appointment-file pull — both flowing into one shared benefits-and-letters core, plus a monthly eligibility re-sweep. Notably, everything arrives over a single MDClarity-hosted SFTP — there's no vendor/EHR host.
Cadence · 01
Three Windows Scheduled Tasks under \MDC\ on WORKER-1, with a yield hierarchy:
the frequent HL7 loop defers to the daily run, which defers to the monthly run — so the big passes never
collide with the small ones.
Pipeline 1 · every 10 min · ClarityFlow
SeaRad's near-real-time feed. Task HL7 - Processing - SeaRad fires
every 10 minutes, all day (<Repetition><Interval>PT10M</Interval><Duration>P1D</Duration>,
IgnoreNew). It parses inbound HL7, loads fee schedules, then runs the shared visit core.
Daily-Visit-Processing-HL7
-
▶Parse-HL7— download & transform inbound HL7
- download ← mdcssh SFTP
/HL7→ {HL7Directory} (remote-delete on success) - LoadHL7Files → ADT (A01/03/04/08/09/10/28/31), SIU (S12–S15), ORM^O01 — no DFT/charges
- Update HL7ProcessLog + HL7Delta + Visit + VisitCharge (SQL)
- Load-Transform-HL7 → Transform patient/insurance/visit/charge + LoadPatients (ECC=1 per ticket)
- download ← mdcssh SFTP
-
▶Load-ALL-Medicare-Schedules · Load-ALL-Medicaid-Schedules— fee schedules for pricing
- Load ContractMap
- Medicare: DME · Drug · Lab · RVU · Endoscopy-Base · Multiple-Procedure · MidLevelProvider (load_schedule)
- Medicaid schedules
-
jobPopulate-DimensionsEligibilityInsurance / QuoteInsurance / Time / State dimension members
-
jobLoad-Visits — the shared corebenefits → price → letters → sync → see Shared core
-
jobData-Integrity-Reportpost-load integrity checks
-
workqueue_assignmentWorkqueueAssignmentPopulate user workqueues from
WorkqueueAssignmentCriteria
Pipeline 2 · daily @ 22:15 · ClarityFlow
The file-based sibling of the HL7 loop, once a day at 22:15 (single trigger, no repetition). Pulls appointment and insurance-map text files off the same SFTP, builds the source/transform tables, then runs the same visit core.
Daily-Visit-Processing
-
▶Parse-Appointment-Files— pull & parse appointment text files
- Download-Files →
SSH.exe /download -downloadall -remotedeletefrom mdcssh SFTP root → {SourceDirectory} - execute_process →
cmd.exe /c delthe archive dir (inline; no external script) - ExecuteJobForFiles over
*mdclarity*.txt→ Parse-Appointment-File (load_file → Merge to SourceAppointment)
- Download-Files →
-
jobParse-Insurance-Map-File
load_file→ insurance dimension member map -
jobLoad-Source-Visit-InfoBuild TempVisitDelta + TransformVisit / Insurance / Charge from the appointment source
-
jobLoad-ALL-Medicare-Schedules · Load-ALL-Medicaid-SchedulesSame fee-schedule loads as the HL7 loop
-
jobPopulate-Dimensions
-
▶Populate-Core-Tables— patients, charges, facility, bill type
- LoadPatients
- Populate ChargeType · Insert Additional Charges from Appointments
- Load Facility · Load BillType
-
jobLoad-Visits — the shared corebenefits → price → letters → sync → see Shared core
-
jobData-Integrity-Report
-
workqueue_assignmentWorkqueueAssignment
Pipeline 3 · monthly, 1st @ 00:30 · eligibility
A benefits/eligibility pass over the visit set, run once a month on the 1st. Despite the job name
(Daily-Processing-Eligibility), the trigger is monthly. It re-checks coverage and re-prices —
but, unlike the per-visit core, it does not send letters.
Daily-Processing-Eligibility
-
SQLLoad VisitDelta · LoadVisitBatch · Load TempBatchVisitStage the visits to re-verify into the batch tables
-
CheckBenefitsCheckBenefits · Re-Check Benefits · AutoApplyBenefitsRe-run eligibility (payer API) and re-apply copay / deductible / coinsurance
-
CalculateVisitsCalculateVisitsRecompute patient responsibility with refreshed benefits
-
SQLCoverage status + custom properties
Load-CustomProperty-CoverageStatus· UpdateVisitCustomPropertyFromQuery -
sync_batchSyncBatch · ExportBatchVisitEligibility · SearchForInsurancePromote batch → production, export eligibility, discover missing insurance
-
jobGenerate-Report · Load-Visit-Fact · Update-Dashboard-TablesRefresh reporting facts and dashboard rollups
Shared · the visit core
Both the HL7 loop and the daily file run call the same Load-Visits job. This is where
SeaRad's ClarityFlow actually happens: staged visits get benefits, pricing, letters, and promotion to
production. (The monthly sweep runs a trimmed version of this same sequence, minus letters.)
- Load VisitDelta · Load TempBatchVisit · Augment Visit Delta · LoadVisitBatch → stage into VisitBatch / QuoteBatch
- CheckBenefits · Re-Check Benefits → payer eligibility API (billable; deduped)
- AutoApplyBenefits → apply copay / deductible / coinsurance
- CalculateVisits → compute patient responsibility
- LogVisitChangeEventsBatch → diff batch vs production
- AutoSendLetters → patient estimate letters (email / SMS)
- Load TransformVisitInsuranceCoverageStatus · Load-CustomProperty-CoverageStatus + custom props
- SyncBatch → promote *Batch tables to production Visit / Quote / …
- ExportBatchVisitEligibility · SearchForInsurance
- Generate-Report
Reference · Interfaces
Unusually simple: one SFTP endpoint (MDClarity-hosted, mdcssh) for all inbound
data — HL7, appointment files, and the insurance map. No vendor/EHR host, and no outbound HL7 — patient
letters go out as email / SMS from the letter engine.
Reference · Glossary
The native pipeline tasks used above, per docs/tasks.
Fir = per-visit core, coral = monthly sweep.
HL7Archive + type-specific staging tables; per-file, batch, import-only.Patient from a query over the transform tables (SeaRad forces electronic-comm consent = 1).DimensionMember metadata cache (insurance, time, state, …) from entity tables.EligibilityTxn. Billable, deduped.AutoBenefitsRule.AutoSendLetterConfig (consent + contact required).*Batch staging tables to production (delete-then-insert per entity, each in its own txn).WorkqueueAssignmentCriteria; optional auto-unassign of non-matches.Dashboard_* rollup tables so dashboards read fast.SSH.exe (SFTP download) and cmd.exe /c del (archive cleanup) — args inline, no custom script.