AnpherosAnpheros PlatformDevelopers

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

Απομακρυσμένη παρακολούθηση ασθενών με FHIR

Από μετρήσεις πίεσης αίματος στο σπίτι έως ειδοποιήσεις: Παρατηρήσεις συσκευής, υπογεγραμμένα webhooks, κανόνας ιδεοδυναμίας και τι μένει εκτός του επιπέδου δεδομένων. Δοκιμασμένος κώδικας.

Η απομακρυσμένη παρακολούθηση ασθενών (RPM) συλλέγει μετρήσεις που λαμβάνει ένας ασθενής στο σπίτι — αρτηριακή πίεση, βάρος, γλυκόζη, κορεσμός οξυγόνου — και επιτρέπει σε μια ομάδα φροντίδας να τις βλέπει και να ενεργεί βάσει αυτών μεταξύ των επισκέψεων. Το κομμάτι των δεδομένων έχει τέσσερα βήματα: εισαγωγή κάθε μέτρησης στο αρχείο του ασθενούς ως κωδικοποιημένη Παρατήρηση (Observation) με απόδοση συσκευής· αντίδραση όταν φτάνει μια νέα μέτρηση· απόφαση με έναν σαφή κανόνα εάν χρειάζεται προσοχή· και διατήρηση αρχείου για το τι έκανε η ομάδα. Αυτή η σελίδα κατασκευάζει αυτή τη ροή με HL7 FHIR R4 με Anpheros webhooks και το TypeScript SDK, με κώδικα που εκτελέστηκε στην πλατφόρμα, και παραθέτει τι παραμένει εκτός του επιπέδου δεδομένων.

Η ροή εργασίας

 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

Τρεις επιλογές καθορίζουν αν αυτό λειτουργεί στην πράξη:

Εγγραφή μετρήσεων από τη συσκευή

Η εφαρμογή του τηλεφώνου (ή το cloud του προμηθευτή της συσκευής, μέσω του backend σας) γράφει κάθε μέτρηση:

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) αντί για ημερήσιους μέσους όρους.

Αντίδραση σε νέες μετρήσεις

Καταχωρήστε ένα webhook endpoint μία φορά (POST /v1/webhooks με events: ["resource.created"]). Η απόκριση περιέχει το signing secret. Στη συνέχεια, εκτελέστε μια μικρή υπηρεσία που επαληθεύει κάθε παράδοση και αξιολογεί τον κανόνα:

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 event ανά μέτρηση. Αυτά τα events, υπογεγραμμένα με τον δικό της κωδικό υπογραφής της πλατφόρμας, στάλθηκαν στην παραπάνω υπηρεσία μαζί με δύο διπλότυπα και ένα αίτημα υπογεγραμμένο με λάθος secret. Το αποτέλεσμα: η λάθος υπογραφή έλαβε 400, τα διπλότυπα αγνοήθηκαν, και η υπηρεσία σήμανε ακριβώς μία ειδοποίηση — 152/95, 149/94, 144/92 — όχι μία ανά event.

Στην παραγωγή, κρατήστε το seen και το alerted σε μια βάση δεδομένων αντί για τη μνήμη, ώστε μια επανεκκίνηση να μην επαναλαμβάνει ειδοποιήσεις.

Λήψη webhooks κατά την ανάπτυξη. Το Anpheros δέχεται και παραδίδει μόνο σε δημόσια HTTPS endpoints: μια localhost ή ιδιωτική διεύθυνση απορρίπτεται όταν την καταχωρείτε (400, πεδίο url), ακόμη και στο sandbox, και κάθε παράδοση ελέγχει ξανά τη διεύθυνση. Για να λαμβάνετε events στο laptop σας, εκθέστε την υπηρεσία μέσω ενός δημόσιου HTTPS tunnel και καταχωρήστε τη διεύθυνση του tunnel. Δείτε Webhooks.

Τι πρέπει να εμφανίζει η εγγραφή στη συνέχεια

Η ειδοποίηση από μόνη της βρίσκεται στην υπηρεσία παρακολούθησης, αλλά η εγγραφή πρέπει να δείχνει τι προέκυψε από αυτήν, ώστε ο επόμενος κλινικός ιατρός και ο ασθενής να βλέπουν ολόκληρη την ιστορία:

