AnpherosAnpheros PlatformDevelopers

Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card

FHIR के साथ रिमोट पेशेंट मॉनिटरिंग

घर पर ब्लड प्रेशर रीडिंग से लेकर अलर्ट तक: डिवाइस ऑब्ज़र्वेशन, हस्ताक्षरित वेबहुक, एक इडेम्पोटेंट नियम, और डेटा लेयर के बाहर क्या रहता है। टेस्टेड कोड।

रिमोट पेशेंट मॉनिटरिंग (RPM) उन मापों को एकत्र करता है जो एक रोगी घर पर लेता है — रक्तचाप, वजन, ग्लूकोज, ऑक्सीजन संतृप्ति — और देखभाल टीम को यात्राओं के बीच उन्हें देखने और उन पर कार्रवाई करने की अनुमति देता है। डेटा भाग में चार चरण होते हैं: प्रत्येक रीडिंग को रोगी के रिकॉर्ड में एक कोडेड, डिवाइस-अट्रीब्यूटेड ऑब्जर्वेशन के रूप में प्राप्त करना; जब कोई नई रीडिंग आती है तो प्रतिक्रिया करना; एक स्पष्ट नियम के साथ तय करना कि क्या इस पर ध्यान देने की आवश्यकता है; और टीम ने क्या किया इसका रिकॉर्ड रखना। यह पृष्ठ Anpheros वेबहुक और TypeScript SDK पर HL7 FHIR R4 के साथ उस पाइपलाइन का निर्माण करता है, जिसमें प्लेटफ़ॉर्म के विरुद्ध चलाया गया कोड है, और यह सूचीबद्ध करता है कि डेटा लेयर के बाहर क्या रहता है।

पाइपलाइन

 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

तीन विकल्प तय करते हैं कि यह व्यवहार में काम करता है या नहीं:

डिवाइस से रीडिंग लिखना

फ़ोन ऐप (या डिवाइस विक्रेता का क्लाउड, आपके बैकएंड के माध्यम से) प्रत्येक रीडिंग लिखता है:

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' });

यदि रीडिंग सीधे डिवाइस से आने के बजाय Apple Health या Health Connect के माध्यम से आती है, तो उन्हें फ़ोन पर FHIR में वियरेबल डेटा में बताए अनुसार पढ़ें, लेकिन व्यक्तिगत रक्तचाप रीडिंग को दैनिक औसत के बजाय व्यक्तिगत Observations के रूप में रखें।

नई रीडिंग पर प्रतिक्रिया करना

एक बार वेबहुक एंडपॉइंट पंजीकृत करें (POST /v1/webhooks के साथ events: ["resource.created"]); प्रतिक्रिया में साइनिंग सीक्रेट शामिल होता है। फिर एक छोटी सेवा चलाएं जो प्रत्येक डिलीवरी को सत्यापित करती है और नियम का मूल्यांकन करती है:

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);

हमने इसका परीक्षण कैसे किया: चार सुबह की रीडिंग (136/86, 144/92, 149/94, 152/95) को प्लेटफ़ॉर्म के एक स्थानीय इंस्टेंस पर एक सिंथेटिक रोगी को लिखा गया था, और प्लेटफ़ॉर्म ने प्रति रीडिंग एक हस्ताक्षरित resource.created ईवेंट उत्पन्न किया। वे ईवेंट, प्लेटफ़ॉर्म के अपने साइनिंग कोड के साथ हस्ताक्षरित, ऊपर दी गई सेवा को दो डुप्लिकेट और एक गलत सीक्रेट के साथ हस्ताक्षरित अनुरोध के साथ भेजे गए थे। परिणाम: गलत हस्ताक्षर को 400 मिला, डुप्लिकेट को अनदेखा कर दिया गया, और सेवा ने ठीक एक अलर्ट उठाया - 152/95, 149/94, 144/92 - प्रति ईवेंट एक नहीं।

उत्पादन में, अलर्ट को दोहराने से बचने के लिए seen और alerted को मेमोरी में रखने के बजाय डेटाबेस में रखें।

डेवलपमेंट के दौरान वेबहुक प्राप्त करना। Anpheros केवल सार्वजनिक HTTPS एंडपॉइंट्स को स्वीकार और डिलीवर करता है: जब आप इसे पंजीकृत करते हैं (400, फ़ील्ड url) तो एक localhost या निजी पता अस्वीकार कर दिया जाता है, सैंडबॉक्स में भी, और प्रत्येक डिलीवरी पते की फिर से जांच करती है। अपने लैपटॉप पर ईवेंट प्राप्त करने के लिए, सेवा को एक सार्वजनिक HTTPS टनल के माध्यम से उजागर करें और टनल के पते को पंजीकृत करें। वेबहुक देखें।

