Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card
Monitorování pacientů na dálku s FHIR
Od domácího měření krevního tlaku po upozornění: Observations zařízení, podepsané webhooks, idempotentní pravidlo a co zůstává mimo datovou vrstvu. Otestovaný kód.
Vzdálené monitorování pacientů (RPM) shromažďuje měření, která si pacient provádí doma — krevní tlak, hmotnost, glykémii, saturaci kyslíkem — a umožňuje týmu péče tato data vidět a reagovat na ně mezi návštěvami. Datová část má čtyři kroky: dostat každé měření do záznamu pacienta jako kódovanou Observation s atributy zařízení; reagovat, když dorazí nové měření; rozhodnout pomocí jasného pravidla, zda vyžaduje pozornost; a vést záznam o tom, co tým udělal. Tato stránka buduje tento pipeline na HL7 FHIR R4 s Anpheros webhooks a TypeScript SDK, s kódem, který byl spuštěn proti platformě, a uvádí, co zůstává mimo datovou vrstvu.
Pipeline
cuff, scale, glucose meter, pulse oximeter
│ (Bluetooth / vendor app / Apple Health / Health Connect)
▼
patient's phone app ──► your backend ──► FHIR Observation (author: device) in the patient's record
│ webhook: resource.created (signed)
▼
your monitoring service: rule → alert → care team
│
note, call, CarePlan change, next appointment
Tři volby rozhodují, zda to bude v praxi fungovat:
- Jedno měření, jedna Observation. Každé měření z manžety je Observation s LOINC 85354-9 a dvěma komponentami (8480-6 systolický, 8462-4 diastolický), časem měření a
author_type: device. Na rozdíl od denních souhrnů z nositelných zařízení jsou RPM měření individuálními údaji, na které se lékař může dívat jeden po druhém. - Reagovat na události, ne na časovač. Webhook pro každou novou Observation umožňuje spuštění pravidla několik sekund po obdržení měření.
- Pravidla pro více měření. Jedno vysoké měření je často šum; většina protokolů se dívá na sérii. Pravidlo níže vyžaduje tři po sobě jdoucí měření při hodnotě 140/90 nebo vyšší. Tato prahová hodnota je příkladem, nikoli klinickým doporučením: pečovatelský tým nastavuje pravidlo pro každého pacienta.
Zápis měření ze zařízení
Telefonní aplikace (nebo cloud dodavatele zařízení, prostřednictvím vašeho backendu) zapisuje každé měření:
await anpheros.observations.create(patientId, {
code: '85354-9', category: 'vital-signs', effective_at: '2026-10-13T07:15:00-04:00', author_type: 'device',
components: [{ code: '8480-6', value: 152, unit: 'mm[Hg]' }, { code: '8462-4', value: 95, unit: 'mm[Hg]' }],
}, { source_system: 'bp-cuff-app' });
Pokud měření přicházejí přes Apple Health nebo Health Connect namísto přímo ze zařízení, načtěte je v telefonu, jak je popsáno v Data z nositelných zařízení ve FHIR, ale ponechte jednotlivá měření krevního tlaku jako samostatné Observation místo denních průměrů.
Reagování na nová měření
Jednou zaregistrujte koncový bod webhooku (POST /v1/webhooks s events: ["resource.created"]); odpověď bude obsahovat podpisové tajemství. Poté spusťte malou službu, která ověří každé doručení a vyhodnotí pravidlo:
import { createServer } from 'node:http';
import { Anpheros, apiKey, verifyWebhookSignature } from '@anpheros/sdk';
const anpheros = new Anpheros({ auth: apiKey(process.env.ANPHEROS_KEY!) });
const SECRET = process.env.WEBHOOK_SECRET!;
const seen = new Set<string>(); // deliveries are at-least-once: de-duplicate by event id
const alerted = new Set<string>(); // one alert per newest reading, however many events arrive
// Rule: the three most recent home readings all at or above 140/90 → tell the care team once
async function checkBloodPressure(patientId: string, observationId: string) {
const obs = await anpheros.observations.get(observationId);
if (obs.code !== '85354-9') return; // only blood pressure readings trigger the rule
const { data } = await anpheros.observations.list(patientId, { code: '85354-9', limit: 3 }); // newest first
const value = (o: typeof obs, code: string) => o.components.find(c => c.code === code)?.value ?? 0;
const allHigh = data.length === 3 && data.every(o => value(o, '8480-6') >= 140 || value(o, '8462-4') >= 90);
if (!allHigh || alerted.has(data[0].id)) return;
alerted.add(data[0].id);
console.log(`ALERT patient ${patientId}: last 3 readings ≥ 140/90 →`,
data.map(o => `${value(o, '8480-6')}/${value(o, '8462-4')}`).join(', ')); // in production: notify the care team
}
createServer(async (req, res) => {
const chunks: Buffer[] = [];
for await (const c of req) chunks.push(c as Buffer);
const body = Buffer.concat(chunks).toString('utf8');
const ok = await verifyWebhookSignature({ secret: SECRET, header: req.headers['anpheros-signature'] as string, body });
if (!ok) { res.writeHead(400).end(); return; } // not from Anpheros, or too old
res.writeHead(204).end(); // answer fast; do the work after
const event = JSON.parse(body);
if (seen.has(event.id)) return;
seen.add(event.id);
const d = event.data;
if (event.type === 'resource.created' && d.resource_type === 'Observation') await checkBloodPressure(d.patient, d.id);
}).listen(8799);
Jak jsme to testovali: čtyři ranní měření (136/86, 144/92, 149/94, 152/95) byla zapsána syntetickému pacientovi na lokální instanci platformy a platforma vygenerovala jednu podepsanou událost resource.created na každé měření. Tyto události, podepsané vlastním podpisovým kódem platformy, byly odeslány výše uvedené službě spolu se dvěma duplikáty a jedním požadavkem podepsaným nesprávným tajemstvím. Výsledek: nesprávný podpis byl 400, duplikáty byly ignorovány a služba vyvolala přesně jedno upozornění — 152/95, 149/94, 144/92 — nikoli jedno na událost.
V produkci ukládejte seen a alerted do databáze, nikoli do paměti, aby restart neopakoval upozornění.
Přijímání webhooků během vývoje. Anpheros přijímá a doručuje pouze na veřejné HTTPS koncové body: localhost nebo soukromá adresa je odmítnuta při registraci (400, pole url), a to i v sandboxu, a každé doručení adresu znovu kontroluje. Chcete-li přijímat události na svém notebooku, zpřístupněte službu prostřednictvím veřejného HTTPS tunelu a zaregistrujte adresu tunelu. Viz Webhooks.
Co by měl záznam zobrazovat následně
Samotné upozornění žije ve vaší monitorovací službě, ale záznam by měl ukazovat, co z něj vyplynulo, aby další lékař a pacient viděli celý příběh:
- naměřené hodnoty, každá označená jako data ze zařízení s jejím zdrojovým systémem (provenience);
CarePlans monitorovacím plánem (co se měří, jak často, cíl);Encounter(třídaVRpro vzdálený kontakt), když tým zavolá pacientovi, a jakákoli změna medikace jakoMedicationStatement.
Anpheros ukládá tyto zdroje; nemá vlastní zdroj pro upozornění nebo úkoly (Flag, Task a Communication nejsou mezi jeho typy zdrojů), takže fronty upozornění a směrování na pohotovost patří vaší službě.
Fakturace, regulace a bezpečnost
Programy RPM často závisí na pravidlech pro úhradu — ve Spojených státech Medicare platí za vzdálené fyziologické monitorování pod specifickými CPT kódy s minimálním počtem dnů s daty a časem stráveným týmem péče. Tato pravidla se mění a nejsou něčím, co by datová platforma mohla certifikovat; zkontrolujte aktuální pravidla CMS a uchovávejte důkazy (měření a čas týmu) ve svém vlastním systému. Software, který interpretuje měření pro řízení diagnózy nebo léčby, může být regulován jako zdravotnický prostředek. Prahové hodnoty ponechte v rukou klinických lékařů a zaznamenávejte každé upozornění a reakci.
Kde Anpheros zapadá
Anpheros poskytuje záznam (FHIR R4 Observations s proveniencí, CarePlan, Encounter), podepsané webhooky s opakovanými pokusy, souhlas, pokud aplikace jiné organizace potřebuje číst údaje, a přístupový log, který může pacient vidět. Nepřipojuje se k dodavatelům zařízení, nerozhoduje, co je abnormální, neodesílá upozornění ani nezpracovává fakturaci.
Často kladené dotazy
Který FHIR resource ukládá naměřenou hodnotu krevního tlaku z domova?
Observation s LOINC 85354-9 (panel krevního tlaku) a dvěma komponentami, 8480-6 (systolický) a 8462-4 (diastolický), každá valueQuantity v mm[Hg], s časem měření a zařízením jako autorem.
Má se u RPM dat používat denní průměr nebo jednotlivá měření?
Jednotlivá měření pro klinická měření, jako je krevní tlak, hmotnost nebo glukóza, protože je kliničtí pracovníci kontrolují a počítají. Denní souhrny jsou vhodné pro vysokofrekvenční data z nositelných zařízení, jako je srdeční frekvence nebo kroky.
Jak spustit upozornění, když dorazí nové měření?
Přihlaste se k odběru resource.created webhooks, ověřte podpis, načtěte novou Observation a vyhodnoťte své pravidlo nad nedávnou sérií. Dodávky se mohou opakovat, takže odstraňte duplicity podle ID události a zajistěte, aby upozornění bylo idempotentní.
Může Anpheros posílat upozornění klinickým pracovníkům?
Ne. Anpheros upozorňuje vaši službu prostřednictvím webhooks; kdo je upozorněn, jak a kdy, se rozhoduje ve vašem systému.
Související
- Data z nositelných zařízení ve formátu FHIR
- Virtuální péče a AI lékaři: potřebná data
- Webhooks
- Vysvětlení původu zdravotnických dat
- Integrace zdravotní péče
Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card