Το Anpheros αποθηκεύει αυτούς τους πόρους· δεν διαθέτει δικό του πόρο ειδοποίησης ή εργασίας (οι Flag, Task και Communication δεν περιλαμβάνονται στους τύπους πόρων του), επομένως οι ουρές ειδοποιήσεων και η δρομολόγηση σε εφημερεύοντες ανήκουν στην υπηρεσία σας.

Χρεώσεις, κανονισμοί και ασφάλεια

Τα προγράμματα RPM συχνά εξαρτώνται από κανόνες αποζημίωσης — στις Ηνωμένες Πολιτείες, το Medicare πληρώνει για την απομακρυσμένη φυσιολογική παρακολούθηση υπό συγκεκριμένους κωδικούς CPT με ελάχιστο αριθμό ημερών με δεδομένα και χρόνο που δαπανά η ομάδα φροντίδας. Αυτοί οι κανόνες αλλάζουν και δεν είναι κάτι που μπορεί να πιστοποιήσει μια πλατφόρμα δεδομένων· ελέγξτε τους τρέχοντες κανόνες CMS και διατηρήστε τα αποδεικτικά στοιχεία (τις μετρήσεις και τον χρόνο της ομάδας) στο δικό σας σύστημα. Το λογισμικό που ερμηνεύει τις μετρήσεις για να οδηγήσει σε διάγνωση ή θεραπεία μπορεί να ρυθμίζεται ως ιατρική συσκευή. Διατηρήστε τα όρια στα χέρια των κλινικών και καταγράψτε κάθε ειδοποίηση και απόκριση.

Πού εντάσσεται το Anpheros

Το Anpheros παρέχει το αρχείο (FHIR R4 Observations με προέλευση, CarePlan, Encounter), υπογεγραμμένα webhooks με επαναδοκιμές, συναίνεση εάν η εφαρμογή ενός άλλου οργανισμού χρειάζεται να διαβάσει τις μετρήσεις, και ένα αρχείο καταγραφής πρόσβασης που μπορεί να δει ο ασθενής. Δεν συνδέεται με προμηθευτές συσκευών, δεν αποφασίζει τι είναι ανώμαλο, δεν στέλνει ειδοποιήσεις ούτε διαχειρίζεται τη χρέωση.

Συχνές ερωτήσεις

Ποιος πόρος FHIR αποθηκεύει μια μέτρηση αρτηριακής πίεσης στο σπίτι;

Μια παρατήρηση (Observation) με LOINC 85354-9 (panel αρτηριακής πίεσης) και δύο στοιχεία, 8480-6 (συστολική) και 8462-4 (διαστολική), καθένα valueQuantity σε mm[Hg], με τον χρόνο μέτρησης και τη συσκευή ως συγγραφέα.

Τα δεδομένα RPM πρέπει να είναι ημερήσιοι μέσοι όροι ή μεμονωμένες μετρήσεις;

Μεμονωμένες μετρήσεις για κλινικές μετρήσεις όπως αρτηριακή πίεση, βάρος ή γλυκόζη, επειδή οι κλινικοί γιατροί τις αναθεωρούν και τις μετρούν. Οι ημερήσιες περιλήψεις ταιριάζουν σε δεδομένα φορητών συσκευών υψηλής συχνότητας, όπως ο καρδιακός ρυθμός ή τα βήματα.

Πώς μπορώ να ενεργοποιήσω μια ειδοποίηση όταν φτάνει μια νέα μέτρηση;

Εγγραφείτε σε webhooks resource.created, επαληθεύστε την υπογραφή, ανακτήστε τη νέα παρατήρηση (Observation) και αξιολογήστε τον κανόνα σας πάνω στην πρόσφατη σειρά. Οι παραδόσεις μπορεί να επαναληφθούν, οπότε κάντε deduplication με βάση το αναγνωριστικό συμβάντος (event id) και κάντε την ειδοποίηση ιδεοδύναμη (idempotent).

Μπορεί το Anpheros να στείλει ειδοποιήσεις σε κλινικούς γιατρούς;

Όχι. Ειδοποιεί την υπηρεσία σας μέσω webhooks. ποιος ειδοποιείται, πώς και πότε αποφασίζεται στο σύστημά σας.

Σχετικά

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