रिकॉर्ड में बाद में क्या दिखना चाहिए

अलर्ट स्वयं आपकी मॉनिटरिंग सेवा में रहता है, लेकिन रिकॉर्ड को यह दिखाना चाहिए कि इसका क्या परिणाम हुआ, ताकि अगला चिकित्सक और रोगी पूरी कहानी देख सकें:

Anpheros इन संसाधनों को संग्रहीत करता है; इसमें अपना अलर्टिंग या टास्क संसाधन नहीं है (Flag, Task और Communication इसके संसाधन प्रकारों में से नहीं हैं), इसलिए अलर्ट कतारें और ऑन-कॉल रूटिंग आपकी सेवा से संबंधित हैं।

बिलिंग, विनियमन और सुरक्षा

RPM कार्यक्रम अक्सर प्रतिपूर्ति नियमों पर निर्भर करते हैं — संयुक्त राज्य अमेरिका में, Medicare न्यूनतम दिनों के डेटा और देखभाल टीम द्वारा बिताए गए समय के साथ विशिष्ट CPT कोड के तहत रिमोट फिजियोलॉजिक मॉनिटरिंग का भुगतान करता है। वे नियम बदलते रहते हैं और डेटा प्लेटफ़ॉर्म कुछ भी प्रमाणित नहीं कर सकता है; वर्तमान CMS नियमों की जाँच करें और अपने स्वयं के सिस्टम में साक्ष्य (रीडिंग्स और टीम का समय) रखें। निदान या उपचार को चलाने के लिए रीडिंग की व्याख्या करने वाला सॉफ़्टवेयर एक चिकित्सा उपकरण के रूप में विनियमित हो सकता है। थ्रेशोल्ड को चिकित्सकों के हाथों में रखें और हर अलर्ट और प्रतिक्रिया को लॉग करें।

Anpheros कहाँ फिट बैठता है

Anpheros रिकॉर्ड (FHIR R4 Observations with provenance, CarePlan, Encounter), रिट्री के साथ हस्ताक्षरित वेबहुक, यदि किसी अन्य संगठन के ऐप को रीडिंग पढ़ने की आवश्यकता हो तो सहमति, और एक एक्सेस लॉग प्रदान करता है जिसे रोगी देख सकता है। यह डिवाइस विक्रेताओं से कनेक्ट नहीं होता है, यह तय नहीं करता है कि क्या असामान्य है, अलर्ट नहीं भेजता है या बिलिंग को हैंडल नहीं करता है।

अक्सर पूछे जाने वाले प्रश्न

घर के रक्तचाप की रीडिंग किस FHIR संसाधन में संग्रहीत होती है?

LOINC 85354-9 (रक्तचाप पैनल) के साथ एक Observation और दो घटक, 8480-6 (सिस्टोलिक) और 8462-4 (डायस्टोलिक), प्रत्येक valueQuantity में mm[Hg], माप समय और डिवाइस को लेखक के रूप में।

क्या RPM डेटा दैनिक औसत होना चाहिए या व्यक्तिगत रीडिंग?

रक्तचाप, वजन या ग्लूकोज जैसे नैदानिक ​​मापों के लिए व्यक्तिगत रीडिंग, क्योंकि चिकित्सक उनकी समीक्षा करते हैं और उन्हें गिनते हैं। दैनिक सारांश उच्च-आवृत्ति पहनने योग्य डेटा जैसे हृदय गति या चरणों के लिए उपयुक्त हैं।

जब कोई नई रीडिंग आती है तो मैं अलर्ट कैसे ट्रिगर करूँ?

resource.created वेबहुक की सदस्यता लें, हस्ताक्षर सत्यापित करें, नया Observation प्राप्त करें और हाल की श्रृंखला पर अपने नियम का मूल्यांकन करें। डिलीवरी दोहराई जा सकती है, इसलिए इवेंट आईडी द्वारा डी-डुप्लिकेट करें और अलर्ट को इडेम्पोटेंट बनाएं।

क्या Anpheros चिकित्सकों को अलर्ट भेज सकता है?

नहीं। यह वेबहुक के माध्यम से आपकी सेवा को सूचित करता है; किसे अलर्ट किया जाता है, कैसे और कब यह आपके सिस्टम में तय किया जाता है।

संबंधित

Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card

Product updates by email

New features, guides and the end of the beta. One email a month at most.

Send me occasional Anpheros Platform updates by email (new features, API changes, guides). I'll confirm by email and can unsubscribe in one click from any email. Privacy