1 Johdanto

Perfuse siirtää kliinisiä viestejä järjestelmien välillä, jotka eivät ole suunniteltu puhumaan toistensa kanssa. Laboratorio lähettää tuloksia HL7 v2: n avulla; potilastietojärjestelmä odottaa niitä eri kenttäkohtaisilla tiedoilla, eri potilastunnisteella ja vahvistuksella viiden sekunnin kuluessa. Jotain on istuttava väliin, ja se jotain on integraatio moottori.

Tämä käsikirja kuvaa, mitä Perfuse tekee, kaikki sen ominaisuudet ja - mikäli päätös ei ole ilmeinen - miksi se toimii tietyllä tavalla.

1.1 Miksi Perfuse on olemassa

Yksittäinen rajapinta kahden kliinisen järjestelmän välillä on yleensä hinnoiteltu kymmenissä tuhansissa, ja 15-20 prosenttia siitä vuosittain ylläpitoon. Suurin osa tästä kustannuksesta ei ole työ; se on, että työ vaatii jonkun, joka on aiemmin työskennellyt HL7: n parissa, ja useimmat sairaalat eivät palkkaa sellaista henkilöä.

Perfuse on rakennettu oletuksella, että sen konfiguroiva henkilö on ongelma, jota hänen on ratkaistava, eikä hänellä ole aiempaa kokemusta HL7: stä. Tämä oletus näkyy tietyissä kohdissa:

Luku testaus ja luku siirtymä Mirthistä ovat olemassa, koska vastaus kysymykseen "miksi minun pitäisi luottaa tähän" on näyttö, jonka keräät itse, ei vaatimus, joka tehdään täällä.

1.2 Mitä siinä on

Kaikki alla oleva on yhdessä binääritiedostossa. Kunkin rivin nimi on luku, joka kattaa sen.

1.3 Standardit ja versiot

Mikä Perfusen toteuttama standardin julkaisu on ja miten se on tarkistettu. "Tarkistettu" nimeää ulkoisen työkalun tai viiten, joka arvioi tuloksen; jos mitään ulkopuolista ei ole arvioinut sitä, se sanoo niin. Tulokset ovat testidatalta, ei tuotantopaikalta.

1.3.1 Viestintä ja asiakirjat

StandardiJulkaisuTarkistettu
HL7 v2mikä tahansa versio: viestit luetaan omilla erottimillaan, ei versioskeemalla; vahvistukset oletusarvoisesti 2.5.1NIST HL7 v2 -validoija; Mirthin ja OIE:n liikenne
HL7 v2 FHIR:lleHL7:n V2-FHIR -kartoitus (ADT, ORU, SIU, MDM, VXU ja niiden segmentit)HL7 FHIR -validoija US Core, UK Core, FR Core, ISiK, nl-core ja HL7 Europe -vastaisesti
FHIRR4 (4.0.1), R4B ja R5 luettu ja kirjoitettuHL7 FHIR -validoija; Inferno
C-CDA ja CDAC-CDA 2.1ONC SITE (C-CDA -näytteet lähetetty ja vastaanotettu XDR:n kautta); ei CDA -skeemalla
HL7 v3PIX ja PDQ (IHE ITI-44, 45, 47)IHE:n NE2008 -skeemat ja esimerkkiviestit
DICOM ja DICOMwebDIMSE C-STORE, C-FIND, C-MOVE, C-GET, C-ECHO; QIDO-RS, WADO-RS, WADO-URI, STOW-RSOrthanc
X12 (HIPAA)005010: 837, 835, 270/271 (X279A1), 276/277 (X212), 834, 278 pyyntö (X217) ja tiedustelu (X215); 275 006020 (X314)maksajien julkaisemat käsikirjat; CMS esMD -näytteet
CAQH CORE -yhteysvC2.2.0 SOAP ja MIME, vC4.0.0 MTOM:llasijais-UM -järjestelmä kirjoitettu CAQH:n säännöistä
NCPDPTelecommunication D.0; SCRIPT 2023011 (ja 2017071) ePA:lla; Real-Time Prescription Benefit v13kirjoitettu julkisista Surescripts -käsikirjoista ja esimerkeistä; ei NCPDP:n lisensoituja skeemoja vastaan
UN/EDIFACTsyntaksi 3 ja 4, CONTRLpydifact 0.1.8
IHE -dokumenttien jakeluXDS.b, XCA, XDR, MHD 4.2.2, PIXm, PDQm, XDMNIST XDS Toolkit; ONC SITE
Suojattu viestintäSoveltamisen ilmoitus 1.2, XDR ja XDM suoraan, DNS ja LDAP -varmenne -hakemistoONC SITE; ONC:n Varmenne -hakemistotyökalu (18/18)
AS2RFC 4130, pakkaus RFC 5402pyas2lib
Allekirjoitetut liitteetHL7 DSDR, XAdES-X-Lxmlsec1, OpenSSL

1.3.2 FHIR -toteutusoppaat

OpasVersioTarkistettu
US Coremuunnokset 9.0.0:han (USCDI v6); FHIR-palvelin 6.1.0:ta ja 7.0.0:ta vastaanHL7-vahvistaja; Inferno US Core
SMART App Launch2.2Inferno: 80/80 (julkisen sovelluksen)
Bulk Data Access2.0.0Inferno: 48/48
Subscriptions R5 BackportR4:lleoikea HTTP-vastaanottaja; PAS-kokouksen ilmoitustestit
Da Vinci CRD2.2.1 ja 2.1.0Inferno 2.2.1: 92 läpäisee, ei epäonnistu; 2.1.0 opaan oman esimerkin mukaan
Da Vinci DTR2.2.0 ja 2.1.0Inferno 2.2.0: 43 läpäisee, 2 epäonnistuu (kitin virhe); 2.1.0 opaan oman esimerkin mukaan
Da Vinci PAS2.2.1 ja 2.1.0Inferno 2.2.1: 82/84; 2.1.0 opaan oman esimerkin mukaan
Da Vinci PAS, lähettäminen (tarjoajan puolesta)2.2.1HL7 Da Vinci PAS -vakuutusyhtiön viiteimplementaatio; ei tuotantovakuutusyhtiö
Da Vinci PDex2.2.0Inferno PDex 2.0: vakuutusyhtiöstä toiseen 19/19
Da Vinci HRex $member-match1.2.0Inferno PDex vakuutusyhtiöstä toiseen
Da Vinci ATR2.1.0ei tarkistettu ulkoisella työkalulla
Da Vinci CDex $submit-attachment2.1ei tarkistettu ulkoisella työkalulla
Da Vinci Plan-Net1.1.0Inferno: 199 läpäisee, 10 epäonnistuu (kitin virhe)
Da Vinci US Drug Formulary2.1.0HL7-vahvistaja
ISiK (saksalaiset sairaalat), FHIR-palvelinStufe 5, Basis-moduuligematikin ISiK-testisarja 3.0.9: 421/421
PACIO Transitions of Care, Medication Profile, Advance Directives, Functioning1.0.0, 1.0.0, 2.0.0-ballot, 2.0.0PACIO:n Inferno-kokoukset PACIO:n omilla tiedoilla: jokainen epäonnistuminen sen tiedoissa tai kokouksessa. C-CDA TOC-dokumenttiin: HL7-vahvistaja HL7:n esimerkeillä, yksi virhe jäljellä, opaan omat
CARIN Blue Button2.2.0HL7-vahvistaja
eCR2.1.2HL7-vahvistaja
ELRHL7 2.5.1 ELR Release 1 sen korjausten kanssaONC:n ELR-työkalu: 28/28
International Patient Summary2.0.0HL7-vahvistaja
DEQM5.0.0HL7-vahvistaja
SQL on FHIRv2virallinen testisarja: 144/144
SMART Health Cards and LinksCards 1.4, Links STU 1määritysten omat esimerkkitiedot; julkaistu SMART Health Links -kirjasto
UDAP SecuritySTU 1oikea valtuutuspalvelin ja luottamuksellinen yhteisö
TEFCA Facilitated FHIRSOP v2.0ei tarkistettu oikean QHIN:n kanssa

1.3.3 Kansalliset ja eurooppalaiset profiilit

Tarkistettu muuttamalla julkaistuja tai keksittyjä HL7 v2 -viestejä ja vahvistamalla jokainen resurssi; koko tulokset ja epäonnistumisen syyt ovat conformance/national -kansiossa.

ProfiiliJulkaisuVoimassa olevat resurssit
UK CoreSTU2 2.0.2185/187
FR Core2.2.0138/156
ISiK Basismodul4.0.3 (Stufe 4)18/47; 42/47 sairaalan omalla bundle-kriptillä
Nictiz nl-core0.12.1-beta.1 (zib 2020)12/24; 18/24 sairaalan omalla bundle-kriptillä
HL7 Europe Laboratory Report2.1.0106/426 (opas odottaa asiakirjaa, v2-tulos ei ole)
HL7 Europe Hospital Discharge Report1.0.068/69

Mitään tätä ei ole sertifioitu. Perfuse ei ole saanut sertifikaatteja ONC:ltä, CMS:ltä, gematikilta, Nictizilta, NHS Englandilta tai keltäkään muulta.

1.4 Mitä se korvaa

Perfuse kattaa Mirth Connectin alueen, ja se voi tuoda Mirth-kanavaviennit suoraan. Luku siirtymä Mirthistä kuvaa, mitä käännetään puhdasesti, mitä tarvitsee päätöksen ja miten todistaa tulos ennen siirtymistä.

Ero, joka on merkittävä päivittäisessä käytössä, on virheenjäljitys ja hiljaisuus. Mirthissa nähdä, mitä transformer teki viestiin, yleensä tarkoittaa kanavan uudelleenjulkaisemista lokien kanssa. Perfusessa jokainen tallennettu viesti voidaan toistaa nykyisen konfiguraation kautta ja tarkastella vaihe vaiheelta ilman koskettavaa suoritetta olevaa kanavaa. Ja siinä, missä Mirth-hälytys "ei liikennettä" on kiinteä kynnysarvo, joka on hyödytön missä tahansa syötteen, joka on hiljainen yöaikaan, Perfuse oppii, miltä kunkin syötteen normaali viikko näyttää, ja hälyttää sitä vastaan.

1.5 Miten tämän käsikirjan lukeminen

Ensimmäiset luvut ovat käsitteellisiä ja niiden on arvoista lukea järjestyksessä: kanavat, viestivirtaus, sitten muunnos. Kaikki muu voidaan lukea tarpeen mukaan.

Viittausluku lopussa listaa jokaisen konfiguraatioavaimen, sen tyypin, onko se pakollinen ja sen oletusarvon. Nämä luvut generoidaan lähdekoodista, joten ne eivät voi kuvailla valintaa, jota ei ole olemassa, tai jättää pois yhtään, joka on olemassa. Jos avain näkyy konfiguraatiotiedostossa, mutta ei hakemistossa, se ei ole Perfuse-avain.

1.6 Konventiot

Konfiguraatio on YAML. Useimmat avaimet ovat snake_case -muodossa viestintäyhteydessä — max_message_size, idle_timeout — ja tämä käsikirja antaa aina viestintäyhteyden muodon, koska se on se, mitä kirjoitat. On yksi vanha poikkeus, dataType kanavalla, joka on camelCase; se on dokumentoitu sillä tavalla kanavaviitteessä ja hyväksytään vain sillä oikeinkirjoituksella.

Kenttäviittaukset HL7:ssä käyttävät tavallista merkintätapaa: PID-5 on PID-segmentin viides kenttä, PID-5.1 sen ensimmäinen komponentti ja PID-3(2) kolmannen kentän toinen toisto. Polku, joka on kirjoitettu ilman toistoa, osoittaa jokaisen toiston (ks. polut)

Kestot kirjoitetaan numerona ja yksikkönä — 30s, 5m, 2h. Paljas numero ei ole kesto, ja se hylätään sen sijaan, että se arvataan.

2 Käynnistäminen

Perfuse on yksittäinen binääri, jossa on sisäänrakennettu web-liittymä. Siinä ei ole sovelluspalvelinta, joka pitäisi asentaa, tietokantaa, joka pitäisi määritellä, eikä erillistä hallintaliittymää.

2.1 Suorittaminen

perfuse serve -channels ./channels -db ./perfuse.db -addr 0.0.0.0:8443 \
  -tls-cert ./cert.pem -tls-key ./key.pem

-channels on hakemisto YAML-tiedostoja, yksi tiedosto kunkin kanavan mukaisesti. -db on SQLite-tiedosto, joka sisältää tallennetut viestit, käyttäjät ja auditointihistorian; se luodaan, jos sitä ei ole olemassa.

Kun käynnistetään ensimmäisen kerran ilman määritellyjä käyttäjiä, luodaan ylläpitäjätili, ja sen salasana kirjoitetaan lokitietoihin kerran. Salasanaa ei voi palauttaa myöhemmin.

Suorittaminen ilman -tls-cert ja -tls-key palvelee selkeää HTTP:ä. Se on hyväksyttyvää silmukkaosoitteessa ensimmäiselle katsaukselle, mutta se ei ole hyväksyttyvää missään muualla: web-käyttöliittymä sisältää tunnistetiedot ja viestisisällön, jotka molemmat ovat luettavissa langattomasti ilman TLS:ää. Katso turvallisuus.

2.2 Ensimmäinen kanava

Kanavalle tarvitaan nimi, lähde ja vähintään yksi kohde. Pienin hyödyllinen kanava vastaanottaa HL7-viestin MLLP:llä ja kirjoittaa jokaisen viestin tiedostoon:

name: first-feed
dataType: hl7
source:
  type: mllp
  listen: "0.0.0.0:6661"
destinations:
  - name: to-disk
    type: file
    file:
      root: /var/spool/perfuse
      dir: incoming

Tallenna se nimellä channels/first-feed.yaml ja se otetaan käyttöön ilman uudelleenkäynnistystä.

Kolme asiaa siinä tiedostossa on huomionarvoista, koska ne ovat jokaisen kanavan muotoa:

2.3 Kanavan rakentaminen liittymästä

Kaikki edellä mainittu voidaan tehdä web-liittymästä, ja ensimmäisen kanavan osalta se on parempi reitti, koska lomake ei salli virheellisen tiedoston luomista.

Rakentaja tarjoaa kolme tapaa aloittaa:

  1. Joltain, joka on lähettänyt viestin. Liitä näyte, jonka laboratorio tai myyjä on lähettänyt. Perfuse lukee sen ja ehdottaa kanavaa, sekä kolmea erillistä luetteloa: mitä näyte osoittaa, mitä on arvioitu ja mitä mikään näyte ei voi kertoa. Tämä on kuvattu testauksessa.
  2. Joltain, joka jo toimii. Täydellinen kanavojoukko, jolle tarvitaan vain osoitteen täyttäminen.
  3. Tyhjästä. Tyhjä lomake. Se on käytettävissä, mutta se on hitain kolmesta ja helpoin väärä.

2.4 Varmistaminen, että se toimii ennen kuin mitään yhdistetään

Kaksi asiaa voidaan tehdä ennen kuin lähettävä järjestelmä on olemassa.

Lähetä viesti käsin liittymästä — viestilähettäjä hyväksyy liitettyä tekstiä ja raportoi, mitä tapahtui sille, mukaan lukien, mitkä kohteet hyväksyivät sen, ja mitä kunkin muunnos teki.

Tai generoi testiliikennettä. Jos kanava on käsitellyt yhtään viestiä, Perfuse voi oppia niiden muodon ja tuottaa enemmän viestejä samanlaisilla osuuksilla, ilman alkuperäistä sisältöä. Katso testaus.

2.5 Mitä tehdä seuraavaksi

3 Web-käyttöliittymä

Perfuse on rakennettu oletuksella, että kaikki on tehtävissä selaimesta, ja ominaisuus, jota voidaan käyttää vain muokkaamalla tiedostoa, kohdellaan virheenä. Tässä luvussa esitellään, mitä kunkin navigoinnin osan taustalla on, järjestettynä käyttöliittymän mukaisesti: kysymyksen mukaan.

Ylätunniste sisältää Pääsivun ja Kanavat suoraan, koska ne ovat siellä, missä useimmat istunnot alkavat ja loppuvat. Kaikki muu on ryhmitelty, ja ryhmät on nimetty kysymysten mukaan eikä alajärjestelmien mukaan — et mene "lokiin", vaan etsit, kuka muutti jotain.

3.1 Ylätunnisteen lukeminen

Viisi asiaa otsikossa on helppo missata.

Jokaisella näkymällä on osoite. Osoiterivi seuraa näkymää — #/channels, #/messages, #/settings — joten lataus palauttaa sen, kirjanmerkki avaa sen, linkki lähetetty kollegalle avaa sen ja edellinen-painike siirtää näkymien välillä sen sijaan, että poistuisi konsolista. Osoite, joka nimeää näkymän ylemmän roolin, avaa kojussa dashboardin sen sijaan.

Haku, tai ⌘K. Se hakee kanavien, asetusten, viestien ja käyttöohjeen yli, mikä tarkoittaa, että se on yleensä nopeampi kuin navigointi — erityisesti asetukselle, jonka nimeä et muista.

Teema. Kolme niitä: Midnight, Dark ja Light. Midnight on lähes musta ja se on se, mitä palvelimen huoneen seinällä oleva näyttö yleensä haluaa; Dark on pehmeämpi neutraali harmaa; Light on kannettavalle tietokoneelle ikkunan vieressä. Valinta tallennetaan selaimessa eikä tilille, koska teema on istumapaikan ominaisuus, eikä henkilön ominaisuus — sama operaattori haluaa Midnightin seinällä ja Lightin junassa. Koneen oma mieltymys kysytään kerran, jotta voidaan valita järkevä oletus ensimmäisen kerran.

Kieli. Konsoli on saatavilla englanniksi (Iso-Britannian tai Yhdysvaltain päivämääräjärjestys), saksaksi, ranskaksi, hollanniksi, espanjaksi, italiaksi, portugaliaksi, puolaksi, ruotsiksi, tanskaksi, norjaksi tai suomeksi, ja päivämäärät ja numerot kirjoitetaan kyseisen kielen mukaisesti. Valinta tallennetaan selaimen muistiin, ja selaimen oma kieli käytetään, kunnes toisin valitaan. Käännökset on tehty koneella, eivätkä ne ole vielä native puhujien tarkastamia; englanti on viitekieli, ja kielen valitsin ilmoittaa tästä. Koodi, viestit, payloadit, kanavnimet ja mitä tahansa kirjoitettua tekstiä ei koskaan käännetä. Käsikirja on julkaistu samoisilla kielillä osoitteessa https://perfuse.health/manual/<language>/ (tämän palvelimen oma Käsikirja on englanninkielinen).

Käyttöohje. Asiakirja, jota luet, palvelimelta. Se on sama tiedosto, jonka binääri voi kirjoittaa levylle, joten se kuvailee aina version, joka on edessäsi, eikä viimeisintä julkaisua.

3.2 Valvonta — toimii, ja mitä tapahtui

3.2.1 Pääsivu

Jokaisen kanavan tila, läpipääsy ja kaikki, mikä on parhaillaan vikana. Tämä on ruutu, joka pitäisi jättää auki.

3.2.2 Viestit

Jokainen viesti, joka saapui, mitä se muutettiin, kohdekohtaisesti, ja mitä tapahtui sille. Haettavissa, myös suodatinlausekkeen avulla, joten "näytä minulle ne, jotka tulivat tästä lähettäjästä ja jotka hylättiin" on kysely eikä iltapäivä.

Viesti voidaan toistaa täältä, ja käsitellä uudelleen *nykyisen* konfiguraation kautta eikä siitä, joka oli voimassa silloin, kun se menee rikki — joka on tapa vahvistaa, että korjaus toimii liikenteen kanssa, joka murskasi sen. Katso viestivarasto siitä, mitä säilytetään ja kuinka kauan.

3.2.3 Jono

Mitä odottaa toimitusta, ja miksi. Jonotus, joka ei tyhjene, on yksi eniten hyödyllinen varhainen varoitus, jonka integraatiomoottori tuottaa, ja se on arvoista paria hälytysääntöön, jotta kukaan ei tarvitse olla katsomassa. Katso toimitus.

3.2.4 Hälytykset

Mitä on tapahtunut ja mitkä ovat säännöt. Säännöt muokataan täällä eikä tiedostossa. Katso hälyttäminen.

3.2.5 Mittaukset

Läpipääsy, viive ja virheiden määrä ajan myötä. Hyödyllistä kapasiteetin kysymyksiin ja useammin hallitusten pakkauksiin — josta syystä sivuston oma logo näkyy siinä, jos se on ladattu.

3.2.6 SQL FHIR:llä

SQL FHIR-näkymillä: valitse esimerkki tai tallennettu näkymä, tai kirjoita se, suorita se tämän palvelimen FHIR-varastossa (kaikki potilaat tai yksi) tai resursseilla, jotka on liimattu, näe rivit niiden tyypeillä ja lataa CSV, NDJSON tai Parquet. Tallenna säilyttää sen FHIR- päätepisteen $sql-run. Katso viestin muodot.

3.2.7 Laadun mittarit

Digitaaliset laatuindikaattorit: valitse esimerkki tai Mittaus FHIR-kaupasta, tai kirjoita yksi FHIRPath-kriteerien kanssa. Valitse mittausaika ja raportti (yhteenveto, yhteenveto potilasluetteloineen tai yksi potilas) ja arvioi se FHIR-kaupan tai liimatuissa resursseissa. Näytössä näkyy kunkin väestön määrä ja potilaat, pisteet ja strata. Lataa MittausRaportti tallentaa FHIR-tuloksen, ja Tallenna FHIR-kauppaan pitää Mittauksen Measure/$evaluate-measure. Mittaukset CQL: ssä ovat kiellettyjä: Perfusella ei ole CQL-moottoria. Katso digitaaliset laatuindikaattorit.

3.2.8 Virtauskartta

Kuva siitä, miten viestit todella liikkuvat: mitkä lähteet syöttävät mitä kanavia, ja mitä kohteita ne saavuttavat.

Sen arvo ei ole koristelu. Jokainen kiinteistö kertyy kanava, jota kukaan ei muista komissionneensa, ja kohde, jota kukaan ei tajunnut olevan edelleen vastaanottamassa, ja molemmat ovat näkyvissä täällä tavalla, jota ei ole kanavatiedostojen luettelossa.

3.2.9 Tiimien kojut

Koju kullekin viestintätyypille: Toiminta, Yhteydet, Rajapintanalysti, Ennakkovaraukset, Kuvantaminen, Tuloverkko, Laboratorio, Tietosuojelu ja turvallisuus, ja yksinkertainen osastoyhteenveto. Laatat näyttävät määriä, tiloja ja aikoja, ei koskaan viestiä tai potilasta, joten koju voidaan siirtää johtajalle tai seinänäyttöön ilman potilastietojen laajentamista.

Jokainen henkilö avaa kojun, joka on hänen hakemistoryhmälleen tai roolilleen annettu. -dashboards dashboards.yaml kartoittaa ne:

groups: {PACS-Admins: imaging, Network-Team: connections}
roles: {viewer: manager}

Ryhmä voittaa roolin, ja kuka tahansa, joka ei ole ryhmässä, avaa Toiminnan. Järjestä laattoja piilottaa ja uudelleenjärjestää laattoja, kanava-valitsin suodattaa niitä, ja Tallenna omaksi näkymäksi säilyttää sen omaksi kojuksi, kunnes Palauta.

Vie Grafaaniin lataa kojun Grafaani-JSON-muodossa /metrics-kautta, data-lähteen muuttujalla ja kanava-suodattimella, kaikille, jotka tarvitsevat enemmän kuin kevyen konfiguraation. Laatat, joilla ei ole mittaus-taustaa, jätetään pois, ja viennin kuvaus nimeää ne.

Yhteydet-laatta tarkistaa jokaisen verkkoyhteyden kohdekerroksissa. Se etsii nimen, avaa TCP-yhteyden, suorittaa TLS: n, missä se on käytössä, ja lukee kohdekohtaisen viimeisen toimituksen ja epäonnistumisen oikeasta liikenteestä. Kunkin epäonnistumisen selitys esimerkiksi "hylätty: kohdeympäristön moottori on todennäköisesti pysähtynyt", "ajasta umpeutunut: palomuuri tai VPN-tunneli, joka on alas" tai "varmenne, jonka tämä palvelin ei luota". Mitään ei lähetetä kumppanille, yhdellä poikkeuksella: immunisaatiorekisteri, jolla ei ole ollut liikennettä seitsemään päivään, pyytää CDC: n connectivityTest, joka ei lähetä mitään. -vpn tunnels.yaml VPN-tunnelit-laatta sen vieressä lukee kunkin kumppani-tunnelin tilan AWS Site-to-Site VPN: stä, Azure VPN Gateway -yhteydestä tai strongSwanista tämän isäntäjärjestelmän yli, jotta aikakatkaisu voidaan erottaa tunnelista, joka on alas. Se vertailee myös molempien osapuolten IKE- ja IPsec-asetuksia, koska pilvi raportoi meidän ja tiedosto listaa heidän, ja sanoo, missä ne eivät voi olla samaa mieltä. Yhteysarkki lataa kumppanin asetukset vierekkäin Markdown-muodossa lähettämistä varten; se ei koskaan sisällä jaettua avainta. Luvut, joita koju tarvitsee, eivät ole tallennettu, ne luetellaan Mittaus ei tehty vielä -sijaan tyhjien laattojen piirrostavan sijaan.

Osastokojusta lasketaan omat luvut palvelimella, ja kunkin se kertoo, mikä ikkuna ja lähde se kattaa:

3.2.10 Jakaminen siitä, mitä syöte sisältää tosiasiallisesti

Profiili tästä syötteestä kertoo, mitä todella saapuu: mitkä laukaisutapahtumat, mitkä kentät on täytetty ja kuinka usein, miten arvojen muodot ovat, ja mitkä koodit lähettäjä todella käyttää. Viimeksi mainittu on yleensä yksi käytetyin asia siinä.

Profiilia voidaan ladata ja lähettää toiselle henkilölle. Sille tarvitaan nimi ja - pakollinen - järjestelmä, joka tuotti syötteen, koska kysymys, jonka vieras esittää jaetulle profiilille, on, kuvaako se heidän järjestelmäänsä, ja valinnainen kenttä tekisi "Tuntematon" yleisimmäksi vastaukseksi missä tahansa jaetussa kokoelmassa.

Se ei sisällä potilastietoja, ja se tarkistetaan oletuksen sijaan. Profiili on tilastollinen: laskureita, nopeuksia, pituuksia, muotoja. Arvoja säilytetään vain kentille, joita standardi määrittelee kooditauluiksi, koska kooditaulukon arvo ei ole tunniste. Tunnuksen arvoja ei koskaan luetella.

Kahden asian seurauksena on, että tämä on lupaus eikä toive. Palvelin rakentaa profiilin tallennetuista viesteistä, kun sitä viedään, sen sijaan, että se lähettäisi ruudulla näkyvän profiilin — joten se, mikä poistuu rakennuksesta, on koostettu profiililuokittelijalla, jolla on testi, joka osoittaa tämän ominaisuuden, eikä selaimella. Ja vienti kieltäytyy kokonaan, jos profiili koskaan listaa arvoja kentälle, joka ei ole kooditaulukko, nimeämällä kentän, mutta ei arvoja.

Ulkopuolelta saapuva profiili tarkistetaan samalla tavalla sisään tullessa, eri syystä: se on tuotettu jonkun toisen huolenpidon alaisena, ja potilaiden tunnisteenäyttäminen olisi tämän palvelimen paljastus. Sen tuominen muuttaa mitään — profiili kuvaa syötettä, ja sen kanssa tehtävän päätöksen on tehtävä erikseen.

3.3 Kehitä — muuta kanavan toimintaa ja kokeile sitä ennen kuin se on käytössä

3.3.1 Kanavat

Kanavan rakentaja. Lähteet, kohdat, suodattimet, muunnokset, skriptit ja testit, joissa generoitu YAML näkyy lomakkeen vieressä työskennellessä — joten tiedosto ei ole koskaan arvoitus, ja kuka tahansa, joka suosittelee tiedostoa, voi lukea sen mukana.

Katso kanavat osien selityksestä ja muunnos vaiheiden toiminnasta.

3.3.2 Skriptit

Työpöytä skriptejä varten, erillinen rakentajasta, koska skriptin kirjoittaminen ja skriptin liittäminen ovat eri toimintoja.

Kaikki seitsemän paikkaa tarjotaan — suodatin, muunnin, esikäsittelijä, jälkikäsittelijä, kirjoittaja, elinkaari ja lukija — ja oikean paikan valinta on tärkeää, koska paikka päättää, mitä skripti saa ja mitä siitä odotetaan. Skriptin tarkistaminen vääränä tyypinä ei ole kiertotie; se kääntää eri asian.

JavaScript, Lua ja WebAssembly ovat kaikki käytettävissä. Katso muunnos.

3.3.3 Sopimukset

Oletukset siitä, miltä syöte pitäisi näyttää, luodaan ja tarkistetaan täällä sekä perfuse contract-kohtaan. Katso komentorivi.

3.3.4 Taulukot

Hakutaulukot ja koodinjoukot: kartat, jotka muuttavat yhden järjestelmän koodit toisen järjestelmän koodeiksi. Ne voidaan muokata täällä, jotta koodin lisääminen ei vaadi käyttöönottoa.

3.3.5 AI-kartantaja

Ehdottaa kenttäkartoituksia luottamusluokituksella kullekin, ja pidättäytyy arvauksista. Nimestään huolimatta se ei käytä kielimallia eikä tee verkkokutsua: ehdotukset tulevat säännöistä, kenttänimistä ja näytteen sisällöstä, tässä palvelimessa. Se ehdottaa myös kanavaa yhdestä näytteestä, ja ilmoittaa nimenomaisesti, mitä näyte ei voi kertoa. Toinen osa tekee siitä luotettavan — ehdotus, joka näyttää täydelliseltä, kutsuisi sinua uskomaan asioita, joita viesti ei koskaan sanonut.

3.3.6 Leikkikenttä

Väliaikainen työtila viestejä ja muunnoksia varten. Liitä viesti, sovella vaiheita, näe tulos.

Mitään ei lähetetä minnekään kerran sivu on ladataan, mikä on syy, miksi se on olemassa tässä muodossa: se on turvallista liittää jotain todellista, ymmärrettäessä, että se pysyy selaimessa.

3.3.7 Varjo

Ohjaa liikenteen kandidaattikonfiguraation läpi rinnan olemassa olevan konfiguraation kanssa ja raportoi eroista, jotta muutos voidaan todistaa ennen kuin siihen voidaan luottaa. Sama idea kuin perfuse compare, mutta sovellettuna muutokseen sen sijaan, että migraatioon. Katso testaus.

3.4 Vaihto — standardit, joita tämä palvelin puhuu muiden organisaatioiden kanssa

3.4.1 FHIR-laboratorio

Muunna HL7 v2 FHIR:ksi, validoitu resurssi ja tarkastele tulosta. Näytteet kattavat sisäänpääsykertomukset, laboratoriotulokset, tapaamiset, kliiniset muistiinpanot, rokotukset ja ilmoitettavan käynnin. Validointi sisältää US Coren, joka on profiili, jota amerikkalainen sääntely kirjoitetaan, joten tämä vastaa kysymykseen "onko se, mitä he lähettivät meille, todella konformaalinen" ilman mitään omaksumista.

Julkinen terveydenhuollon ilmoitus luo eCR eICR: n ilmoituskohteen, jonka viesti lähettäisi. Se näyttää, mikä laukaisukoodi teki käynnin ilmoitettavaksi, mitä raportti joutui merkitsemään puuttuvaksi ja itse asiakirja. Viesti, jolla ei ole mitään ilmoitettavaa, saa sen sijaan syyn.

3.4.2 Tilaukset

FHIR-tilaukset ja ovatko heidän ilmoitukset saapuneet: tapahtumat, hyväksytyt, odottavat ja viimeisin syy, miksi yksi evättiin. Tilaukset luodaan FHIR-asiakasohjelmilla FHIR-rajapinnan kautta, eivät tästä sivusta, ja tunnistetiedot, jotka ne antoivat palvelimelle, eivät näytetä koskaan. Katso viestin muodot.

3.4.3 Asiakirjat

Kliiniset asiakirjat — CDA ja asiakirjan tulostettava muoto. Käytännöllinen, kun vaihdettava asia on potilaan kotiutusarviointi ei viesti.

3.4.4 Asiakirjojen jakaminen

IHE XDS.b-rekisteri ja varasto aloitettiin -xds:llä: kuinka monta asiakirjaa, potilaita ja lähetyssarjoja se sisältää ja kuinka monta niistä on korvattu; varaston, rekisterin, XCA-portin ja MHD:n osoitteet; potilaan asiakirjojen hakeminen tässä rekisterissä tai toisessa yhteisössä (ITI-18-rekisteri tai ITI-38-portti, jossa on tunniste sille); ja CDA-asiakirjan julkaiseminen käsin, laitoksen tyypin ja toimintaympäristön, joita asiakirja ei kerro. Katso viestiformaatit.

3.4.5 Suora

Suoran turvallisen viestinnän. Tämän palvelimen Direct-osoitteet luetellaan jokainen osoite, jonka kautta kanava lähettää tai vastaanottaa, sen sertifikaatti, kun se vanhenee, sen luotettavat ankkurit ja mitä vikaa (puuttuva tiedosto, vanhentunut sertifikaatti). Osoitekirja pitää kirjaa kirjeenvaihtajista ja heidän sertifikaateistaan, joihin heidän postinsa salataan: liitä yksi heidän HISP:stään tai Tallenna sertifikaatilla DNS:stä; sertifikaatti, joka ei ole osoitteelle tai sen verkkotunnukselle, hylätään. Etsi sertifikaatti DNS:stä kysyy ilman tallentamista. Katso viestiformaatit.

SMART Terveyden linkit ja -kortit, CMS:n *Kill the Clipboard* -ohjelman mukaisesti. Vastaanota SMART Terveyden linkki lukee linkin tai QR-koodin, jonka potilas näyttää sisäänkirjautumisessa, tarkistaa terveydenkortit sisällä ja lähetä se eteenpäin kanavaan. Jaa käyntitietue luo linkin, jonka tämä palvelin isännöi, valinnaisesti salasanalla ja QR-koodilla potilaalle; Käytä potilaan yhteenvetoa täyttää sen potilaan Kansainvälisen PotilasYhteenvedon tämän palvelimen FHIR-kaupasta. Linkit, joita tämä palvelin isännöi luetellaan niiden kanssa, kuinka usein kunkin haettiin, milloin ne vanhenevat ja salasana-yrittämisen jäljellä olevat mahdollisuudet, ja miten yksittäinen linkki perutaan. Tarkista SMART Terveyden kortin allekirjoitus ja myöntäjä omalla. Katso CMS-0057 palvelimen asetuksista, joita se tarvitsee.

3.4.7 Kuvantaminen

Tämä arkisto, jota tämä palvelin pitää, kun se suoritetaan -dicomweb-archive-valinnalla: tutkimusten, sarjojen, instanssien ja käytetyn tilan määrät, DICOMweb-osoite ja tietolähteen lohko OHIF-näkymälle, sekä tutkimuksen haku potilaan nimen, tunnisteen, sairaalahuoneen numeron ja päivämäärän perusteella tehty samalla QIDO-RS-pyynnöllä, jonka näkymä tekee. Tutkimus avautuu sarjoihinsa ja instansseihinsa, ja instanssi ladataan DICOM-tiedostona. Mitään ei renderöidä: Perfuse siirtää kuvat ja näkymä näyttää ne. Ilman arkistoa näytön sanoo, miten sen voi ottaa käyttöön. Katso DICOMweb.

3.4.8 TEFCA

Audit-reitti Terveystalon kautta tapahtuvasta vaihdosta ja säännöt, jotka ohjaavat sitä.

Kaksi kuljetusta, jotka ovat eri vaiheissa, ja näyttö kertoo, kumpi on kumpi. Yksi lippu, joka kattaa molemmat, olisi väärä kummassakin suunnassa, johon se pyöristettäisiin.

Välitetty FHIR on toteutettu, ja se ei ole koskaan puhunut oikean QHIN:n kanssa. Se noudattaa Sequoia Project Standard Operating Procedurea, joka tuli voimaan 8. maaliskuuta 2026: etsi kumppanin UDAP-metadata, tarkista se, rekisteröi dynaamisesti, hanki pääsytoken, joka sisältää käytön tarkoituksen, ja kysely. UDAP on julkisen avaimen infrastruktuuri OAuth 2.0:lle — luottamuksellinen yhteisö myöntää X.509-sertifikaatteja jäsenilleen, ja jäsen todentaa allekirjoittamalla JWT:t yksityisellä avaimella ja liittämällä sertifikaattiketjun.

Turvallisuuskerros on varmistettu jonkun toisen toteutuksen kanssa, mikä on ainoa täällä arvokas varmistus. Tämän rakennuksen allekirjoittama rekisteröinti lähetettiin live-kolmannen osapuolen viitepalvelimelle ja hylättiin unapproved_software_statement — Untrusted: Certificate is not a member of community -virheilmoituksella. Tuottamaan vastausta palvelin purki pyynnön, parsisi ohjelmistolauselman JWT:na, tarkisti sen allekirjoituksen, käveli varmenneketjua ja teki päätöksen jäsenyydestä. Se on eroa siinä, että joko torjutaan ovella tai palautetaan lukukelvoton kirje.

Mitä jäljellä ei voida tehdä täältä. Sertifikaatti, joka osoittaa yhteisön jäsenyyden, tulee QHIN:n rekisteröinnistä eikä se ole mitään, minkä ohjelmisto tuottaa. Kunnes sellainen on olemassa, mikään vaihto oikean kumppanin kanssa ei valmistu.

Kuinka kanava kysyy. Määränpäätyyppi tefca kysyy jokaisen viestin potilaasta Facilitated FHIR -kumppaniryhmältä Asetukset, TEFCA (tefca.partnerFHIRBase): tunnisteella, jos viesti sisältää sellaisen (PID-3 tai FHIR-potilaan tunniste), muutoin sukunimellä ja syntymäpäivämäärällä, ja ei koskaan pelkästään nimellä, koska väärä vastine nimestä palauttaa jonkun toisen henkilön tiedot ilman virhettä. Määränpää asettaa käytön tarkoituksen (hoito, maksu, toiminta, kansanterveys, yksilön pääsy); tarkoitus, jota osallistuja ei ilmoita, evätään ennen kuin mitään lähetetään. Tarkoitukset lähetetään TEFCA-vaihtopurkauksena (T-TRTMNT, T-PYMNT, T-HCO, T-PH, T-IAS, järjestelmä urn:oid:2.16.840.1.113883.3.7204.1.5.2.1), tai tefca.purposeCodes: hl7 -muodossa HL7-käytön tarkoituksena koodina yhteisöille, jotka käyttävät niitä. Löydetty paketti on määränpään vastaus ja voidaan antaa toiselle kanavalle results_to -avaimen kanssa. Jokainen kysely, mukaan lukien evätetyt, on näkyvissä tämän näytön jäljityksessä, joka nimeää kumppanin.

Koko polku, löytämisestä tokeniin, jota kumppanin FHIR-palvelin hyväksyy, testataan udap-dotnet -viitepalvelimia vastaan (ks. vahvistus).

Vanha QHIN-to-QHIN-vaihto, joka perustuu IHE-profiileihin, ei ole toteutettu. Yritys evätään virheilmoituksella, joka sanoo niin, ja evääminen kirjataan epäonnistumisena. Se on tarkoituksellista eikä odottavaa siivooja: pystytetty vaihto, joka ilmoittaa onnistumisesta, lisäisi kirjauksia audit-reitille vaihdoista, jotka eivät koskaan tapahtuneet, ja reitti, joka ei ole sama kuin mitä tapahtui, on pahempi kuin ei mitään, koska reitti on se, mihin uskotaan.

Yleensä, päätepisteet, joita käytetään vaihtoon, tulevat allekirjoitetusta osasta kumppanin metadatasta, ei asiakirjan rungosta. Allekirjoituksen vahvistaminen ja sitten päätepisteiden lukeminen allekirjoittamattomasta kopiosta olisi monimutkainen tapa luottaa verkkoon: hyökkääjä, joka pystyy muokkaamaan vastauksen, jättää allekirjoitetun osan koskemattomaksi, osoittaa tokenin päätepisteen omalle palvelimelleen ja kerää asiakasväitteitä jokaiselta, joka tarkisti allekirjoituksen ja sitten ohitti sen, mitä se kattoi.

Luottamuksellinen pakkauksen sidonta on vaadittu, ja sen puute estetään käynnistyksessä. Tarkistamalla kumppanin allekirjoitetun metatietojen sertifikaatin, joka saapui sen sisällä, osoitetaan vain, että yksi osapuoli teki molemmat - virhe, jonka tämä koodipohja on aiemmin tehnyt SAML:ssä, jossa vahvistaja suosi sisäänrakennettua sertifikaattia ja todisti hyökkääjän järjestelmänvalvojana, vaikka kaikki testit menivät läpi. Sisällytä välisertifikaatit pakkaukseen: UDAP-palvelimen tarvitsee lähettää vain lehtisertifikaattinsa, ja julkinen viitepalvelin tekee juuri niin.

3.5 Maksajat - korvaukset, etukäteisvaltuutukset, lääkkeet ja CMS-maksajan säännöt

3.5.1 Korvaukset ja todennus

Rakenna X12 275 korvausliite 006020 muodossa, jota CMS-0053-F käyttää, liittämällä C-CDA tai lataamalla PDF, TIFF tai JPEG, ja näe se luettavaksi. Lue 275 ja lataa asiakirja sisällä. Muunna X12 278 päätös Da Vinci PAS ClaimResponse muotoon. Mitään tällä sivulla ei tallenneta tai lähetetä. Katso viestin muodot siitä, mitä 275 koostuu ja mitä se ei tee.

3.5.2 Lääkkeet

Lääkevalikoima ladattiin -formulary-komennolla, ja kaksi NCPDP-standardia vastattiin siitä. Lääkevalikoima luetellaan suunnitelmat ja lääkkeet niiden tasojen ja vaatimusten kanssa, ja missä julkinen Da Vinci US Drug Formulary API ja NCPDP-päätepisteet sijaitsevat. Hinnan tarkistus (RTPB) hinnoittelee lääkkeen jäsenelle lääkärin Reaaliaikaisen Reseptin Edun pyynnön mukaisesti: kattavuustilanne, rajoitukset sanoissa niiden koodien kanssa, jäsenen osuus ja suunnitelman osuus, ja edullisemmat vaihtoehdot. Ennakkohyväksyntä (ePA) lähettää SCRIPT-aloituksen tälle palvelimen omalle päätepisteelle, näyttää kysymysryhmän lomakkeena, lähettää vastaukset ja näyttää päätöksen; alla, jokainen tapaus, missä se on ja onko lääkäri ilmoitettu, tapauksen vastaukset, painike lähettämättömän päätöksen uudelleen lähettämiseksi ja lääkekuvaus, jonka CMS-0062-P ehdottaa. Katso CMS-0057.

3.5.3 CMS-0057

Maksajan puoli CMS Interoperability and Prior Authorization -säännöstä, viitenä työkaluna:

- Tarkastelijan jonot: PAS-pyynnöt, jotka odottavat henkilön käsittelyä, ensin kaikkein pianimmassa määräaikassa, asiakirjoineen; hyväksy, hylkää tai vahvista vähemmän yksiköitä. Katso tarkastelijan jonot.

Muunnokset eivät tallenna mitään eivätkä lähetä mitään.

3.5.4 CMS Aligned Network

Valmius CMS:n interoperabiliteettikehykselle: jokainen 26 kriteeristä, ryhmiteltyinä CMS:n ryhmittelyn mukaisesti, siinä mitä Perfuse tarjoaa, onyko se on täällä, asetus joka sen käyttää päälle, ja mitä organisaation tulee tehdä. Yläreunassa olevat laskurit suodattavat listaa. Katso CMS-0057.

3.6 Hallitse - kuka voi tehdä mitä, ja miten tämä palvelin on asetettu

3.6.1 Käyttäjät

Tilit, roolit (valvoja, katselija, operaattori, muokkaaja, ylläpitäjä) ja kanavaryhmät. Kunkin henkilön kanavaryhmät muokataan paikallaan luettelossa; tyhjä tarkoittaa kaikkia kanavia, ja lab=editor, adt antaa eri roolin yhdessä ryhmässä. Joitain ryhmiä rajoitettu ylläpitäjä näkee vain näiden ryhmien henkilöt. Otsikko näyttää omat ryhmäsi roolisi vieressä, kun sinulla on ryhmiä. Katso turvallisuus.

Koneen tunnistetiedot ovat myös täällä. Tokeni on koneelle eikä henkilölle: se ei vanhene eikä ole vaikuttunut kenenkään kirjautumisesta, mikä on se, mitä palvelimen naapuriin puhuva palvelin tarvitsee. Vain tiiviste tallennetaan, joten tokenia näytetään kerran, kun se luodaan, eikä sitä voida palauttaa - varastettu tietokanta ei tuota käytettävissä olevaa tokenia. Anna sille alin rooli, joka tekee työn.

MCP-ominaisuuden ollessa käytössä, osio näyttää myös osoitteen, johon tekoälyagentti yhdistää, asiakasohjelman määrityksen kopioimiseen ja kunkin työkalun roolin, jota se tarvitsee; tokenin myöntäminen Anna tekoälyagentin toimia sen avulla antaa sille mcp:write -laajuuden. Katso turvallisuus.

3.6.2 Vuokralaiset

Jaetulla palvelimella, alustan operaattorin luettelo organisaatioista: kunkin kanavien määrä ja tallennettu koko rajoitusten (kanavat, viestit minuutissa, tallennustila) vieressä, jotka asetetaan paikalla. Näytetään vain alustan roolille. Katso turvallisuus kunkin rajoituksen toiminnasta.

3.6.3 Sertifikaatit

Käytössä olevat TLS-sertifikaatit ja niiden voimassaoloajat. Voimassaoloajat ovat se piste: sertifikaatti, joka vanheni sunnuntaina, on yksi luokka katkoista, joka on täysin estettävissä ja jota ei yleensä estetä.

3.6.4 Toiminta

Kuka muutti mitä, ja milloin. Jokainen konfiguraatiomuutos on tallennettu, mikä tekee siitä mahdollisen vastata "se alkoi epäonnistua tiistaina".

3.6.5 Tietosuoja

Henkilön pyynnöt GDPR:n ja UK GDPR:n mukaisesti, oikeudelliset pidätykset, poistoluettelo, säilytys ja rekisteröintikäytäntöjen kirja; vain järjestäjille. Katso tietosuojelu.

3.6.6 Laivasto

Jokainen Perfuse-istanse yhdellä sivulla.

Mirth myy tämän erillisenä tuotteena; täällä se on konfiguraatiotiedosto ja vain lukuoikeudella oleva tunniste. Syy siihen, miksi se on arvokas, on kapea ja tärkeä: kuollut palvelin ei näytä hiljaiselta. Yhden instanssin kojussa ei voida nähdä, onko toisella sivustolla lopetettu raportointi, ja laivaston näkymässä voidaan.

3.6.7 Siirrä

Lisää Mirth- tai OIE-kanavan vienti ja katso, kuinka moni kanavistasi toimisi täällä muuttumattomana. Sama analyysi kuin perfuse explain ja perfuse translate, ilman terminaalia. Katso siirtymisohjeet.

3.6.8 Asetukset

Jokainen palvelimen asetus, jolla on ohjaus kullekin — mukaan lukien ne, jotka perinteisesti elävät vain tiedostossa. Kunkin asetuksen kohdalla näkyy, vaikuttaako se välittömästi vai vaaditaanko uudelleenkäynnistys, ja onko asetus asetettu eksplisiittisesti vai onko se oletusarvo.

Asetukset kattavat jokaisen perfuse serve-vaihtoehdon, joka kytkee toiminnon päälle: FHIR-päätepiste ja sen versio, vakuutusyhtiöiden rajapinnat, PAS ja CRD-säännöt, X12 278 -silta, eCR, SMART-valtuutuspalvelin, TLS ja allekirjoitus, tilastot, laivasto ja VPN. Ne on ryhmitelty FHIR, vakuutusyhtiöt, julkinen terveys, SMART, turvallisuus jne. Kunkin asetuksen kanssa näytetään myös lippu, johon se vastaa.

Käynnistäminen konsolista. Asetus, joka on merkitty *Vaativa uudelleenkäynnistys*, tallennetaan heti, mutta luetaan vain kun palvelin käynnistetään uudelleen. Kun mitään odottaa, Settingsin yläosassa oleva banneri listaa ne Käynnistä palvelin uudelleen -painikkeella (sama painike on tarjolla kirjautumisen muokkaajassa ja asetustiedostossa tallennuksen jälkeen). Se kysyy ensin, koska jokainen kanava pysähtyy muutamaksi sekunniksi: kunkin lopettaa viestin, jonka se käsittelee, kuten se tekee, kun palvelu lopetetaan, ja lähettäjät lähettävät uudelleen mitä tahansa, mikä saapuu sillä välin. Konsoli odottaa sitten, kunnes palvelin vastaa uudelleen ja lukee asetukset uudelleen. Vain järjestelmänvalvoja voi käynnistää uudelleen, ja kunkin uudelleenkäynnistystapahtuman on kirjattu toimintalokiin server.restart -merkinnällä.

Linuxilla ja macOS:lla prosessi korvaa itsensä saman ohjelman ja argumenttien kanssa, säilyttäen prosessin tunnisteen, joten systemd, launchd tai konttien suorittamisen aikana ei tapahdu mitään. Windowsissa palvelin käynnistyy uudelleen saman prosessin sisällä, joka pitää Windows-palvelun palvelunhallinnassa. Jos palvelin ei ole vastannut kahden minuutin kuluttua, konsoli ilmoittaa siitä; syy on palvelimen lokissa.

Liput ja asetustiedosto. Kun palvelin käynnistyy ensimmäisen kerran, liput, joita se sai, kirjoitetaan asetustiedostoon. Sen jälkeen tiedosto voittaa liput, joten asetuksen muuttaminen tehdään konsolissa (tai tiedostossa), ei palvelun komentorivillä muokkaamalla. Lippu, jota tiedosto ei vielä mainitse, tallennetaan, kun palvelin käynnistyy siitä. Lipun poistaminen komentoriviltä myöhemmin ei kuitenkaan sammuta sen ominaisuutta: sammuta se asetuksissa.

SNMP on paneeli asetusten alapuolella: onko agentti vastaamassa ja minkä osoitteen, verkkot, joille se vastaa, kuinka monta hälytysloukkausta on lähetetty tai epäonnistunut, ja Lataa MIB käytössä olevan perusOID:n kanssa. Arvot asetetaan valvontaa varten, SNMP.

Brändäys on myös täällä: sivusto voi asettaa tuotteen nimen, sloganin, korostevärin ja ladata logon. Logo näkyy sitten otsikossa, kirjautumissivulla, kojussa ja raporttinäytöillä. Jos logoa ei ladata, mitään ei korvata — brändätön asennus pysyy brändättömänä eikä hankki koristelua.

3.7 Mitä värit tarkoittavat

Neljä rekisteriä, ja kunkin kohdalla sanotaan jotain erilaista. Ero on mainittava, koska se on eroa välillä, jonka näytössä voi lukea yhdellä silmäyksellä, ja sellaisella, jossa kaikki kilpailevat huomiosta.

Selkeä teksti on tosiasia siitä, miten Perfuse toimii. Suurin osa käyttöliittymästä. Mitään ei ole värjätty tärkeäksi.

Vihreä tarkoittaa, että jotain onnistui juuri, koska teit jotain. Se ilmestyy toiminnon jälkeen eikä jää näkyviin.

Keltainen on varoitus: arvoisa tietää ennen kuin toimit, eikä se ole virhe. Ominaisuus, jota ei ole käytössä, asetus, jonka muutokset ovat auditoitu, muunnos, joka likimääräiseen eikä toista, kuljetus, jonka Perfuse käsittelee, mutta ei voi täysin vahvistaa. Keltainen on väri, joka tarkoittaa "lue tämä ennen kuin jatkat".

Punainen tarkoittaa, että jotain on väärää tässä hetkessä. Arvo, joka on hylätty, pyyntö, joka epäonnistui, varmenne, joka on vanhentunut, kriittinen hälytys, joka laukeaa. Mitään muuta ei käytetä.

Viimeinen sääntö on syy siihen, miksi näyttö ei avaudu punaisena. Punainen on ainoa väri, joka kantaa ohjeen — pysähdy, ja se voi olla jotain, mitä teit — ja näyttö, joka käyttää sitä koristeluun, ei voi sanoa mitään, kun syöte on todella väärä. Tämä ei aina ollut totta: käyttäjien näyttö avautui aiemmin "palvelin lähetti vastauksen, jota ei voitu lukea" jokaisella asennuksella, joka ei ollut määrittänyt passkeyjä, ja asetukset-näyttö merkitsi auditoituja arvoja samalla värillä kuin hylätyn. Testi web/src/RedMeansWrong.test.ts:ssa epäonnistuu nyt, jos lause, joka kuvailee jotain puuttuvaa tai likimääräistä, annetaan punainen tyyli.

Koodiruutu sisällä sanastoa on erilainen. Siellä punainen on tokenin tyyppi — HL7-segmentin nimi, XML-elementti — eikä se kanna mitään arviointia.

4 Kanavat

Kanava on yksi viestivirta: jostakin ne tulevat, valinnaiset muutokset ja yksi tai useampi paikka, minne ne menevät. Se on konfiguraation yksikkö, valvonnan yksikkö ja käyttöönoton yksikkö. Kaikki muu Perfusessa on olemassa kanavien palvelemiseksi.

4.1 Rakenne

Kanavatiedostolla on seuraavat osat, järjestyksessä, jossa ne tulevat voimaan:

OsaAvainVaadittuMitä se tekee
IdentiteettinamekylläNimeää kanavan. On oltava yksilöivä.
TietotyyppidataTypeeiMiten viestit parsitaan. Oletuksena HL7 v2.
LähdesourcekylläMista viestit tulevat. Tasan yksi.
SuodatinfiltereiPäättää, mitkä viestit hyväksytään.
MuunnoksettransformationseiJärjestetyt muutokset viestiin.
KohdatdestinationskylläMinne viestit menevät. Yksi tai useampi.

Lisäksi useita, jotka koskevat koko kanavaa: scripts, shadow, contract, tables, attachments, group ja enabled. Kukin on kanavaviitteessä.

4.2 Yksi lähde, monta kohdetta

Tämä epäsymmetria on tietoinen ja sen ymmärtäminen on tärkeää alusta alkaen, koska se on yleisin sekoittumisen lähde, kun tulee toisesta moottorista.

Kanavalla on tasan yksi lähde. Jos viestit tulevat kahdesta paikasta, se on kaksi kanavaa. Yrittäminen ilmaista sitä yhtenä kanavana tuottaa konfiguraation, jossa kuljetuksen epäonnistuminen näyttää samalta ulkopuolelta, ja jossa kahden syötteen liikenne sekoittuu tilastoissa — joten toisen lasku piilotetaan toisen alle.

Kanavalla on mikä tahansa määrä kohteita, ja ne ovat riippumattomia. Yhden epäonnistuminen ei estä muita, ja kullakin on oma jononsa, oma uudelleenkokeilupolitiikkansa ja oma toimitusrekisterinsä. Viesti, joka saavutti kolme neljästä kohteesta, merkitään tarkalleen sellaisena, ei onnistumisena tai epäonnistumisena.

4.3 Kohteet eivät ole ketju

Kunkin kohde saa viestin sellaisena, kuin se oli kanavan muunnosten jälkeen. Kohde ei saa edellisen kohden tulostetta.

Tämä on tärkeää, kun kohdella on omat muunnokset, mitä se voi olla. Ne koskevat vain kyseisen kohden kopiota. Yleinen virhe on laittaa muutos ensimmäiseen kohteeseen ja odottaa, että toinen kohteekin näkee sen.

Jos tarvitset todella ketjun — yhden virran tulosteen syöttämistä toiseen — käytä kanavan kohdetta, joka lähettää toiseen kanavaan nimellä. Se on eksplisiittinen, näkyy viestihistoriassa kahtena kanavana ja voidaan valvoa kahtena asioidena, mitä piilotettu ketju ei voi.

4.4 Nimeäminen

Nimi on kanavan identiteetti kaikkialla: tiedostossa, viestivarastossa, hälytyksissä, auditilokissa ja URL-osoitteessa. Sen muuttaminen ei ole uudelleennimeäminen; se on uusi kanava, ja vanhan kanavan historia pysyy vanhan nimisenä.

group on erillinen ja olemassa kanavien järjestämiseksi. Ryhmällä ei ole vaikutusta käyttäytymiseen, ja kanavien ryhmittäminen ei tee niistä jaettavia.

Monikeskuksisessa käyttöönotossa laita laitos nimeen eikä pelkästään ryhmään. Mirth-käyttöönotot useilla sivustoilla luotettavasti ajautuvat epäjohdonmukaisiin nimeämisperusteisiin, ja se, milloin se tulee tuskalliseksi, on tapaus kello kahden aikaan aamulla, jossa kanavaluettelossa on neljä asiaa nimeltä adt-inbound.

4.5 Käyttöönotto ja pois käytöstä

enabled: false estää kanavan käynnistymisen poistamatta sitä. Sen konfiguraatio, historia ja tilastot säilyvät.

Poissaoleva kanava ei ole keskeytynyt kanava. Sen lähde ei kuuntele, joten yrittävä lähettäjä saa yhteyden epäonnistumisen sijaan kiinni, mikä tarkoittaa, että lähettäjän oma virheloki täyttyy, joten poissaoleva kanava ei ole korvaaja järjestelylle, jonka kanssa lähettäjä on sovittu.

4.6 Missä kanavat sijaitsevat

Yksi YAML-tiedosto per kanava, hakemistossa, jonka määrittää -channels. Tiedostonimi ei ole kanavan nimi; name-avain on. Niiden pitäminen samana on vahvasti suositeltavaa, eikä mitään pakota sitä.

Tiedostot luetaan uudelleen ilman uudelleenkäynnistystä. Tiedosto, joka ei parseudu, raportoidaan ja aiemmin ladattu versio jatkaa suorittamista, joten syntaksivirhe ei voi ottaa toimivan syötteen ilmalta.

Kanava, jota muokataan verkkorajapinnassa, kirjoitetaan takaisin sen tiedostoon. Jos nämä tiedostot ovat versiohallinnassa — mikä on suositeltavaa — odota muutosten tekemisestä konfiguraatiomuutoksia, jotka tehdään verkkorajapinnan kautta, ja älä muokkaa tiedostoa käsin, kun joku on sitä aukaissut rakentajassa.

4.7 Kanavan oman kuuntelijan salaaminen

Kanava, joka kuuntelee porttia, on itsenäinen palvelin, ja sen TLS on erillinen Perfuse-verkkorajapinnan TLS:stä. Yhden asettaminen ei aseta toista. HTTP-lähteelle asetukset ovat TLS ja rajoitukset -kohdassa lähteessä.

TLS:n käyttöönotto pyytää varmenteen ja yksityisen avaimen. Vaadittavan asiakasvarmenteen käyttöönotto muuttaa sen vastavuoroiseksi TLS:ksi: lähettäjän on esitettävä varmenne, jonka on allekirjoittanut valitsemasi viranomainen, mikä on todennus, joten kuuntelija, jolla se on käytössä, ei tarvitse myös jaettua tunnusta — vaikka niiden yhdistäminen ei ole väärin.

Viranomaisuutta kysytään vain kerran, kun asiakasvarmenne vaaditaan, ja se jätetään tiedostosta pois, kunnes siihen tarvitaan. Kanava, joka nimeää viranomaisuuden, jota ei koskaan kysytä, luetaan kuin lähettäjät olisivat vahvistettu, vaikka he eivät ole.

MLLP-kuuntelija on samanlainen kuin Salaa tämä kuuntelija -asetukset, joissa on yksi mainittava ero: MLLP:llä asiakasvarmenne on ainoa saatavilla oleva todennusmenetelmä. Tokenia tai otsikkoa ei ole, joten kuuntelija ilman sitä hyväksyy viestit kaikilta isännöitsijöiltä, jotka voivat tavoittaa portin.

Kaksi rajoitusta on sen rinnalla. Lopeta lukeminen kestolta, koska lähettäjä, joka avaa yhteyden ja lopettaa kirjoittamisen, muuten pitää yhteyden auki. Ja suurin hyväksytty viesti, tavuissa, koska nolla tarkoittaa, että rajoitusta ei ole, ja rajoitus on muisti — lähettäjä, joka lähettää gigatavun, hylätään sen sijaan, että se imeytyy.

4.8 Validointi

Kanava tarkistetaan, kun se ladataan, ja tarkistukset ovat kieltäviä eikä varoituksia, missä vaihtoehtona olisi kanava, joka toimii ja tekee väärän asian.

Esimerkkejä asioista, jotka evätät suoraan: määränpää ilman tyyppiä, muodonmuutos, joka osoittaa polkua, joka ei voi olla olemassa julkaistussa tietotyypissä, vahvistusmuoto, jota lähde-liikenne ei voi toimittaa, ja aineen II resepti uusimisilla.

Ero, jota Perfuse pyrkii pitämään, on se, että kaikki, mikä voi tuottaa uskottavan näköisen väärän tuloksen, evätään, ja kaikki, mikä on vain epätavallista, sallitaan ja ilmoitetaan. Kanava, joka ei voi olla väärä, on arvokkaampi kuin kanava, joka käynnistyy.

5 Viestin virtaus

Tämä luku seuraa yhtä viestiä siitä hetkestä, kun se saapuu, siihen hetkeen, kun se toimitetaan tai luovutaan. Tiedostaminen tästä järjestyksestä on nopein tapa selvittää, mihin muutos kuuluu, ja miksi jotain ei tapahdu.

5.1 Tapahtumien järjestys

Arrival de-frame Parse Record as received Filter Transform Destination A Destination B Destination C unparseable filtered Filtered is a normal outcome, not an error. Unparseable is recorded and stops. The acknowledgement is sent after delivery by default, so a sender is not told "received" before it is true.
  1. Arrival. The source accepts the bytes. For a stream transport this includes de-framing — finding where one message ends and the next begins.
  2. Parse. The bytes become a tree according to the channel's dataType. A message that cannot be parsed stops here and is recorded as a parse failure.
  3. Record. The message is written to the message store as received, before anything modifies it. This is what makes replay and reprocessing possible.
  4. Filter. If the channel has a filter, it decides whether to accept the message. A rejected message is recorded as filtered, which is a normal outcome and not an error.
  5. Transform. The channel's transformations run in order, each against the result of the last.
  6. Fan out. Each destination gets a copy of the transformed message, applies its own transformations if it has any, and delivers.
  7. Record the outcome. Per destination: delivered, queued, failed, or filtered.
  8. Acknowledge. If the source expects an acknowledgement, it is generated and sent. By default this happens here, after delivery — see below.

5.2 Kun vahvistus lähetetään

Tämä on tärkein asetus kanavassa, koska se päättää, mitä lähettäjälle luvataan. Se on ack.when, ja sillä on kaksi arvoa.

on_delivery on oletusarvo. Vahvistus lähetetään vain sen jälkeen, kun jokainen käytössä oleva määränpää on hyväksynyt viestin. Myönteinen vahvistus tarkoittaa siis, että data on todella saapunut jonnekin, mikä on vahvin väite, jonka välittävä moottori voi rehellisesti tehdä.

on_receipt vahvistaa heti, kun viesti on jäsentetty ja jonottu, ennen kuin määränpäätä on kirjoitettu.

Perfuse käyttää oletusarvoisesti on_delivery -asetusta, koska luvataan toimitus ja sitten menetetään viesti on pahempaa kuin hitaus. on_receipt -asetuksella viesti, joka on vahvistettu, voidaan edelleen menettää, jos prosessi kuolee jonottuneella työllä — lähettäjä uskoo, että se on toimitettu, mitään ylävirran ei uudelleenlähetä sitä, ja ainoa tallennus siitä, että se on olemassa, on Perfuse-omassa varastossaan.

5.3 Milloin valita on_receipt

Tapaus sen puolesta on olemassa, ja se on aikakatkaisut. MLLP-lähettäjä, joka ei saa vahvistusta muutamassa sekunnissa, yleensä lähettää uudelleen, joten hitaalla määränpäällä on_delivery -asetuksella tuottaa duplikaatteja sen sijaan, että se aiheuttaa viivästystä. Jos yksi määränpää on hitaasti arkistoiden tai järjestelmä, joka on säännöllisesti käytössä, on_delivery -asetus sitoo lähettäjän aikakatkaisun kyseisen määränpään huonoon tapaukseen.

Kauppa on eksplisiittinen: on_receipt siirtää riskin duplikaateista menetykseen. Sen valitseminen tarkoittaa sitä, että hyväksytty viesti voidaan menettää kaatumisen yhteydessä, ja se on yhdistettävä jonon syvyyden hälytykseen, jotta huomataan jonon loppuminen. Katso hälytykset.

Kummassakin asetuksessa myönteinen vahvistus ei ole lupa, että vastaanottava sovellus on *prosessoinut* viestin — vain se, että se on hyväksynyt tavut. Jos tarvitset tietää, että tulos on arkistoitu, se on tultava vastaanottavasta järjestelmästä, ja mikään integraatiomoottori ei voi sitä tarjota.

5.4 Missä viesti tallennetaan

Ennen suodatusta ja siten ennen muodonmuutosta. Kolme seurausta:

Muunnettu muoto tallennetaan myös kohden mukaan tuloksen kanssa. Tallennus sisältää siis saapuneen, lähetetyn ja tapahtuneen — mitä tutkinta tarvitsee.

5.5 Virhe kussakin vaiheessa

VaiheMinkälaista epäonnistuminen näyttääMitä tapahtuu
SaapuminenKehyksen virhe, yhteys katkeaa viestin keskelläTallennetaan, yhteys suljetaan, lähettäjä yrittää uudelleen
Syntaksin tarkistusEi ole voimassa ilmoitetun tyypin mukaanTallennetaan syntaksivirheeksi, negatiivinen vahvistus, jos lähde odottaa sitä
SuodatinItse suodatin virheileeKäsitellään kieltönä, tallennetaan virheen kanssa
MuunnosJokin vaihe epäonnistuuRiippuu vaiheen on_error:sta; ks. muunnos
ToimitusKohde ei ole tavoitettavissa tai hylkääJonossa ja yritetään uudelleen kohdekohtaisen käytännön mukaan; ks. toimitus

Tärkeä epäsymmetria: parsimisvirhe on pysyvä, ja toimitusvirhe yleensä ei ole. Yritettäessä uudelleen epäparsittavaa viestiä ei auta, joten sitä ei yritetä uudelleen. Yritettäessä uudelleen toimitusvirhettä, joka yleensä auttaa, joten sitä yritetään uudelleen.

5.6 Järjestys

Yhden kohden sisällä viestit toimitetaan saapumisjärjestyksessä, ja viesti, joka epäonnistuu ja menee jonoon, pitää paikkansa — myöhemmät viestit odottavat sen takana eivätkä ohita sitä.

Tämä on oikea oletusarvo kliinisiin tietoihin, joissa potilaan sisääntulon ja uloskirjaamisen toimitus väärässä järjestyksessä on huonompi kuin molempien myöhästyminen. Tämä myös tarkoittaa, että yksi myrkytetty viesti voi pitkittää jonon, miksi jonon syvyys on syytä hälyttää.

Kohteiden välillä ei ole järjestysvapautta, koska ne ovat riippumattomia. Kaksi kohdetta eivät välttämättä vastaanota samaa viestiä samaan aikaan, ja nopea kohde voi olla useita viestejä hitaamman edellä.

Järjestys kanavien välillä ei ole lainkaan taattu. Jos kaksi syötettä on sovellettava tiettyyn järjestykseen toisiinsa nähden, tämä järjestys on pakko toteuttaa vastaanottavassa järjestelmässä, koska mitään väliosaa ei voi tietää, kumpi kahdesta riippumattomasti saapuneesta viestistä tapahtui ensin.

5.7 Rinnakkaisuus

Lähde voi käsitellä useita yhteyksiä kerran, jota rajoittaa max_connections. Viestit eri yhteyksistä käsitellään rinnakkain.

Tämä tarkoittaa, että kahden samanaikaisesti lähetetyn viestin saapumisjärjestys ei ole määritelty, eikä se voi olla — ne saapuivat todella samaan aikaan. Lähettäjä, joka tarvitsee järjestyksen, on käytettävä yhtä yhteyttä, mikä on se, mitä heistä suurin osa tekee.

6 Muunnos

Muunnokset muuttavat viestiä. Ne ovat luettelo, ne suoritetaan järjestyksessä, ja kunkin edellisen tuloksen näkee seuraava.

Perfusen muunnokset ovat deklaratiivisia: kunkin vaiheen nimi on operaatio ja kenttä, johon se sovelletaan. Tavallisen polun ympärillä ei ole skriptikieltä. Tämä on tietoinen rajoitus ja syyt on selitetty kohdassa miksi ei skripti alla.

6.1 Vaiheet

VaiheMitä se tekee
setKirjoittaa kirjaimellisen arvon polkuun, luo sen, jos se puuttuu.
copyKopioi yhden polun toiseen, valinnaisella oletusarvolla, kun lähde on puuttuva.
clearTyhjentää kentän, jättäen sen läsnäolevaksi.
removePoistaa kentän kokonaan.
mapEtsii nykyisen arvon taulukosta ja korvaa sen.
replaceSäännöllinen lausekkeen korvaus kentässä.
padTäyttää arvon kiinteään leveyteen.
dateMuuttaa päivämäärää tai aikaleimaa eri muotoihin.
trimPoistaa ympäröivän valkoisen tilan.
caseMuuttaa isoiksi tai pieniksi kirjaimiksi.

Jokainen vaihe hyväksyy myös description, joka näkyy jäljityksessä ja käyttöliittymässä, ja when, joka tekee vaiheen ehdolliseksi.

Vaihe kirjoitetaan operaation nimenä, jolla on oma lohko:

transformations:
  - description: Our record number, not theirs
    set:
      path: PID-3.4
      value: RIVERSIDE
  - copy:
      from: PID-19
      to: PID-3.1
      default: UNKNOWN
  - map:
      path: PID-8
      table:
        M: Male
        F: Female
set ja value eivät ole sisaruksia. set ottaa lohkon, joka sisältää path ja value. Kirjoittaminen set: PID-3.4 value: vieressä on yleisin virhe käsin kirjoitetussa kanavassa ja tuottaa latausvirheen sen sijaan, että se aiheuttaa hiljaisen virheen.

6.2 Tyhjennys, poisto ja ero

clear jättää kentän läsnäolevaksi ja tyhjäksi. remove poistaa sen kokonaan.

HL7:lle tämä ero on todellinen, ja se ulottuu vastaanottajaan. Tyhjä kenttä kertoo, että ”minulla on tämä kenttä, ja sillä ei ole arvoa”. Puuttuva kenttä ei kerro mitään. Jotkut vastaanottajajärjestelmät käsittävät ensimmäisenä ohjeena tyhjentää tallennettu arvo, ja toisen, joka ei mainita sitä, jättää sen koskemattomaksi — mikä on ero potilaan tallennetun allergian poistamisessa ja siitä, ettei sitä mainita.

Jos et tiedä, mitä vastaanottaja haluaa, kysy. Arvauksella on 50 prosentin mahdollisuus tuhota hiljaisesti tietoja kaukana puolella.

6.3 Ehdot

when ottaa lausekkeen ja vaihe suoritetaan vain, jos se on tosi:

  - when: MSH-9.2 == "A08"
    set:
      path: EVN-1
      value: A08

Vaihe, jonka ehto on epätosi, merkitään ohitettuksi, ja tämä ilmoitetaan erikseen vaiheesta, joka suoritettiin ja ei muuttanut mitään. Tämä ero on step-through debuggerin tarkoitus, ja se käsitellään kohdassa debugging: epätosi ehto ja puuttuva kenttä näyttävät samanlaisilta ulkopuolelta ja tarkoittavat vastakkaisia asioita.

6.4 Polut

Polku osoittaa kentän: PID-5 on PID-kentän viides kenttä, PID-5.1 on sen ensimmäinen komponentti, PID-3(2) on PID-3-kentän toinen toisto ja OBX(3)-5 on kolmannen OBX-segmentin viides kenttä.

Kaksi asiaa, joita kannattaa tietää:

6.5 Virheet

Useimmat vaiheet eivät voi epäonnistua. Arvon asettaminen, kentän tyhjentäminen tai kopioiminen puuttuvasta polusta oletusarvoon on määritelty jokaiselle syötteelle.

date on poikkeus, koska arvo, jota se ei tunnusta, ei ole oikein muunnettavissa. Se ottaa on_error-parametrin:

Oletusarvo on fail, koska aikaleima, joka ei muutu hiljaisesti, on pahempi kuin viesti, joka ei saapunut. Päivämäärä väärässä muodossa näyttää yhä päivämäärältä, joten se menee vastaanottajan validoinnin läpi ja päätyy asiakirjaan vääränä päivämääränä.

keep on legitimi, kun vastaanottaja hyväksyy kummankin muodon, ja kun sitä käytetään, jäljitysmerkintä merkitsee muutoksen tahalliseksi, jotta se ei lueta hiljaisesti epäonnistuneena vaiheena.

6.6 Järjestys on tärkeää, ja jäljitys näyttää sen

Kunkin vaiheen näkee edellisen vaiheen tuloksen. Kaksi seurausta, jotka voivat hämätä:

6.7 Ehdotus kartalle ja mitä tehdä ehdotuksella

AI Mapper ehdottaa kartoituksia lähdekenttien ja kohdekenttien välille. Sen määrittävä käyttäytyminen on, että se kieltäytyy: alle luottamusrajansa se pidättäytyy arvauksista, koska varma väärä kartoitus kliinisessä järjestelmässä on pahempi kuin mikään kartoitus.

6.7.1 Anna sille jotain, josta olla ylpeä

Nimi yksin on heikko todiste, vaikka se vastaa täsmälleen. PatientMRN vastaan PatientMRN saa arvon 68, joka pidättäytyy oletusarvoisesta kynnyksestä 70.

The engine knows what an HL7 path means — it will tell you PID-7 is Date/Time of Birth and score your field name against that rather than against the string PID-7, which shares no characters with anything. A locally defined Z segment means whatever your site decided, so nothing is claimed about it.

Se saa kartoituksen suurimmaksi osaksi valmiiksi. Lopettaaksesi sen, toimita molemmat puoliskot:

Näiden avulla moottori voi nähdä, että arvot ovat samaa mieltä kohdekentän tyypin kanssa, ja ehdotus perustuu siihen enemmän kuin nimeen.

6.7.2 Hyväksyntä on yksi kartoitus kerrallaan

Jokaisella ehdotuksella on oma hyväksymisruutu. Ei ole "hyväksy kaikki yli 80%": moottori on jo käyttänyt luottamusta päättääkseen, tarjotaanko kartoitus ja mikä on jäljellä, on tuomio tästä kentästä tässä syötteessä. Numero ei ole tuomio.

Pidäntitys ei voida hyväksyä lainkaan. Sillä ei ole ruutua, ei edes kytkettynä pois päältä, ja näyttö sanoo, että moottori ei tiedä. Jos tiedät vastauksen, kartoita se käsin — se on eri teko kuin ehdotuksen hyväksyminen.

Ehdotus, joka on alle kynnyksesi, näytetään ilman ruutua, merkitty alle sen. Arvoisa lukea — lähes osumat ovat usein kartoitus, jonka halusit, ja piilottaminen jättäisi ihmettelemään, olisiko moottori koskaan sitä käsittelyssä — mutta ei hyväksyttävä, koska kynnyksesi on raja, jonka piirsit.

6.7.3 Kaksi asiaa, joita voit tehdä hyväksymiesi kanssa

Lisää ne kanavaan muuttaa jokaisen kartoituksen kopioimisväliksi. Tämä toimii vain, kun lähde on polku viestissä, kuten ZPI-1, koska vaihe kopioi yhdestä paikasta toiseen viestissä. Vaiheet menevät kanavatiedostoon ja tulevat voimaan, kun se ladataan seuraavan kerran — liikenteessä ei muutu mitään, kunnes silloin. Jokaisen vaiheen kuvaus tallentaa luottamuksen, jolla se ehdotettiin, ja sen, että ihminen hyväksyi sen, mikä tekee siitä vastuullisen kuuden kuukauden kuluttua.

Lataa se reseptinä on oikea vastaus yleisemmälle tapaukselle: kartoitus sarakkeen nimestä, JSON-avaimesta tai valmistajan omasta kentänimestä. Nämä ovat todellisia kartoituksia, ja kanava ei voi lukea tällaista kenttää suoraan, joten vaihe ei voi ilmaista niitä. Resepti tallentaa ne hyväksytyiksi ja niitä voidaan jakaa.

6.8 Miksi ei skripti

Mirth asettaa JavaScript-muunnoksen jokaisen kanavan keskuksi, ja se on joustavin suunnittelu, joka on saatavilla. Perfuse tarjoaa skriptauksen — katso scripts-avain kanavaviitteessä — mutta ei tee siitä tavallista polkua, kolmen käytännön syyn vuoksi.

Julistava vaihe voidaan tarkastella. Perfuse voi kertoa, että vaihe lukee PID-5 ja kirjoittaa PID-8, ennen kuin se suoritetaan, ja se voi näyttää kenttätason jäljityksen, varoittaa, että vaihe osoittaa polkua, jota julistettu tietotyyppi ei voi sisältää, ja generoida vaihekohtaisen toistamisen. Mikään näistä ei ole mahdollista mielivaltaiselle koodille.

Julistava vaihe voidaan päätellä käyttöliittymästä. Rakentaja voi tarjota kentät, jotka ovat olemassa tämän kanavan liikenteessä, ja vaiheen muutos voidaan tarkistaa todellisten historiallisten viestien kanssa ennen kuin se tallennetaan.

Ja julistava vaihe ei voi tehdä mitään, mikä ei liity viestiin. Skripti voi kutsua verkkoon, lukea tiedostojärjestelmää tai riippua päivästä. Kun kanava, joka toimi kaksi vuotta, alkaa tuottaa väärää tulostetta, syy, joka on viestin ulkopuolella, on vaihin diagnosoida, ja mahdollisuuden poistaminen on arvokkaampaa kuin joustavuus, jonka se maksaa.

Missä aito muunnos ei voida ilmaista julistavasti, käytä skriptiä ja hyväksy, että jäljitys näyttää sen yhtenäisenä vaiheena.

6.9 Mitä skripti saa tehdä

Skripti evätään kaikki viestin ulkopuolella, ellei niille anneta lupaa, ja luvat ovat Skriptit-osiossa rakentajassa. Tämä on tarkoituksella toisin kuin Mirth, joka antaa jokaiselle skriptille kaikki — siellä muunnin voi hiljaisesti alkaa lukea tiedostojärjestelmää kopioimisen jälkeen.

On kolme.

Lue ja kirjoita tiedostoja edellyttää, että määrittelet hakemistot, joita se saa käyttää, ja kanava, joka myöntää tiedostojen pääsyn ilman niitä, evätään latauksen aikana. Tämä vaatimus on koko ero tiedoston pääsyssä ja rajoittamattomassa tiedoston pääsyssä: sen myöntäminen ilman hakemistoja kerran saavutti koko tiedostojärjestelmän, mukaan lukien Perfusen oman tietokannan, joka sisältää salasanan hashit, LDAP-palvelutilin salasanan ja OIDC-asiakas salaisuuden. Kanavan luominen vaatii vain editorin roolin, joten eskalaatio valmistui, kun järjestelmänvalvoja käynnisti kanavan.

Kysely tietokantaan käyttää kanavalle konfiguroiduissa yhteyksissä. Skripti, jolla on tämä, voi lukea mitä tahansa niiden tunnistetietojen kanssa.

Reitittää viestejä muihin kanaviin antaa skriptille mahdollisuuden lähettää viesti toiseen kanavaan, mikä on tapa, jolla kanavien välinen silmukka voidaan tehdä.

Kanavalle, jolla ei ole skriptejä, luvan myöntäminen ei tee mitään, ja generoitu tiedosto jättää koko lohkon pois silloin.

6.10 Päivämäärän käsittely, joka ei vastaa sen muotoa

Päivämäärän vaihe muuttaa yhdestä muodosta toiseen, ja mielenkiintoinen kysymys on, mitä tapahtuu, kun arvo ei vastaa muotoa, jonka se väittää olevansa.

Oletusarvo on pysäyttää viesti, ja se on oikea oletus: aikaleima, joka ei konvertoi hiljaisesti, hyväksytään alavirran ja luetaan väärin, mikä on pahempaa kuin viesti, joka epäonnistui äänekkäästi ja on istuva jossakin, missä joku voi nähdä sen.

Jätä arvo sellaisenaan siirtää sen alkuperäisessä muodossa. Alavirran näkee sitten kaksi muotoa yhdessä kentässä, mikä on epäonnistuminen, jonka vaihe oli olemassa estämään — mutta se on oikea valinta, kun kenttä on valinnainen ja kumppani lähettää sen epäjohdonmukaisesti.

Tyhjennä kenttä on rehellisempi ja parempi kuin väärä muoto, mutta vastaanottaja, joka vaatii kenttää, hylkää viestin sen sijaan.

6.11 Skriptikielen

Kolme kieltä hyväksytään, ja valinta riippuu pääosin siitä, onko tehdään migraatio. Arvo menee skriptin language-avaimen arvoksi:

ArvoMitä se on
javascriptOletusarvo. Merkintämätön skripti on JavaScript.
luaParempi valinta, kun kukaan ei tee migraatiota.
wasmKäännetyssä WebAssembly-moduulissa olevat tavut, ei lähdekoodi.

JavaScript on oletusarvo, ja merkintämätön skripti käsitellään JavaScriptina. Se on täällä yhteensopivuuden vuoksi, eikä se ole suositeltava valinta: Mirthin skriptit ovat JavaScriptia, ja sivusto, joka siirtyy, on tuhansia rivejä siitä. Siihen sisältyy myös E4X-tuen tuki, joka on vanha laajennus kielen XML-käsittelyyn, ja joka on käännettävä ennen kuin mitään voidaan parsia.

Lua (lua) on parempi valinta kenellekään, joka ei tee migraatiota. Pienempi suoritusaika, ei prototyyppiketjua, jota voidaan väärinkäyttää, ja kokonaislukutaulukot, jotka vastaavat segmentin ja kentän osoitetta luonnollisemmin kuin JavaScriptin. Sen standardikirjasto on tarpeeksi pieni, jotta se voidaan luetella, mikä tekee sen hiekkalaatikon helpommin luotettavaksi.

WebAssembly (wasm) ei ole kieli, vaan käännetyssä moduulissa olevat tavut, ja kenttä haluaa .wasm-tiedoston tavut eikä lähdekoodia. Käytä sitä, kun muunnos on jo olemassa käännetyssä kielessä, tai kun se on tarpeeksi raskas, jotta suoritusaika on merkittävä.

Sen sopimus on tarkoituksella yksinkertaisin mahdollinen: moduuli lukee viestin standardisyötteen kautta ja kirjoittaa tuloksensa standardilähtöön. Tavut sisään, tavut ulos - mikä on se, mitä jokainen työkalu jo tekee, ja mitä joku, joka testaa moduulia omalla komentorivillään, jo on.

Mitä tahansa moduuli kirjoittaa standardivirheeseen, tulee lokiriveiksi, joten se voi selittää itsensä samalla tavalla kuin skripti, joka kutsuu logger-funktiota.

Nollasta poikkeava lopetusmerkki tarkoittaa, että moduuli epäonnistui, mikä ei ole sama asia kuin suodattimen päättäminen hylätä viesti. Suodattimomoduuli sanoo true tai false standardilähtöön. Nämä kahden sekoittaminen tekisi kaatuvan moduulin erottamattomaksi siitä, joka tarkoituksella hylkää liikenteen.

6.11.1 Mitä tuloste merkitsee

Säännöt ovat samat kaikille kolmelle kielelle eikä uusia sääntöjä kunkin suoritusaikaympäristölle, joten skriptin havaittavissa oleva käyttäytyminen - mitä se voi nähdä, mitä se voi tehdä, kuinka kauan se voi kestää, mitä suodattimen tuomio merkitsee - on määritelty kerran.

Muunnos-, esikäsittelijä- tai kirjoittajamoduulille tyhjä tuloste merkitsee, että viesti on muuttumaton. Skriptin loppuminen jättää viestin koskemattomaksi; tyhjän tulosteen käsittely "viesti on nyt tyhjä" poistaisi liikenteen teknisyyden vuoksi.

WebAssembly-moduulit käännetyt kanavan lataamisen yhteydessä, ei ensimmäisen viestin yhteydessä. Kääntäminen ei ole ilmaista - moduuli, joka on rakennettu kielestä, joka tuo oman suoritusaikaympäristönsä, voi kestää satoja millisekunteja - ja maksaminen latausaikana tarkoittaa, että kanavan ensimmäinen viesti ei ole mystisesti hitaampi kuin loput.

6.12 Jaetut kääntämistaulukot

Saman ongelman toinen puoli: sivuston sukupuolikoodit ja potilasluokat käännetään samalla tavalla jokaisessa kanavassa, joka niitä koskettaa, ja taulukko kanavassa on taulukko, jota vain kyseinen kanava voi käyttää.

# codes.codeset.yaml
tables:
  - name: sex-to-lab
    describes: the hospital's sex codes into the numeric codes the lab expects
    decided_by: Dave, during the 2019 migration
    decided_on: 2019-04-11
    source: the lab's interface specification, version 3
    entries:
      - from: M
        to: "1"
      - from: U
        to: "9"
        why: the lab has no 'unknown', and 9 is its 'not stated'
# in the channel
tables:
  - codes.codeset.yaml
transformations:
  - map:
      path: PID-8
      use: sex-to-lab

Provenienssi on pointti. Suurin osa siitä, mikä tekee rajapinnasta hankalan ylläpitää, on se, että kukaan ei tiedä, *miksi* koodaus on tietyllä tavalla, ja henkilö, joka tiesi, on lähtenyt. Koodaus, jolla on syy, voidaan väittää; sellainen, jolla ei ole, muuttuu joksikin, mitä kukaan ei uskalla muuttaa ja mitä kukaan ei uskalla poistaa.

Taulukot tehdään ja muutetaan Build → Tables -sivulla sekä tiedostossa. Tallentaminen voimassa oleva taulukko käynnistää uudelleen kanavat, jotka lataavat sen tiedoston, joten seuraava viesti käyttää sitä; luonnos ei käynnistä mitään uudelleen.

6.12.1 Versiot ja voimassaolopäivämäärät

Taulukko voi pitää useita versioita yhdessä nimessä, kussakin omalla version-lla. Viesti valitsee käytettävän version, kun viesti saapuu: hyväksyttyjen versioiden joukosta, joiden päivämäärät kattavat kyseisen päivän (UTC), valitaan se, joka alkoi viimeksi. Niinpä koodin muutos, joka on sovittu ensi kuun alusta, voidaan merkitä jo nyt ja se tulee voimaan itsestään.

tables:
  - name: sex-to-lab
    version: "3"
    effective_from: 2026-11-01   # optional; empty means from the start
    effective_until: 2027-10-31  # optional; the last day it applies
    source_system: urn:local:hospital-sex
    target_system: http://terminology.hl7.org/CodeSystem/v2-0001
    entries: [...]

- Kaksi samaa nimeä olevaa versiota, joilla on sama versio, tai kaksi hyväksyttyä versiota, jotka alkavat samana päivänä, evätään, kun tiedosto ladataan. - Uuden version tallentaminen ilman alkamispäivämäärää, kun toinen on hyväksytty, ajoittaa sen tältä päivältä, joten se korvaa voimassa olevan version. Versio, joka itse alkoi vasta tänään, poistetaan, koska kaksi versiota, jotka alkavat samana päivänä, eivät jätä sääntöä. - Karttanuksen omat default ja strict käytetään, kun nuosi asettaa ne; muutoin taulukon. - Taulukkosivulla Näytä versiot listaa jokaisen version statuksen, kuka tallensi ja kuka hyväksyi sen, ja Vertaa voimassa olevaan versioon näyttää, mitä versio lisää, poistaa ja muuttaa.

6.12.2 Hyväksyntä

Kun Settings → Data → Mapping tables "Karttaustaulun muutokset vaativat toisen henkilön hyväksynnän" (data.tableApproval) on käytössä, jokainen tallennus on luonnos, ja henkilö, joka tallensi sen, ei voi hyväksyä sitä: joku toinen tekee sen, ja antaa valinnaisesti päivämäärän, jolloin se tulee voimaan. Hyväksytty versio ei voida muuttaa paikallaan; Uusi versio tästä kopioi sen seuraavaan versioon. Hyväksyminen, poistaminen ja poistaminen luonnoksesta kirjataan audit-lokissa, ja hyväksyminen käynnistää uudelleen kanavat, jotka lataavat tiedoston.

6.12.3 Arvoja ei ole taulukossa

Jokainen arvo, jota karttanuosi etsi ja ei löytänyt, lasketaan taulukon mukaan, kanavien mukaan, jotka se tuli läpi, ja kun se nähtiin ensimmäisen ja viimeisen kerran. Taulukkosivu listaa ne, useimmin nähty ensin. Karttaa avaa taulukon, jossa on jo lisätty rivi kyseisellä arvolla; Hylkää poistaa sen, kunnes se nähdään uudelleen. Arvot, jotka ovat yli 64 merkkiä pitkiä, eivät tallenneta (ne eivät ole koodit), ja lista pitää kirjaa siitä, mitä on nähty viestin säilytysajan kuluessa. Lista tallennetaan terminology.db-tiedostoon pääasiallisen tietokannan vieressä.

6.12.4 Koodijärjestelmät

Julkaistut koodijärjestelmät voidaan tuoda niiden julkaisijoiden omista tiedostoista Code systems -sivulla Taulukkosivulla (ylläpitäjille) tai komennolla POST /api/terminology/import?format=… ja tiedosto ruumiina:

MuotoTiedostoJärjestelmä
loincLoinc.csv LOINC-taulukon julkaisustahttp://loinc.org
icd10cmCMS:n tilaus-tiedosto (icd10cm_order_*.txt) tai kooditiedostohttp://hl7.org/fhir/sid/icd-10-cm
rxnormRXNCONSO.RRF RxNormin kokonaisjulkaisustahttp://www.nlm.nih.gov/research/umls/rxnorm
snomedRF2-kuvaussnapshot (sct2_Description_Snapshot-en_*.txt)http://snomed.info/sct
snomed-rf2koko SNOMED CT RF2-julkaisupaketti (zip-paketti, jonka kansallinen julkaisukeskus julkaisee)http://snomed.info/sct, versio http://snomed.info/sct/{module}/version/{date}
clamlClaML-tiedosto: WHO ICD-10, ICD-10-GM ja OPS (BfArM), CIM-10 FR (ATIH)tiedoston otsikosta tai annetusta system-kentästä
icd11WHO ICD-11 MMS-yksinkertainen tabulaatio (tabulaatio, jossa on Code- ja Title-sarakkeet)http://id.who.int/icd/release/11/mms
csvmikä tahansa rajattu tiedosto, jossa on system, codeColumn ja displayColumn (CPT, HCPCS, paikalliset koodit, kansalliset taulukot)annettu system

Yksikään niistä ei toimiteta Perfusen kanssa: LOINC, SNOMED CT, RxNorm ja CPT jokainen on omalla lisenssillään, ja näytön pyytää tuojalta vahvistusta siitä, että organisaatio omistaa sen (merkitty tuontiin). Tuodut koodit käytetään kolmella tavalla:

- Etsi koodi etsii koodin tai sanoja nimessä; - FHIR-palvelin vastaa CodeSystem/$lookup- ja CodeSystem/$validate-code-pyyntöjä niille (ks. FHIR-palvelimen asetukset). ICD-10-CM-koodit hyväksytään pisteellä tai ilman.

Kansalliset painokset ja luokittelut. SNOMED CT -painos tuodaan kokonaisuudessaan RF2-paketista: käsitteet niiden todellisella tilalla, jokainen aktiivinen kuvaus ja kieliviitejoukko. Painos löydetään paketista (kansallinen moduuli, jolla on eniten käsitteitä; edition nimeää sen sijaan) ja se tulee versio-URI:ksi. language valitsee, kuka on kunkin käsitteen näyttönimi (sv, da, nl, de, fr, en-GB, en-US ...; muutoin englanti), ja jokaisen kielen näyttönimi ja täysin määritelty nimi säilytetään nimityksinä: $lookup palauttaa ne, ja sen displayLanguage valitsee yhden (de-CH palautuu de:ksi). Perfusen nimettyjä painoksia (Kansainvälinen, UK, Saksa, Alankomaat, Ruotsi, Tanska, Belgia, Irlanti, Norja, Sveitsi, Viro, Espanja) luetellaan GET /api/terminology/editions -kohdassa, moduulien tunnisteita ei tarkisteta julkaistuun lähdekohtaan, joka on merkitty sellaiseksi; muutkin painokset tuodaan, ja ne nimetään moduulien mukaan.

ClaML-tiedostot luetaan UTF-8-, ISO-8859-1-, ISO-8859-15- tai Windows-1252-merkistöllä, kuten niiden XML-ilmukuvaus sanoo. Kunkin kategorian otsikko on sen suositeltu otsikko (sisältäen sisäkkäiset termit); muuntaja (esimerkiksi murtuman sijaintiin viittaava viides merkki) luo sille lisäkoodit, muuntajan otsikolla kategorian otsikon jälkeen, ellei kategoria estä sitä; blocks=true tuottaa luvut ja lohkot myös. ICD-11-luokittelun sarakkeet löydetään nimien perusteella, koska niiden järjestys on muuttunut julkaisujen välillä, ja yhdysmerkit, jotka osoittavat syvyyden, poistetaan otsikoista. Rajattu tiedosto edellyttää delimiter- (, ; | tai tab), encoding- ( utf-8, iso-8859-1, iso-8859-15, windows-1252) ja noHeader=true -arvoja, jolloin sarakkeet numeroidaan 1:stä alkaen. Konsolissa on asetukset UK ICD-10 5. painoksen ja OPCS-4-tiedostojen (TRUD) sekä Ranskan CIM-10 FR -tunnistetaulukon (ATIH) ja ICD-10-BE-vientien hallintaan; niiden kustantajat eivät aina dokumentoi sarakkeitaan, joten tarkistakaa ne tiedoston otsikkorivin kanssa.

Voimassaolopäivämäärät. effective=YYYY-MM-DD tuottaa version, jota käytetään kyseisestä päivästä alkaen (esim. ICD-10-GM joka vuosi 1. tammikuuta): siihen asti haku, joka ei mainitse versiota, vastataan jo voimassa olevalla versiolla, ja näytön päivämäärä näytetään.

ICD-11 WHO:sta. Asiakas on rekisteröity osoitteeseen icd.who.int (Asetukset → Data → Koodijärjestelmät, serve -icd11-client-id ja -icd11-client-secret; -icd11-release, oletusarvo 2025-01), ICD-11-koodit, joita ei ole tuotu, haetaan WHO ICD API:sta (codeinfo, sitten kohteen otsikko) ja säilytetään päivän ajan. Postkoordinoitu koodi (NC72.2&XK9K) tarkistetaan kokonaisuutena, joten ICD-11 ei salli yhdistelmää, ja sen näyttönimet kullekin osalle ("Reisiluun kaulan murtuma (oikea)").

ICD-11 ilman koodien lähettämistä. WHO julkaisee saman API:n säiliönä (whoicd/icd-api, ilmainen, Intel ja Arm). Suorita se omalla verkkoverkollasi ja anna osoite (serve -icd11-url http://icd-api.local, tai ICD API -osoite samassa asetuksissa); asiakasta ei tarvita eikä koodi poistu verkkoverkostasi. Testattu kyseisen säiliön kanssa (versio 2.6.0, julkaisu 2025-01 englanniksi ja ranskaksi).

7 Suodatus

Suodatin päättää, mitkä viestit kanava hyväksyy. Se on yksi lauseke kanavalla, joka arvioidaan viestin jälkeen, kun se on parsittu ja tallennettu, ennen kuin se muunnetaan.

filter: MSH-9.1 == "ADT" && MSH-9.2 in ("A01", "A03", "A08")

Viesti, jonka suodatin hylkää, merkitään tuloksella suodatettu. Tämä on normaali tulos, ei virhe, eikä se laukaise hälytystä tai tuota negatiivista vahvistusta.

7.1 Suodatettu ei ole epäonnistunut

Tämä ero on tärkeä, koska niiden sekoittaminen voi piilottaa oikean ongelman.

Suodatettu viesti oli oikein hylätty: se ei kuulunut tähän kanavaan. Epäonnistunut viesti oli sellainen, jonka kanava olisi pitänyt käsitellä, mutta ei voinut. Jos molemmat olisivat merkitty samalla tavalla, kanava, joka alkaa epäonnistua jokaisessa viestissä, näyttäisi täsmälleen samalta kuin kanava, joka suodattaa suurimman osan liikenteestään, mikä on monien kanavien normaali tila.

Niinpä tilastot laskevat ne erikseen, hälyttämissäännöt käsittelevät ne eri tavoin, ja käyttöliittymä näyttää ne eri väreissä. Suodatettujen viestien määrän kasvu saattaa tarkoittaa, että lähettäjä on alkanut lähettää jotain uutta; epäonnistumisten määrän kasvu tarkoittaa, että jotain on vikana.

7.2 Mitä suodatin voi lukea

Minkä tahansa kentän viestistä, samojen polkujen kautta kuin muunnokset käyttävät. Suodatin suoritetaan ennen muunnoksia, joten se näkee viestin sellaisenaan, kuin se saapui — ei sellaisena, kuin se lähetetään.

Tämä järjestys on tarkoituksenmukainen. Suodatin, joka lukee muunnosten jälkeisiä arvoja, päättäisi, hyväksytäänkö viesti muutosten perusteella, jotka tehtiin oletuksella, että viesti hyväksytään, mikä on kehäpäätelmä ja tuottaa kanavia, joiden käyttäytyminen riippuu kahden asian järjestyksestä, jotka näyttävät riippumattomilta.

7.3 Lausekkeet

Vertailut: ==, !=, ja luvuille <, <=, >, >=.

Jäsenyys: in ("A01", "A03"), joka on selkeämpää kuin ||-ketju ja on muodossa, jonka rakentaja tuottaa.

Yhdistäminen: &&, ||, ja sulkujen käyttö. Negation !-merkillä.

Puuttuminen: polku, jota ei ole, vertautuu epätasan arvoon, myös tyhjään merkkijonoon. Puuttumisen eksplisiittinen testaaminen edellyttää vertaamista absent-arvoon. Tämä on tärkeää, koska puuttuva kenttä ja tyhjä kenttä ovat eri asia, kuten muunnoksessa on kuvattu, ja suodatin, joka käsittelee ne samalla tavalla, hyväksyy viestejä, joita se oli tarkoitettu estämään.

7.4 Virhe suodattimessa on kieltäytyminen

Jos suodatin itse epäonnistuu arvionnan aikana — virheellinen lauseke, joka pääsi validoinnin ohi, tai vertailu, jota ei voida tehdä — viesti hylätään ja virhe merkitään sille.

Hylkääminen hyväksymisen sijaan on turvallisempi, mutta kumpikaan ei ole hyvä, ja tulos merkitään erikseen tavallisesta suodattimen hylkäyksestä, jotta se voidaan hälyttää. Suodatin, joka virheilee jokaisessa viestissä, pudottaa hiljaisesti koko syötteen, eikä se saa näyttää toimivalta suodattimelta.

7.5 Suodata lähde, missä voit

Suodatin suoritetaan viestin jälkeen, kun se on ylittänyt verkon ja parsittu. Jotkut lähteet voivat suodattaa aikaisemmin ja halvemmalla:

Suodattaminen lähdekohtaisesti on suorituskykyinen päätös, ei oikeellisuuspäätös, ja sillä on yksi kustannus: viesti, joka suodatetaan välittäjässä, ei koskaan merkitä Perfuseen, joten se ei näy viestivarastossa eikä sitä voida tarkastella myöhemmin. Jos tarvitset pystyä osoittamaan, mitä lähettäjä lähetti, suodata täällä sen sijaan, että siellä.

7.6 Suodattimen testaaminen

Suodatinta voidaan tarkastella todellista historiallista liikennettä vasten ennen sen tallentamista. Käyttöliittymä raportoi, montako viimeisen N tallennetun viestin suodatin hyväksyisi, hylkäisi ja virheellistäisi — mikä on nopein tapa selvittää, että lauseke, joka näyttää oikealta, hyväksyy mitään.

Jäljitys näyttää myös kunkin viestin kohdalla, mitä kenttiä suodatin lukee ja mitä arvoja se löytää. Suodatin, joka odottamattomasti hylkää kaiken, lukee yleensä polkua, jota ei ole tässä syötteessä, ja jäljitys nimeää sen.

8 Viestiformaatit

Kanavan dataType päättää, miten tavut muuttuvat viestiksi. Se vaikuttaa parsimiseen, mihin polut viittaavat, miten viesti kirjoitetaan takaisin ulos, ja mihin muunnokset ovat voimassa.

ArvoMuoto
hl7HL7 v2, pilkuilla eroteltu standardi. Oletus.
hl7v3HL7 v3 ja CDA-dokumentit, jotka ovat XML:ää.
x12ASC X12, jota käytetään oikeutuksen ja korvausten tarkastamiseen.
ncpdpNCPDP Telecommunication Standard D.0 -apotekkilaskut.
scriptNCPDP SCRIPT, sähköiset reseptit. XML.
dicomDICOM-kuvat.
delimitedCSV ja muut erotellut tekstit.
rawEi parsita. Bittit sisään, bittit ulos.

8.1 HL7 v2

Oletus, ja mitä suurin osa tämän manuaalin esimerkeistä käyttää. Segmentit päättyvät rivinvaihtoon, kentät |:iin, komponentit ^:iin, toistot ~:iin.

Kaksi asiaa koodauksesta on tiedettävä, koska ne aiheuttavat hiljaisia virheitä.

Eroittimet eivät ole kiinteitä. Ne määritellään kunkin viestin MSH-1- ja MSH-2-kentissä, ja Perfuse lukee ne sieltä oletuksen sijaan. Lähettäjä, joka käyttää eri kenttäerotinta, parsitaan oikein.

Seuraamus on, että viestin, jonka erottimet on korvattu — useimmiten jonkin sanakäsittelyohjelman tai sähköpostiohjelman korvatessa typografiset näköisleikkauset — käsittely on täysin oikein kenttiin, jotka ovat kaikki väärät. Mitään virheitä ei ilmene. Tästä syystä testing-kohdassa kuvattu esimerkki lukija ilmoittaa, mikä erottinmerkki se löysi, ja kieltäytyy ilmaisemasta varmuutta, kun se on epätavallinen.

Kun joku lähettää sinulle näytteen ja kanava, joka on rakennettu siitä, tuottaa hölynpölyä, tarkista erotinmerkit ennen kuin teet mitään muuta. Pyydä liitetiedostoa, joka on pelkkää tekstinä, sen sijaan, että viesti liitetään sähköpostin runkoon.

8.2 HL7 v3 ja CDA

XML:ää sijaan eroteltu. Polut ovat elementti- ja attribuuttipolkuja eikä kenttäkohtaisia.

V3:ssa arvo on lähes aina attribuutti eikä elementin teksti. Vertailu, joka lukee vain elementin tekstin, raportoi kaksi dokumenttia samanlaisiksi, vaikka syntymäpäivä, sukupuoli ja jokainen tunniste eroavat. Perfusen vertailu lukee molemmat, ja tämän vuoksi: vaihtoehto onnistuu hiljaisesti.

hl7v3-vaihtoehdot ovat kohdassa muotoilureferenssi.

8.3 X12

Segmentit päättyvät ~-merkkiin perinteisesti, ja erotinmerkit määritellään ISA-segmentissä. Kuten HL7:ssä, ne luetaan viestistä oletuksen sijaan.

X12:n rakenne on kirjekuoria kirjeissä — vaihto, toiminnallinen ryhmä, transaktioryhmä — ja yksi vaihto voi sisältää useita transaktioita.

Oletuksena vaihto on yksi viesti. Koko tiedosto saa yhden rivin, yhden tuloksen ja yhden rivin rajapinnassa, riippumatta siitä, montako transaktiota se sisältää.

8.3.1 Mirthin X12-XML

Mirth Connect ja Open Integration Engine näyttävät X12-XML-muodossa: juurielementti X12Transaction (tai EDIMessage, kun syöte ei ala ISA:lla) sisältää erottimina attribuutteja ja yhden elementin kunkin segmentin ja elementin nimellä ISA.01, NM1.03.1 jne. Kanavat ja vastaanottimet, jotka on rakennettu Mirthille, lukevat ja kirjoittavat tämän muodon. Perfuse lukee ja kirjoittaa saman muodon:

Muoto on kirjoitettu Open Integration Engine 4.6:n havaitun tulosteen ja julkaisemun perusteella, ja se on tarkistettu sen kanssa: 25 luotua vaihtoa ja 4 säilytettyä esimerkkiä tulevat bitti bittiin niin kuin OIE kirjoittaa ne, ja takaisin (ks. vahvistus). DOCTYPE -kieltäydytään, kuten kaikki XML, jonka Perfuse lukee.

8.3.2 Vaihdon jakaminen

Asetus split tekee kustakin transaktioryhmästä oman viestin, jolla on oma tietue, oma mittari ja oma rivi. Operaattori, joka etsii yhtä korvausta, löytää yhden korvauksen sen sijaan, että hän löytäisi tiedoston, joka sisältää neljäsataa.

Se on oletuksena pois, koska sen käyttöönotto moninkertaistaa kaiken alirakenteen — viestimäärät, rivit, hälytyskynnykset — ja kynnys, joka on säädetty tiedostoille, ei tarkoita enää sitä, mitä se aiemmin tarkoitti. Se pitäisi olla joku, joka on tehty, eikä oletus, joka on peritty.

split ja acknowledge eivät voi olla molemmat asetettuina, ja kanava, jossa molemmat ovat asetettuina, hylätään latauksessa. Vahvistus on lausuma koko vaihdosta, joten jakaminen lähettäisi yhden kunkin transaktioryhmän kohdalla, ja kumppani, joka vastaanottaa useita 999:ia, jotka nimeävät saman toiminnallisen ryhmän, ei voi sovittaa niitä.

8.3.3 Kun määrät eivät täsmää

X12 ilmoittaa oman määränsä — montako segmenttiä, montako transaktiota — ja envelope-avain kertoo, mitä tehdä, kun ne eroavat siitä, mitä on todella läsnä. Nämä määrät ovat ainoa mekanismi, jonka X12:lla on havaitsemaan, että puoli korvaustiedostosta on saapunut.

ArvoKäyttäytyminen
requireHylkää vaihto. Oletus.
warnProsessoi se, ja merkitse virhe viestiin.
ignoreÄlä tarkista lainkaan.

warn on olemassa todellisessa tilanteessa: joillakin kumppaneilla on ollut virheellisiä määriä vuosia muuten täydellisissä tiedostoissa, ja sivuston, joka on pakotettu prosessoimaan niitä, tarvitsee tavan sanoa se ääneen konfiguraatiossa sen sijaan, että kokonaan poistettaisiin validointi.

ignore on nimetty epämukavaksi. Sen asettaminen heittää pois ainoan X12:n antaman keinon huomata katkaistu tiedosto, ja katkaistu korvaustiedosto on erottamaton pienestä tiedostosta.

8.3.4 Transaktiot, joita Perfuse lukee rakenteellisina tietoina

Mikä tahansa X12-vaihto voidaan reitittää, suodattaa ja osoittaa polun perusteella. Nämä transaktiot parsitaan myös nimetyiksi kentiksi, joten kanava voi kysyä, mitä maksaja päätti, sen sijaan, että mikä elementti on sijalla neljä.

TransaktioMitä se sisältää
835Maksuvihje: mitä maksettiin, mitä evättiin ja mukautusperusteet.
275Väitteiden liitteet: kliininen asiakirjat, jotka tukevat väitettä.
277Väitteen tila, mukaan lukien maksajan pyynnön lisätodistuksista.
278Ennakkohyväksyntä: pyynnön tarkastelu ja maksajan päätös.
999Toiminnallinen vahvistus, jonka Perfuse myös luo.
271Oikeutus: onko potilas kattavuudessa, ja hänen omavastuu-, vakuutus-, vähennys- ja ulkoverojensa määrät, verkossa ja verkoston ulkopuolella.
834Rekisteröinti: jäsenet lisätty, muutettu ja lopetettu, kunkin kattavuuslinjan ja sen päivämäärän kanssa.
837Väitteet, ammatilliset ja laitokselliset (lue CMS-0057:n CARIN-muunnos).

Perfuse luo myös 270 -kelpoisuuskyselyn ja 276 -vastineen tilan pyynnön Payers → Claims & auth -kohdassa tai POST /api/x12/eligibility/build - ja /api/x12/claimstatus/build -kautta. Molemmat ovat HIPAA 5010 -versioita (005010X279A1, 005010X212), ja ne luetaan ja tarkistetaan kirjekuorella ennen kuin ne näytetään, eikä kumpaakaan lähetetä suoraan sivulta: toimittaminen on kanavan tehtävä, jossa on mukana kauppatuttava ja sen tunnistetiedot.

8.3.5 Oikeutus ja CAQH CORE -tietosisällön sääntö

271 on luettelo EB-segmenteistä, joista kunkin muodostaa yksittäinen tosiasia: aktiivinen kattavuus, 30 tyypin palvelun 25 dollarin omavastuuvero verkossa tai 800 dollarin jäljellä oleva yksilöllinen vakuutusmaksu verkossa. Lukija kokoaa ne yhteen etukäteen halutun vastauksen - "kattavuus aktiivinen Gold PPO 2000; omavastuuvero verkossa 25 dollaria; yksilöllinen vakuutusmaksu verkossa 800 dollaria" - ja nimeää hylkäyksen (AAA-segmentti) sanallisesti, kertoen, mitä maksaja sanoo tehtäväksi seuraavaksi.

Se tarkistaa myös vastauksen CAQH CORE -kelpoisuus- ja hyödykekoostosäännön mukaan: terveydenhuollon hyödykevakuutuksen kattavuuskyselyssä (palvelutyyppi 30) aktiivinen vastaus tulisi sisältää suunnitelman päivämäärät, suunnitelman nimen, omavastuuveron, vakuutusmaksun, vakuutusmaksun ja jäljellä olevan vakuutusmaksun sekä perussuunnitelman tyypit (1, 33, 35, 47, 48, 50, 86, 88, 98, AL, MH, UC) sekä verkossa ja verkoston ulkopuolella. Kunkin kohdalla ilmoitetaan, onko se täyttynyt vai puuttuu. Tämä on Perfusen tulkinta säännöstä, ja se on hyödyllinen kysymyksiin siitä, miksi maksaja ei koskaan kerro meille vakuutusmaksua - se ei ole CAQH:n sertifikaatti, jonka CAQH:n valtuutetut testaajat suorittavat.

8.3.6 Ennakkohyväksyntä

Perfuse toteuttaa ennakkohyväksynnän kahdesti, tarkoituksella.

FHIR-puoli on se, mitä CMS-0057-F edellyttää maksajilta 1. tammikuuta 2027 mennessä. 278 on se, mitä maksajat hyväksyvät tänään, ja sääntö ei korvaa sitä — Da Vinci PAS on käytännössä tämän transaktion kartoitus, koska 278 on se, mitä hyödyntämisen hallintajärjestelmä puhuu. Moottori, joka lukee vain FHIR-puolen, voi puhua järjestelmien kanssa, jotka tulevat olemaan ja ei niiden kanssa, jotka ovat.

278 -vastaus sisältää lupanumeron, ja se on kenttä, jonka vuoksi koko transaktio on olemassa. Ilman sitä sertifioitu palvelu ei ole laskutettavissa: vaatimus lähetetään ilman lupanumeroa ja se hylätään lupanumeron puutteen vuoksi, mikä tulkitaan alavirrassa kliinisesti perustelluksi hylkäykseksi.

Eväätys ja kieltäytyminen eivät ole sama asia

Tämä on kallein sekaannus transaktiossa, ja Perfuse raportoi ne erikseen.

Mitä saapuiMitä se tarkoittaaMitä tehdä
HCR toiminnolla A3Maksaja tarkasteli pyynnön ja ei hyväksy sitä.Valitse, tai muuta hoitosuunnitelmaa.
AAA-segmenttiMaksaja ei tarkastellut sitä — potilas ei löydy, pyytäjä ei tunnista, tarkastelu ei kuulu. Mitään ei päätetty.Korjaa pyyntö ja lähetä se uudelleen.

Molemmat näyttävät "hyväksymättömiltä" kenelle tahansa skannattaessa, ja oikeat toimet ovat vastakkaiset. Valittaminen asiasta, josta kukaan ei ole päättnyt, ei johtaa mihinkään; hylkäyksen uudelleenlähettäminen tuottaa saman hylkäyksen. Parsitun tuloksen nimet, jotka tapahtuivat — denied vastaan not-considered — ja AAA04 sisältää maksajan oman neuvon siitä, onko pyyntö kokonaan palautettavissa.

Osittainen sertifiointi ilmoitetaan partially-certified -arvona eikä se sisälly hyväksyntään. On olemassa laskutuslupanumero, joten se lasketaan hyväksytyksi, mutta sertifioitu määrä ei ole pyydetyssä määrässä — ja käytäntö, joka varaa kuusi istuntoa kolmen hyväksytyn vastaan, huomaa sen neljännen vaatimuksen kohdalla.

Perfuse ei tunnusta toimintakoodia, joka ilmoitetaan unknown -arvona, ei odottavana. Odottava näyttää "odota", ja odottaminen on väärä toimi useimmiten tunnistamattomalle koodille.

Kanava voi reitittää päätöksen suoraan:

filter: HCR-1 == "A3"

Muunnos näiden kahden välillä

Perfuse muuntaa parsitetun 278:n Da Vinci PAS ClaimResponse -muotoon, ja raportoi jokaisen tuomion, jota muunnos tarvitsi, eikä vain tulosta. Muunnos noudattaa kolmea sääntöä:

Kapeentaminen kolmeen tilaan — hyväksytty, hylätty, odottava — on saatavilla ja selkeä siitä, mitä se hylkää. Hylätyksi tulemisen kapeentaminen tuottaa "hylätty" ja sanoo sanoilla, että oikea toimenpide on korjattu uudelleenlähettäminen sen sijaan, että valittaisiin.

Tarkistettu PAS 2.2.1:aa vastaan, ei vain itseään vastaan

ClaimResponse on muotoiltu Da Vinci PAS 2.2.1 -profiilin mukaiseksi ja se on tarkistettu virallisella HL7 -validoijalla, joka on ladattu julkaistulla PAS -pakettilla. Ensimmäinen versio oli tarkistettu vain Perfusen omilla testeillä, ja validoija hylkäsi sen kuudella tai kahdeksalla virheellä kunkin resurssin kohdalla. Jokainen niistä on jotain, mitä maksajan PAS -päätepiste myös hylkäisi:

Mitä oli vikanaMihin PAS laittaa sen
Päätös oli adjudication.category ja reason -kohtaa.reviewAction -laajennus, jonka kategoria on submitted.
Syykoodi nimeltä X12-elementti 1034.X12:n ulkoinen koodiluettelo 886.
Pidätetty pyyntö vastasi outcome: queued.outcome liittyy prosessointiin, ja PAS sallii vain complete, error ja partial. Pidätys on complete, jonka tarkastelutoimenpiiri on A4.
processNote.type oli CodeableConcept.R4:ssä on koodi: print.
patient, created, insurer ja request puuttuivat.Kaikki neljä ovat pakollisia. Ne annetaan tunnisteviittauksina, koska vastaus on itsenäinen eikä siltä löydy pakettia.

Korjattu tuloste validoi ilman virheitä sertifioinnille, hylkäykselle ja pysäytykselle. Jäljelle jäävät varoitukset ovat validatorin sanoma, ettei se voi ladata X12:n koodijärjestelmiä, joita X12 lisensoi. Laskutuslupanumero kulkee reviewAction.number -kentässä, missä oppaan oma esimerkki laittaa sen, ja preAuthRef -kentässä, kun vastauksessa on vain yksi.

Validoija ei ole osa make check -komentoa, koska sille tarvitaan Java ja oppaan sekä sen riippuvuuksien lataus. Se, mitä se löysi, on testin hallussa: jokainen sääntö, jonka se pakotti, on vahvistettu, joten muutos, joka palauttaa yhden niistä virheistä, epäonnistuu.

Väitteet ja valtuutukset -näkymä muuttaa liimatun 278 -tiedon ja näyttää päätökset, muistiinpanot ja resurssin.

8.3.7 Liitteet ja miksi niiden käsittely vaatii erityishoitoa

CMS-0053-F tekee 275 -tiedosta HIPAA -standardin vaatimuksille, ja siitä on oltava complianssi 26. toukokuuta 2028 mennessä. Se sisältää asiakirjan — toimintakertomuksen, kuvantamisraportin, skannatun lomakkeen —, joka on kytketty vaatimukseen, jonka se tukee.

277 on keskustelun toinen puoli. Maksaja vastaanottaa vaatimuksen, päättää, että sille tarvitaan asiakirjaa, ja lähettää 277 -pyynnön asiakirjasta; toimija vastaa 275 -tiedolla.

Kanava voi reitittää tilakoodin suoraan, koska STC01 on yhdistetty ja sen toinen komponentti on tila. Kirjoitettu kanoniseen muotoon, koska komponenttia osoitetaan pisteellä ja kahta notaatiota ei voida sekoittaa — STC-1.2 on elementti 1, komponentti 2:

filter: STC-1.2 in ("227", "233", "252", "287")

Nuo ovat koodit, jotka tarkoittavat yksiselitteisesti, että asiakirjaa halutaan. Tilakategoria STC-1.1: ssä ei käytetä yksinään: R4 tarkoittaa asiakirjapyynnön joissakin toteutusoppaissa ja "esiinlähetetty toisaalle" toisissa, joten suodatin kategoriassa yksinään laittaisi lopulliset vaatimukset jonkun jonoon, jotta joku voisi tarkastella niitä.

Kaksi tunnistetta päättää, liitetäänkö liite koskaan vaatimukseensa, ja molemmat ilmoitetaan: liiteohjausnumero, jonka toimija on laittanut alkuperäiseen vaatimukseen, jotta se ilmoittaisi, että asiakirjaa seuraa, ja jäljitysnumero, joka vastaa maksajan pyyntöä. Liite, joka saapuu kummankaan ilman, tallennetaan ja ei koskaan liitetä mihinkään, kun taas vaatimus vanhenee.

Asiakirja 275 -tiedossa ei tulkita. Perfuse ilmoittaa sen bittien ja sen, mitä lähettäjä sanoo niiden olevan. Liite voi olla PDF, TIFF, CDA -dokumentti tai HL7 -viesti, ja kanava, joka tarvitsee sisältöä, voi antaa nämä bittit muodolle, joka lukee sen.

006020 -lomake, joka on sääntö, jota otetaan käyttöön

CMS-0053-F ottaa käyttöön version 006020, ja sen 275 eroaa 005010 -lomakkeesta kahdella tavalla, jotka ovat merkittäviä.

Perfuse purkaa kohteen ja raportoi asiakirjan sisällön, sen sisältötyypin ja tiedostonimen. Raportoidut tavut ovat täsmälleen ne, jotka lähettäjä on käärittänyt. Kohteet, joita ei voida purkaa, jättävät raakapaketin paikalleen ja ilmoittavat syyn.

Rakentaminen 275. Perfuse myös rakentaa 006020X314 -liitteitä: joko vapaaehtoista liitettä, joka seuraa vaatimusta, tai vastausta maksajalle 277 -pyynnöstä. Ero on BGN01 02 vastaan 11, ja siinä, kantavatko TRN02 vaatimuksen PWK06 vai 277: n TRN02. Jokainen rakennettu vaihto puretaan takaisin ennen kuin se palautetaan, ja vastaus kertoo, onko asiakirjan sisällä se, joka meni sisään.

Rakenne tulee kahdesta julkaistusta ohjeesta 006020X314: CMS esMD -oppaasta ja UnitedHealthcare -oppaasta. Se ei tule X12 -teknisestä raportista, jota X12 lisensoi, ja jota tämä projekti ei omista.

Todennus teknisen raportin vastaisuutta ei ole. Kumppanin ohje ohjaa.

8.3.8 Sähköiset allekirjoitukset liitteissä

CMS-0053-F ottaa myös allekirjoitusstandardin käyttöön 45 CFR 162.2002 (e): HL7 -toteutusopas CDA -julkaisu 2, digitaaliset allekirjoitukset ja oikeuksien delegointi, julkaisu 1. Se koskee allekirjoituksia, jotka laitetaan liitteiden tietoihin, kun ne lähetetään HIPAA -liitännäisissä, 26. toukokuuta 2028 alkaen. Maksaja ei voi pyytää enempää kuin opas tekee.

Perfuse allekirjoittaa C-CDA: n samalla tavalla sen sisäänmenoon 275: ssä ja tarkistaa allekirjoitukset jokaisessa C-CDA: ssä 275: ssä, jonka se lukee.

Jos jokin niistä on käytettävissä, allekirjoitus tehdään ja se pitää. Tulos nimeää XAdES -muodon, jonka se saavutti, ja kertoo, mikä esti sen saavuttamasta X-L: ää: esimerkiksi itse allekirjoitettu varmenne (ei CA: ta pyydä) tai ei aikaleima-auktoriteettia.

Avain on -signing-cert ja -signing-key. Laita CA -varmenteet allekirjoittajan jälkeen samassa tiedostossa, jotta polku kulkee allekirjoituksen mukana. Allekirjoitukselle, joka tarkoittaa DSDR: ää, varmenne pitäisi nimetä klinikoitsija, heidän NPI: nsä kanssa, eikä palvelinta. Allekirjoittaminen on hallinnollinen toimi, kuten minkä tahansa asiakirjan allekirjoittaminen.

Oppaassa ei mainita nimeämistilaa omille elementeille. Perfuse laittaa digitalSignature, authorizedSigner ja SignaturePurpose urn:hl7-org:sdtc -nimeämistilaan. Se ilmoittaa myös tarkoituksen XAdESsitoumustyypinä ASTM OID:llä, jota XAdES-työkalut ymmärtävät. Oikeuksien delegointi, jossa edustaja allekirjoittaa SAML-vakuutuksella valtuutetun allekirjoittajan toimesta, ei tuoteta, ja vastaanotettu ilmoitetaan vahvistamattomaksi.

Tarjoajan NPI tarkistetaan sen tarkistusmerkkiä vastaan. Maksaja vastaa liitettä vaatimukseen osittain sen numeron perusteella, ja virheellinen numero jättää liitteen vastaamattomaksi, kun taas vaatimus hylätään puuttuvan dokumentaation vuoksi.

Näkymä Vaatimukset ja todennus luo 275: n liittäen C-CDA: n tai ladatun tiedoston, valinnaisesti allekirjoittaen C-CDA: n, ja lukee yhden takaisin jokaisen allekirjoituksen löydöksillä. Mitään sivulla ei lähetetä mitään: vaihto käännetään takaisin toimittamaan kanavan kautta, jossa on kumppani, tunnistetiedot ja audit-reitti.

8.3.9 Binäärisegmentit

BIN-segmentti sisältää raaka bitejä, ja raaka biteissä on erottimia. Jokainen muu X12-segmentti päättyy segmentin päättymiseen, joten tavallinen parseri löytää segmentit etsimällä yhtä merkkiä; liitetiedostoa ei voida löytää sillä tavoin. PDF-tiedosto, joka sisältää ~-merkin, katkeaa palasiin, ja kunkin palasen muodostaa rakenteellisesti validin segmentin — niin asiakirja katkeaa, jokainen segmentti siitä eteenpäin on epäkohdennettu, eikä mikään raportoi virhettä.

Perfuse lukee segmentin ilmoittaman tavumäärän ja ottaa täsmälleen niin monta tavua. Kaksi seurausta, jotka ovat tiedostettavissa:

EsMD-opaan oman näytevaihdon ilmoittaa 16 tavua samalle 53-tavuiselle payloadille, jota sen taulukko laskee oikein 53: ksi. Perfuse hylkää tämän näytteen, kuten se pitääkin. Testi pitää sekä taulukon esimerkin että näytteen kirjoitusvirheen, joten muutos kummassakin suunnassa huomataan.

8.4 FHIR

8.4.1 Mikä HL7 v2 -viesti muuttuu

Viestityyppi päättää, mitä tuotetaan, ja jokainen muunnos raportoi tarvittavat arviot muistiinpanoina paketin vieressä.

v2FHIR
ADTPotilas, tapaamisella vastaava kohtaaminen, ehdotettu tila kullekin DG1-diagnoosille (myös luettelo kohtaamisen diagnosis-kohdassa, sisääntullessa AD), toimenpide kullekin PR1:lle ja yliherkkyysohje kullekin AL1:lle. A28, A31, A29 ja A24 liittyvät henkilöön, joten ne eivät tuota kohtaamista tai diagnooseja, mutta niissä on mukana yliherkkyysohjeita.
ORUDiagnostiikkaraportti kullekin OBR:lle, sen havaintojen ja näytteenottajan kanssa, ja vastaus tilauksesta palvelupyyntönä (pyynnön tekijä OBR-16 tai ORC-12, tila ORC-5); OBR-32 on tulkitseva tulkitsija, OBR-34 ja OBR-35 suorittajat. Tulokset ryhmitellään OBR:n mukaan niiden eturivissä, koska OBX-4 ei ole luotettava.
ORM, OML, OMGPalvelupyyntö.
SIUAjanvaraus, potilaan, toimijoiden AIP:n mukaan ja sijaintien AIL:n mukaan.
MDMDokumenttiviesti, joka sisältää asiakirjan.
VXUImmunisointi, yksi kullekin RXA:lle.

Kaikki muu tuottaa potilaan ja varoituksen, jossa mainitaan viestityyppi, jota ei ole kartoitettu.

Ajanvaraus. Varaus, uudelleenvaraus, peruutus ja no-show kaikki päätyvät samaan ajanvaraukseen. Sen identiteetti tulee ajanvarauksen omista numeroista SCH-1: ssä ja SCH-2: ssä, ei koskaan viestistä, joten peruutus päivittää varauksen. Vaihtoehto olisi toinen, peruutettu ajanvaraus live-ajanvarauksen rinnalla, joka näyttää potilaan varanneen aikaslotin, joka ei enää ole olemassa.

Asiakirjat. Tekstin muistiinpanot (TX, FT, ST) säilyttävät rivivälinsä, myös tyhjät rivit, koska tyhjä toisto muistiinpanossa on kappaleväliraja.

Tämä on se, mitä CMS Interoperability Framework -kriteeri 14 pyytää: kaavion muistiinpanot ja kliiniset asiakirjat palautetaan FHIR-liitteinä.

Rokotukset. Annos ei koskaan ilmoiteta annetuksi, kun viesti sanoo toisin.

Hankalat syötteet. Kukin näistä ilmoitetaan muistiinpanoissa sen sijaan, että ne päätettäisiin hiljaisesti:

8.4.2 Mikä sivusto lisää: nipun skripti

Kansallinen profiili usein haluaa, mitä HL7 v2 -viesti ei sisällä: sairaalan IK-numero tai ODS-koodi, mikä on kontaktitason vierailu (ISiK), onko annettu nimi etunimi vai alkukirjain (hollantilainen nl-core). Perfuse ei arva näitä. fhir-kohdepaikan bundle_script on, missä sivusto kirjoittaa ne: JavaScript, jota suoritetaan kullekin muunnetulle Bundlelle, bundle-nimisenä, ennen kuin se validoidaan ja lähetetään. Mitä skripti jättää, se menee ulos, tarkistettuna kuten mikä tahansa muunnos, ja skripti, joka heittää poikkeuksen, epäonnistuu viestin käsittelyssä kuten mikä tahansa muunnin. Konsolissa se on kohdepaikan *Lisää, mitä järjestelmäsi tietää* -kohtaa alla.

destinations:
  - name: kis
    type: fhir
    fhir:
      url: https://fhir.klinikum.example/fhir
      version: "4.0.1"
      identifier_systems: {KLINIKUM-MUSTERSTADT: "https://fhir.klinikum-musterstadt.example/sid/patientennummer"}
      bundle_script: |
        bundle.entry.forEach(function (e) {
          if (e.resource.resourceType === "Organization" && e.resource.name === "KLINIKUM-MUSTERSTADT") {
            e.resource.identifier = [{system: "http://fhir.de/sid/arge-ik/iknr", value: "260326822"}];
          }
        });

perfuse fhir convert -bundle-script FILE runs the same script, so a site can try it on its own messages first. Two worked examples are in the repository: examples/isik/bundle-script.js (IKNR, Kontaktebene, MR-typed patient number, Diagnosetyp) and examples/nictiz/bundle-script.js (first names and initials). With them the invented German and Dutch messages in conformance/national go from 18 to 42 of 47 resources valid against ISiK and from 12 to 18 of 24 against nl-core; what is left is in the messages or the terminology server, and is listed there.

Nippu menee Perfusen mallin läpi palatessaan, joten skriptin muutokset tarkistetaan ja kirjataan kohdepaikan FHIR-versioon. Jäseniä, joilla malli ei ole kenttää, säilytetään sellaisena, jollaisena skripti ne kirjoitti, myös tietotyyppien sisällä.

8.4.3 US Core 9.0.0 ja USCDI v6

-us-core (ja claim_us_core fhir-kohdepaikassa) asettaa US Core -profiilin meta.profile-kenttään, mutta vain resursseille, jotka on tarkistettu kyseisen profiilin vastaisuutta ja havaittu täyttävän sen vaatimukset. Resursseja, jotka eivät täytä vaatimuksia, muunnetaan ja lähetetään ilman vaatimusten täyttymistä, ja huomautus ilmoittaa syyn, kuten "US Core vaatii kohtaamisen tyypin, mutta tämä kohtaaminen ei sellaista sisällä". Tarkistukset on transkriboitu US Core 9.0.0:sta, jonka ONC:n 2026 Standards Version Advancement Process on hyväksynyt USCDI v6:lle. Ne kattavat Potilaan, Kohtaamisen, laboratoriotutkimuksen Havainto ja Diagnostiikkiraportti, Näyte, Toimija, Organisaatio, Sijainti, Rokotus, Asiakirjaviranomainen, kohtaamisdiagnoosi ja Yliherkkyys.

Mitä muunnin sisältää USCDI v6 -dataluokan mukaan:

USCDI v6MistäMissä
PotilastiedotPIDNimi, syntymäaika, sukupuoli, osoite, puhelin- ja sähköposti, tunnistimet. Rotu ja etnisyys (PID-10, PID-22) US Core -laajennuksissa, kun ne on koodattu CDC Rotu- ja etnisyysjärjestelmässä. Ensisijainen kieli (PID-15) BCP 47 -muodossa
KohtaamistiedotPV1Kohtaaminen tyypillä, luokalla, ajalla, sijainnilla ja osallistujilla
SairaalatiedotPV1-3Sijainti, jossa sairaala on hallinnoiva organisaatio
Ongelmat, alkamispäivämääräDG1Ehto (kohtaamisdiagnoosi). DG1-5 on alkamispäivämäärä, kuten HL7 v2-FHIR-kartoitus on
Kaikki yliherkkyys- ja intoleranssit, reaktioAL1Yliherkkyys-intoleranssi kategorialla, kriittisyydellä ja reaktiolla
LaboratorioORUDiagnostiikkaraportti, havainnot, näyte (SPM:stä), palvelupyyntö
TilauksetORM, OMLPalvelupyyntö
RokotuksetVXURokotus
Kliiniset muistiinpanotMDMAsiakirjanviite
Hoitotiimin jäsenetPV1, TXA, DG1Toimija

Ei siirretä, koska v2-viestit näistä tyypeistä eivät sisällä niitä tai Perfuse ei kartoita niitä: Lääkkeet, Toimenpiteet, Tavoitteet ja Preferenssit, Terveystilan arviot, Hoitosuunnitelma, Perheen terveyden historia, Lääkinnälliset laitteet (UDI), Terveydenhuollon vakuutustiedot, Elintoimintojen seuranta erillisenä profiilina ja Provenienssi.

8.4.4 R4 molempiin suuntiin

FHIR-palvelin, joka ilmoittaa R4:n, hyväksyy R4:n. Tämä ei ollut totta Kohtaamisille asti tähän julkaisuun. Palvelin muunsi sen, mitä se palveli, R4:ksi, mutta luki sen, mitä se vastaanotti, ikään kuin se olisi jo sisäisessä muodossaan, joten R4 Kohtaaminen hylättiin virheellä 400. Samoin hylättiin jokainen paketti, jonka Perfuse:n oma ADT-muunnos tuotti, koska jokainen sisälsi Encounter.class:n, jonka R4 kirjoittaa yhtenä koodauksena.

Se havaittiin ensimmäisen kerran, kun joku lähetti muunnetun ADT:n Perfuse:n omaan R4-palvelimeen. Testi tekee nyt tämän jokaiselle kartoitetulle viestityypille, ja toinen tarkistaa, että kaikki, mitä kirjoitetaan R4:ksi, luetaan takaisin muuttumattomana.

8.4.5 Kansainvälinen potilaskatsaus

GET /fhir/Patient/{id}/$summary tai GET /fhir/Patient/$summary?identifier=system|value palauttaa Kansainvälisen potilasyleiskatsauksen (HL7 IPS 2.0.0): FHIR document-pakkauksen, jonka Composition luettelee potilaan aktiiviset ongelmat, allergiat, lääkkeet, immunisoinnit, tulokset, elintoimintojen seuranta, toimenpiteet, laitteet, menneet sairaudet, sosiaalinen historia ja hoitosuunnitelmat, kussakin on luettava kertomus. Se on lyhyt tietue, jonka kliinikko, joka ei ole koskaan tavannut potilasta, lukee ensin, ja se on yleiskatsaus, jonka Euroopan terveydenhuollon tietotila vaihtaa maiden välillä vuodesta 2029 alkaen.

Se rakennetaan siitä, mitä FHIR-kauppa sisältää, ja mitään ei keksitä:

Access follows $everything: a token limited to one patient gets a 403 for another, and an identifier that matches two patients is refused rather than guessed. Only the IPS profile is built; asking for another profile is refused. The document Perfuse produces from its test records validates against the IPS 2.0.0 Bundle profile with the HL7 validator, with no errors. A record built from real feeds can still fail where the feed's own codes do (a display name the code system does not use, for example), because the summary passes the data on as it was received.

Vaihda → Terveydenhuollon linkit → Jaa täyttää sisällön potilaan yleiskatsauksella: kirjoita potilaan FHIR-tunniste ja valitse Käytä potilaan yleiskatsausta, sitten lue se ja luo linkki. Sen rakentaminen auditioidaan fhir.summary-muodossa.

8.4.6 Siirtoyhteenvetoja jälkeenhoitoon (PACIO)

Kun potilas lähtee sairaalasta hoitokotiin, kuntoutusyksikköön tai kotihoitoon, sairaalan EHR lähettää C-CDA:n: siirtokatsauksen, lähtökatsauksen tai CCD:n. Perfuse muuttaa tämän asiakirjan PACIO:n siirtokatsauksen ohjeen kuvaamaksi siirtokatsaukseksi (hl7.fhir.us.pacio-toc 1.0.0): yksi FHIR R4 document -paketti, jossa on US Core 8.0.1, jonka vastaanottavan laitoksen järjestelmä voi tallentaa ilman, että kukaan lukisi XML:ää.

Kolme tapaa tehdä yksi:

Bundle endpoint (url), or writes <document>.transfer.json to dir. In the channel builder: Emit › A PACIO transfer summary.

Tarkistettu virallisen FHIR-vahvistimen kanssa TOC 1.0.0 Bundle-profiilia vasten, HL7:n omia C-CDA-esimerkkejä (siirtoyhteenveto, lähtöyhteenveto ja CCD). Yksi virhe, jonka se ilmoittaa, on oppaassa: jokainen elintarpeet vastaa sekä simple-observation- että vital-signs-Bundle-kohtia, joten se ei voi välttää lähetettävänä. Ei vielä tehty: teksti-kohdien muuttaminen koodatuksi resursseiksi (toimintakyky, mielentila, hoitosuunnitelma, laitteet) ja oppaan TOC DocumentReference, joka indeksoi tallennetun siirtoyhteenveto.

8.4.7 Tilaukset

-fhir-subscriptions-valinnan kanssa FHIR-päätepiste lähettää ilmoituksia, kun Kohtaaminen tai Ajanvaraus luodaan tai muutetaan. Se noudattaa FHIR Subscriptions R5 Backport IG for R4:ää, jota CMS Interoperability Framework -kriteeri 15 ja TEFCA:n FHIR-tiekartta käyttävät ajanvaraus- ja kohtaamisilmoituksissa.

Asiakas luo Subscription-nimisen aiheen ja valinnaisen suodattimen, kuten Encounter?patient=Patient/123. Aiheet on lueteltu kykyilmoituksessa:

TopicFires onFilters
https://perfuse.health/fhir/SubscriptionTopic/encounterEncounter created or updatedpatient, status, class
https://perfuse.health/fhir/SubscriptionTopic/appointmentAppointment created or updatedpatient, status

Suodatin, joka nimeää jotain muuta, hylätään, ei ohiteta. Ohitettu suodatin on tilaus, joka ilmoittaa jokaisesta potilaasta, kun asiakas pyysi yhdestä.

Toteutuksen perustuvat ominaisuudet:

Mikä asiakas voi tehdä palvelimelle, on tarkoituksella rajoitettu:

Se on pois, ellei sitä pyydetä, koska kun se on päällä, FHIR-asiakas voi tehdä tämän palvelimen lähettämään potilastietoja URL-osoitteeseen, jonka asiakas on valinnut. Sille tarvitaan R4-päätepiste, joka hyväksyy kirjoitukset, ja se kieltäytyy käynnistymästä muuten.

Toteutukseltaan puuttuu, joten kukaan ei tarvitse selvittää sitä kokeilemalla:

Tilausnäkymä näyttää kunkin tilauksen aiheen, suodattimen ja päätepisteen, montako tapahtumaa siinä on ollut, montako niistä on hyväksytty ja montako odottaa, ja viimeisen syyn, miksi se hylättiin. Otsikkoarvoja ja päätepisteen kyselymerkkijonoa ei paljasteta, koska siinä on tilaajien tunnistetiedot.

8.5 NCPDP Telecommunication Standard

Apteekeille lähetettävät korvausvaatimukset. Kiinteän leveyden otsikko, jota seuraa muuttuvat segmentit.

Kaksi yksityiskohtaa, jotka ovat tärkeitä, ja molemmat ovat helppoja väärinkäsittää ja tuottaa uskottavia tuloksia:

Otsikko on tarkalleen 56 tavua ja kiinteäleveyinen. Lyhyt otsikko ei voida havaita pelkästään pituuden perusteella, koska lyhennetty otsikko ja sen jälkeen tulevat segmentit ylittävät edelleen 56 tavun. Havaitsemisen perusteena on se, että oikea otsikko ei sisällä erottimia, joten otsikkoa skannataan erottimen löytämiseksi ja viesti, jossa on erottin, hylätään ja ilmoitetaan montako tavua siinä puuttuu.

0x1E ja 0x1C ovat ryhmän ja kentän alkumerkit, eivät erottimia. Niiden käsittely erottimina siirtää jokaista kenttää yhden paikan vasemmalle, ja useimmat tuloksena olevat arvot säilyvät uskottavina — määrä päätyy paikkaan, jossa odotettiin päivien määrää, ja molemmat ovat numeroita.

NCPDP- ja SCRIPT-kanavat ovat poissapylkäisiä MLLP-kehyksestä, ja tämä on pakotettu sääntö eikä suositusta. Väite sisältää laillista 0x1C:iä, joka on MLLP:n oma loppublokki, joten väitteen kehystäminen katkaisisi sen ensimmäisessä kentässä.

8.6 NCPDP SCRIPT

Sähköiset reseptit, XML-muodossa. Sisäinen paketti on nimeltään eprescribe, koska script oli jo varattu JavaScript-moottorille.

Keskeinen turvallisuuskysymys on korvauslippu, ja se lukee vastakkaiseen suuntaan kuin intuitio: langalla 0 tarkoittaa, että korvaus on sallittu, ja 1 tarkoittaa, että lääke annetaan sellaisenaan.

Puuttuva korvauslippu hylätään sen sijaan, että se asetettaisiin oletukseksi. Molemmat mahdolliset oletukset voivat aiheuttaa haittaa potilaalle — toinen voi antaa geneeristä lääkettä, vaikka määrääjä edellytti alkuperäistä tuotetta, ja toinen estää korvauksen, jonka määrääjä salli — joten ei ole turvallista oletusta, ja viesti pysähtyy.

Aikataulun II resepti, jossa on uusintamahdollisuus, hylätään, eja rakentaja ei tuota sellaista.

Hylkäykset ja varoitukset säilytetään erillisinä luetteloina eikä yhtenä luettelo, jossa on merkitty vakavuus, koska lukija, joka on tarkastettava vakavuus kenttä tietääksesi, lähetettiinkö viesti, lopulta ei tarkasta sitä.

Sähköinen etukäteisvaltuutus (PAInitiationRequest, PARequest, PAAppealRequest, PACancelRequest) ja reaaliaikainen reseptietu on vastattu maksajapuolelta osoitteessa /ncpdp/script ja /ncpdp/rtpb, lääkevalikoimasta; ks. CMS-0057.

8.7 DICOM

Kuvantaminen. Perfuse voi vastaanottaa DICOM-objekteja, kysyä etäarkistoa ja tallentaa siihen, sekä perinteisten DICOM-verkkopalvelujen että DICOMwebin kautta, ja se voi pitää omaa arkistoaan näyttöjä varten.

DICOM ei ole viestinmuoto samassa mielessä kuin muut — objektit ovat suuria, ja yhdistelyn käsiviritys on tärkeämpää kuin kuorman käsittely. called_ae ja calling_ae -otsikot ovat yleisimmin syy sille, miksi ensimmäinen yhteys epäonnistuu, ja epäonnistuminen näyttää verkkovirheeltä eikä kokoonpanovirheeltä.

8.7.1 Mikä C-STORE-kuuntelija hyväksyy

Avoinna oleva DICOM-kuuntelija hyväksyy mitä tahansa, kuka tahansa, joka pääsee porttiin. Neljä asetusta Mikä tämä kuuntelija hyväksyy rajoittaa sitä, ja ensimmäinen on se, jota kannattaa ymmärtää.

Hyväksy vain nämä soittajan AE-otsikot on rajoitus. *Kutsuttu* AE-otsikko — se, joka on osoitteen vieressä — on nimi, jonka lähettäjä valitsee, joten se tunnistaa kuuntelijan eikä lähettäjää, eikä se ole rajoitus. Kuka tahansa, joka pääsee porttiin, voi käyttää oikeaa kutsuttua AE-otsikkoa, koska se on julkaistu heille. Ilman sallittujen soittajien luetteloa mikä tahansa isäntä verkkossa voi työntää kuvia kliiniseen kanavaan.

Hyväksy vain nämä SOP-luokat ja hyväksy vain nämä siirtosyntaksit ottavat vastaan pilkuilla erotettuja UID:ejä. Tyhjä hyväksyy jokaisen objektin tyypin ja neuvottelee kaiken pakkaamisen, jonka lähettäjä tarjoaa, mukaan lukien sellaiset, joita tämän kanavan kohteet eivät voi käsitellä. Hylkääminen yhdistelyssä on selkeämpää lähettäjälle kuin objektin hyväksyminen ja sen jälkeen epäonnistuminen.

Suurin hyväksytty objekti on tavuissa, ja nolla tarkoittaa, että ei ole rajoitusta. Kokonaiset liukuvirta- ja pitkät sarjat voivat olla useita gigatavuja, joten rajoitus on muistin mukaan.

8.7.2 DICOMweb

DICOMweb on DICOM HTTP:n yli: QIDO-RS-haut, WADO-RS- ja WADO-URI-haku, STOW-RS-tallennus. Selainkatselijat, kuten OHIF, puhuvat vain DICOMwebiä, ja niin tekevät pilvi-kuvauspalvelut (Google Cloud Healthcare, Azure Health Data Services, AWS HealthImaging). Perfuse käyttää sitä kolmessa paikassa.

Kuvatietokanta. Käynnistä palvelin -dicomweb-archive DIR (Asetukset › Data › Kuvatietokanta) ja se tallentaa tiedostot kyseiseen kansioon, indeksoi ne SQLite-tietokantaan ja tarjoaa ne osoitteessa /dicomweb palvelimen osoitteessa: QIDO-RS tutkimuksen, sarjan ja instanssin tasolla, WADO-RS objekteille, metatiedoille, kehyksille ja massatiedoille, WADO-URI osoitteessa /dicomweb/wado ja STOW-RS. Lukeminen edellyttää katselijan roolia ja tallentaminen operaattorin roolia, istunnon tai API-tunnuksen kanssa; jokainen lukeminen ja tallentaminen on Toiminnassa dicomweb.read tai dicomweb.store. Tili, joka on rajoitettu vuokralle tai kanavaryhmille, evätään, koska arkisto kuuluu koko palvelimelle. Objektit säilytetään sellaisenaan, kuin ne on vastaanotettu, joten se, mitä katselija hakee, on bitti bittiin se, mitä on tallennettu. Kehykset palautetaan siinä siirtosyntaksissa, jossa ne on tallennettu; pyyntö, joka vaatisi koodauksen, vastaa 406 sen sijaan, että se muuttaa kuvaa.

Haku, joka perustuu attribuuttiin, jota arkisto ei indeksoi, vastaa 400 sen sijaan, että se ohittaisi ehdot ja palaisi useammalla tutkimuksella kuin mitä pyydettiin. Indeksoitu: potilaan nimi (wildcards, ja fuzzy-matching fuzzymatching=true:n kanssa), potilaan ID, syntymäaika, sukupuoli, tutkimuspäivämäärä ja -aika (välikappaleet), tutkimusnumero, tutkimusID, kuvaus, lähettävä lääkäri, tutkimus, sarja ja SOP-istanse-UID:t (listat), modaliteetti, kehon osa, sarjanumero ja kuvaus, SOP-luokka, instanssinumero, rivit, sarakkeet ja kehysten määrä.

Lähde. type: dicomweb kuuntelee STOW-RS:ää osoitteessa /dicom-web/studies oletusarvoisesti (polku, jonka Orthanc ja dcm4chee käyttävät), ja lähettää jokaisen objektin kanavan kautta DICOM-viestinä. Kanava tarvitsee dataType: dicom. Määritä kantaväli- tai käyttäjänimi ja salasana: ilman niitä kuka tahansa, joka pystyy käyttämään porttia, voi lähettää kuvia kanavaan. Vastaus luettelee jokaisen objektin tallennettuna tai epäonnistuneena, DICOM-epäonnistumisen syyn, jotta lähettäjä tietää, mitkä ovat uudelleenlähetettäviä.

name: imaging-from-viewers
dataType: dicom
source:
  type: dicomweb
  dicomweb:
    listen: 0.0.0.0:8043
    token: ${STOW_TOKEN}
    tls: { enabled: true, cert_file: /etc/perfuse/imaging.crt, key_file: /etc/perfuse/imaging.key }
destinations:
  - name: archive
    type: dicomweb
    dicomweb:
      url: https://perfuse.example/dicomweb
      token: ${ARCHIVE_TOKEN}

Määränpää on toimituksessa DICOMweb-arkistojen alla.

Osoittaminen OHIF:lle arkistoon

Käytä DICOMweb-tietolähdettä qidoRoot- ja wadoRoot-arvoilla arkiston osoitteeseen (Kuvat-näyttö näyttää sen, koko data-lähdetoimintosarjan kanssa), wadoUriRoot-arvo arkiston osoitteeseen seuraava /wado, imageRendering ja thumbnailRendering wadors:iin, ja supportsFuzzyMatching tosi. Katselija toisessa alkuperämaassa tarvitsee sen alkuperämaan -dicomweb-cors:ssa (Sallitut selainalkuperät, jotka voivat kutsua sitä), ja sen pyynnöt tarvitsevat API-tunnuksen Authorization-otsikossa, koska selain toisessa alkuperämaassa ei lähetä konsoleiden istunnon evästeitä. OHIF:n palvelu samasta alkuperämaasta kääntämällä palvelimen kautta välttää molemmat.

Testattu Orthancin kanssa sen DICOMweb-liitännäisellä, molempiin suuntiin: määränpää tallentaa Orthanciin, ja Orthancin DICOMweb-asiakas etsii Perfusen arkistoa ja hakee tutkimuksen, joka on bitti bitiltä sama kuin tallennettu. OHIF 3 listaa arkiston tutkimukset ja näyttää niiden kehykset yllä mainittujen asetusten kanssa. OHIF ja useat muut asiakkaat lähettävät type= ilman lainausmerkkejä Accept- ja Content-Type-otsikoissa, mitä RFC 2045 ei salli; Perfuse hyväksyy sen.

8.8 IHE-dokumenttien jakaminen: XDS.b, XCA, XDR, MHD, PIXm ja PDQm

Kliiniset asiakirjat, jotka jaetaan organisaatioiden välillä terveydenhuollon tietojen vaihtotavan, Carequalityn ja eHealth Exchangen tavoin: varasto pitää niitä, rekisteri indeksoi niiden metatietoja, ja yhteisö vastaa muiden yhteisöjen kysymyksiin portin kautta. Käynnistä palvelin -xds REPOSITORY-OID:llä (Asetukset › Data › Asiakirjojen jakaminen) ja se on kaikki kolme, tämän palvelimen tietokannassa, näissä osoitteissa, kunkin ottamalla API-tunnuksen kantavatunnukseksi (katselijan rooli kysymiseen ja hakemiseen, operaattorin rooli lähettämiseen; useimmat sitoutumisalat lisäävät vastakkaisen TLS:n eteen):

AddressActorTransactions
/xds/repositoryDocument RepositoryITI-41 Provide and Register Document Set-b, ITI-43 Retrieve Document Set
/xds/registryDocument RegistryITI-18 Registry Stored Query (all thirteen stored queries), ITI-42 Register Document Set-b
/xca/gatewayXCA Responding GatewayITI-38 Cross Gateway Query, ITI-39 Cross Gateway Retrieve, with -xds-home-community urn:oid:...
/mhdMHD Document Recipient and ResponderITI-65 Provide Document Bundle, ITI-66 Find Lists, ITI-67 Find Document References, ITI-68 Retrieve Document
/mhd/PatientPDQm Supplier and PIXm ManagerITI-78 Patient Demographics Query, ITI-83 Patient/$ihe-pix, from the FHIR store's Patients
/pixv3PIX Manager (HL7 v3)ITI-44 Patient Identity Feed HL7 V3, ITI-45 PIXV3 Query, from the patient index (-mpi)
/pdqv3PDQ Supplier (HL7 v3)ITI-47 PDQV3 Query, with continuation and cancel, from the patient index

SOAP-transaktiot ovat SOAP 1.2:aa WS-Addressingillä ja MTOM/XOP:lla, kun asiakirjat liikkuvat (asiakirja inline-muodossa base64:na on hyväksytty myös). Epäonnistunut transaktio vastataan rekisterivastauksella, joka sisältää IHE:n virhekoodit, ei SOAP-virhettä: XDSDuplicateUniqueIdInRegistry, XDSNonIdenticalHash, XDSPatientIdDoesNotMatch, XDSMissingDocument, XDSRegistryMetadataError (puuttuvalla kentällä), XDSStoredQueryMissingParam, XDSUnknownStoredQuery, XDSUnknownRepositoryId, XDSUnknownCommunity ja UnresolvedReferenceException. Korvaava (RPLC, XFRM_RPLC) vanhentaa korvaamansa asiakirjan, joka vastaa vain kyselyihin, jotka pyytävät vanhentuneita asiakirjoja; APND, XFRM ja signs säilytetään assosiaatioina. Tiiviste ja koko lasketaan varastossa ja tarkistetaan vastaanottajan antamia tietoja vastaan. Tarvittaessa asiakirjat ja metatiedot (ITI-57) eivät ole tuettuja, ja pyyntö niiden hakemiseksi hylätään syyn vuoksi.

MHD on sama rekisteri FHIR:ssä: asiakirja, joka tarjotaan MHD:llä, löytyy ITI-18:lla ja XCA:lla, ja yksi, joka tarjotaan XDS.b:llä, löytyy ITI-67:llä. Asiakirjan viittauksen tunniste on kirjauskentän UUID, sen pääavain on yksilöivä tunniste, ja sen liitteen osoite on ITI-68-osoite asiakirjalle. Potilaat ratkaistaan sidossuhteensa tunnisteeseen FHIR-tallennuksesta: ensimmäinen tunniste, jonka järjestelmä on urn:oid:, tai potilas, joka on mukana paketissa. PIXm vastaa jokaista muuta potilaan tunnistetta annetulla (sourceIdentifier=system|value, kapeampi targetSystem):llä, ja 404:lla, jos se ei tunnusta sitä; PDQm etsii tunnisteella, nimellä, syntymäpäivämäärällä, sukupuolella, osoitteella ja tietoyhteydellä.

Julkaiseminen. Kanavan xds-kohde julkaisee jokaisen saamansa kliinisen asiakirjan XDS.b-rekisteriin ITI-41:llä. Metatiedot luetaan asiakirjasta: potilas (tunniste patient_domain:ssa, sidossuhteen määrittäjä), otsikko, tyyppi (tyyppikoodina ja, ellei ole asetettu, luokkakoodina), luomis- ja palveluaika, tekijä, luottamuksellisuus, kieli ja muoto (C-CDA 2.1 tai 1.1 rakenteinen runko, XDS-SD tai mimeTypeSufficient, sen malleista); ja täydennetään siitä, mitä asiakirja ei kerro: lähettäjän source_id, facility_type ja practice_setting, joita jokainen rekisteri vaatii. Varaston RegistryResponse päättää toimituksen: epäonnistunut toimitus on virheellinen toimitus rekisterin virhekoodeilla.

destinations:
  - name: hie
    type: xds
    xds:
      url: https://hie.example/xds/repository
      source_id: 1.2.840.114350.1.13.99
      patient_domain: 1.2.840.114350.1.13.99.2.7.5.737384.14
      facility_type: { code: "225732001", scheme: 2.16.840.1.113883.6.96, display: Community hospital }
      practice_setting: { code: "394802001", scheme: 2.16.840.1.113883.6.96, display: General medicine }
      tls: { enabled: true, cert_file: /etc/perfuse/hie.crt, key_file: /etc/perfuse/hie.key }

XDR. Lisää direct_from (oma Direct-osoite) ja direct_to (vastaanottajien) ja sama kohde lähettää XDR:nä Directin kuljetuksena, kuten Direct-hankkeen *XDR ja XDM Direct-viestinnässä* kuvailee: Direct-osoitelohko (urn:direct:addressing) SOAP-otsakkeessa nimeää lähettäjän ja vastaanottajat, ja lähetetyssä intendedRecipient nimeää kunkin vastaanottajan (||^^Internet^address). Osoita url vastaanottajan XDR-päätepisteeseen tai HISP:hen, joka hyväksyy XDR:n. XDR matkustaa TLS:n yli, yleensä asiakasvarmenteella (tls), ja se ei ole S/MIME. direct-lähde hyväksyy myös XDR:n (ks. Direct alempana).

    xds:
      url: https://xdr.hisp.example/xdr
      source_id: 1.2.840.114350.1.13.99
      patient_domain: 1.2.840.114350.1.13.99.2.7.5.737384.14
      facility_type: { code: "225732001", scheme: 2.16.840.1.113883.6.96, display: Community hospital }
      practice_setting: { code: "394802001", scheme: 2.16.840.1.113883.6.96, display: General medicine }
      direct_from: referrals@direct.hospital.example
      direct_to: ["intake@direct.clinic.example"]
      tls: { enabled: true, cert_file: /etc/perfuse/xdr.crt, key_file: /etc/perfuse/xdr.key }

PIX ja PDQ HL7 version 3:ssa. Potilasrekisterin ollessa käytössä (-mpi), /pixv3 on PIX-hallintaja ja /pdqv3 PDQ-toimittaja SOAP 1.2:n yli, sairaaloille ja vaihtoille, jotka edelleen puhuvat IHE:n v3-profiileja. Lähde syöttää potilaita ITI-44:llä (tallennettu PRPA_IN201301UV02, muokattu PRPA_IN201302UV02, monistetut ratkaistu PRPA_IN201304UV02): potilaan ensimmäinen tunniste on sen tallennus, muut ja asOtherIDs:ssä olevat tunnisteet ovat tunnisteita, joita se kantaa, ja yhdistäminen yhdistää edellisen tallennuksen tunnisteen eloonjäävään, kuten HL7 v2 A40 tekee. ITI-45 (PRPA_IN201309UV02) vastaa henkilön muiden tunnisteiden, jotka omistaa yksi, kapeampaa dataSource:a ja Patient.id:ssä; kysytty tunniste tulee takaisin vain toistuvassa kyselyssä. ITI-47 (PRPA_IN201305UV02) vastaa demografiaa (nimi, sukupuoli, syntymäaika, tunniste, osoite, viestintä) indeksin omalla vastaajalla, minimumDegreeMatch pisteytys 100:sta, otherIDsScopingOrganization rajoittaa verkkotunnukset ja initialQuantity sivuttaa vastauksen: loput tulevat QUQI_IN000003UV01:n kanssa kymmenen minuutin kuluttua tai heittää pois sen peruutuksella. Vastaukset seuraavat transaktioiden tapauksia: tuntematon potilas tai verkkotunnus on AE virheellä 204 ja parametrin sijainti, tunnettu potilas, jolla ei ole mitään pyydetyissä verkkotunnuksissa, on NF. v3 nimeää viranomaisen vain OID:llä, joten tunniste, jonka järjestelmä on URL, jolla ei ole OID:tä (jotkin kansalliset numerot), jätetään pois v3-vastauksista ja annetaan FHIR:lle; aseta yritystunnisteen järjestelmäksi OID:ksi (urn:oid:..., indeksiasetuksissa) EUID:lle ja huoltajalle näkyville. Katselijan rooli kysyy ja operaattorin rooli syöttää; jokainen transaktio auditioidaan tunnisteella, ei koskaan nimellä. Paljas v3-viesti lähetetään application/xml:na, joka on kätevä käsillä testaamiseen.

Vaihto › Asiakirjojen jakaminen näyttää, mitä rekisteri sisältää ja mihin se on saatavilla, etsii potilaan asiakirjoja tässä rekisterissä tai toisessa (rekisterin ITI-18 tai portaalin ITI-38), lataa yhden ja julkaisee CDA-asiakirjan käsin metatiedoilla, jotka kohde antaisi sille.

Varmistettu NIST XDS Toolkit 7.13.0:ia, IHE:n viiteimplementaatio: Perfuse:n ITI-41, ITI-18 ja ITI-43 sen Registry/Repository-simulaattorin (hyväksytty ilman validointivirheitä, asiakirja haettu bitti-tarkasti) ja sen Initiating Gateway -simulaattorin kysely ja hakeminen Perfuse:n Responding Gateway:sta XCA:n kautta ilman virheitä sen lokissa. Jokainen SOAP-viesti, jonka Perfuse kirjoittaa, on validi ebXML Registry 3.0 ja XDS.b -skeemojen mukaan, ja MHD DocumentReference ja SubmissionSet IHE MHD 4.2.2:n mukaan HL7 FHIR -validoijalla. XDR xds-kohteesta, jossa on Direct-osoiteblokki, hyväksyttiin työkalun Document Recipient -simulaattorin toimesta, jonka metadata-validointi löysi yhden virheen, joka on kuvattu docs/verification.md:ssa, ja ONC SITE:n XDR-validoijan toimesta, Direct XDR -tarkistusluettelo (h)(2) -sertifioititestin mukaisesti. PIX- ja PDQ v3 -vastaukset validoidaan IHE:n HL7 V3 -skeemojen (NE2008 multicacheschemas) mukaan, ja IHE:n omat esimerkkiwiksit (ITI-44 -syöte, yhdistäminen, ITI-45 -kysely, ITI-47 -kysely, jatko ja peruutus) ovat vastauksia, jotka julkaistuissa vastauksissa näkyvät. Ei vielä tarkistettu itsenäisen PIX- tai PDQ v3 -toteutuksen, Gazellen tai Connectathonin kanssa.

8.9 Sähköinen turvallinen viestintä

Direct on tapa, jolla US:n tarjoajat lähettävät toisilleen siirtoja, yhteenvetoja ja tuloksia turvallisella sähköpostilla: jokainen viesti on allekirjoitettu lähettäjän varmenteella ja salattu vastaanottajan varmenteella (S/MIME), ja se matkustaa HISPIen (Terveydenhuollon tietopalvelujen tarjoajat) välillä, jotka myöntävät osoitteet ja vakuuttavat niistä. Perfuse on reunajärjestelmä HISP:si vieressä, ei HISP: siinä mielessä, että HISP myöntää sinun osoitteesi, sen varmenne ja avain, ja sinä pidät sen luottamusryhmää (kuten DirectTrustin). Seuraamme Direct-soveltamisohjeita turvallisesta terveydenhuollon kuljetuksesta 1.2, Toimituksen ilmoitusopasta, IHE XDM:ää (ITI TF-1 Annex 15) asiakirjoille metadataa varten, Varmenteen löytämisopasta Direct-hankkeen toteutusoppaassa (DNS ja LDAP), ja XDR ja XDM Direct-viestintää varten.

Sending. A direct destination signs each message as your address (SHA-256, RSA), encrypts it to every recipient's certificate and your own (AES-256-CBC, RSA key transport), and submits it to the HISP by SMTP with STARTTLS required. The message travels as an attachment named by its content (document.xml, message.hl7, resource.json), or, with xdm: true, a CDA document travels as an IHE XDM package (IHE_XDM/SUBSET01/METADATA.XML with the document and its hash and size, plus INDEX.HTM and README.TXT) that receiving EHRs import with its metadata. Recipient certificates come from the Direct address book (below), then from DNS, where Direct publishes them as CERT records (RFC 4398): under the address with its @ made a dot, else under its domain; then from the recipient domain's LDAP directory, which its _ldap._tcp SRV record names (or ldap: host:port; ldap: off never asks one): each naming context is searched anonymously for an entry whose mail is the address, then the domain, and its userSMIMECertificate or userCertificate read. A certificate is used only when it is for the address or its domain, has not expired, and chains to one of your anchors, fetching any intermediate issuer its Authority Information Access extension names; and it is refused when its issuer's revocation list (from its CRL distribution point, signed by that issuer) lists it. A list that cannot be fetched does not stop delivery. A recipient with no such certificate is a failed delivery, never plain e-mail. to and subject take field references such as {PV1-8.1}, and request_mdn asks the recipient for a delivery notification.

destinations:
  - name: referrals
    type: direct
    direct:
      address: referrals@direct.hospital.example
      cert_file: /etc/perfuse/direct/referrals.crt   # with its chain after it
      key_file: /etc/perfuse/direct/referrals.key
      anchors_file: /etc/perfuse/direct/anchors.pem
      to: ["intake@direct.clinic.example"]
      subject: "Referral for {PID-5.1}"
      text: "Please see the attached summary."
      xdm: true
      xdm_source_id: 1.2.840.114350.1.13.99
      smtp_host: smtp.hisp.example:587
      username: referrals
      password: ${DIRECT_HISP_PASSWORD}
      request_mdn: true

Vastaanotto. direct-lähde on SMTP-palvelin, johon HISP toimittaa osoitteesi postin. Se ottaa vastaan postia vain kyseiselle osoitteelle (muu kieltäytyy RCPT-vaiheessa), edellyttää STARTTLS:ia, kun sertifikaatti on annettu, ja avaa jokaisen viestin ennen kuin se luetaan: salaa sen avaimellasi, tarkistaa allekirjoituksen luotettavien ankkurien vastaisuutta ja tarkistaa, että allekirjoittava sertifikaatti on lähetijän osoitteelle tai sen domeenille. Viesti, joka ei ole salattu S/MIME:llä, on allekirjoitettu lähettäjän toimesta, jota et luota, tai on allekirjoitettu sertifikaatilla, joka kuuluu jollekin muulle, kieltäytyy DATA-vaiheessa syystä, joten HISP pitää sen ja ilmoittaa siitä lähettäjälle; Perfuse ei koskaan hyväksy sitä, mitä se sitten hylkää. XDM-paketin asiakirjat muuttuvat jokainen viestiksi (tarkistetaan paketin metatietojen hajautusarvoa vastaan); muuten jokainen liite muuttuu viestiksi tai tekstiksi, jos liitteitä ei ole. smtp_host-asetuksen ollessa määritettynä jokainen vastaanotettu viesti vastataan allekirjoitettuun ja salattuun "prosessoitu"-ilmoitukseen (MDN), ja ilmoitukset, jotka saapuvat lähettämistesi viestien osalta, kirjataan.

source:
  type: direct
  direct:
    address: intake@direct.clinic.example
    cert_file: /etc/perfuse/direct/intake.crt
    key_file: /etc/perfuse/direct/intake.key
    anchors_file: /etc/perfuse/direct/anchors.pem
    listen: 0.0.0.0:2525
    tls_cert: /etc/perfuse/tls/server.crt
    tls_key: /etc/perfuse/tls/server.key
    smtp_host: smtp.hisp.example:587

HISP:n postilaatikosta. HISP, joka pitää sähköpostia sen sijaan, että toimittaisi sen, antaa osoitteelle IMAP-postilaatikon: imap lukee sen (TLS tai STARTTLS, jokaista kyselyä varten uusi istunto), avaa jokaisen viestin edellä mainittuun tapaan, siirtää mitä otettiin move_to:han (tai poistaa sen) ja mitä ei voitu avata error_folder:iin, jotta mitään ei lueta kahdesti. listen voidaan jättää pois. HISP, jonka sähköpostipalvelimella on yksityinen sertifikaatti, luotetaan tls.ca_file:n (sen sertifikaatti tai sen viranomaisen) ja tls.server_name:n avulla; varmennus ei voida kytkeä pois päältä.

    imap:
      host: imap.hisp.example
      username: intake@direct.clinic.example
      password: ${DIRECT_MAILBOX_PASSWORD}
      move_to: Processed

XDR. xdr ottaa XDR:in osoitteesta /xdr omalla HTTPS-osoitteellaan, kuten HISP lähettää Directin muunnettuna SOAP:ksi tai kumppani lähettää suoraan: ITI-41 Provide and Register -pyyntö, jonka asiakirjat muuttuvat viestiksi. Lähetys, jonka Direct-osoiteblokki nimeää toisen osoitteen, hylätään, ja sellainen, jota kanava ei hyväksy, vastataan RegistryResponse-virheilmoituksella, jossa kerrotaan syy. client_ca_file edellyttää asiakas sertifikaattia niiden viranomaisten toimesta. XDR on suojattu TLS:llä, ei S/MIME:llä, joten lähde, joka ottaa vain XDR:ää, tarvitsee osoitteen, mutta ei sen sertifikaattia, avainta tai ankkureita. Jokainen asiakirja muuttuu kanavan dataType -viestiksi: CDA-dokumentit tarvitsevat raw (lähetetään sellaisenaan) tai hl7v3, koska oletus, hl7, odottaa HL7 v2:ta ja hylkää ne.

    xdr:
      listen: 0.0.0.0:8445
      tls_cert: /etc/perfuse/tls/server.crt
      tls_key: /etc/perfuse/tls/server.key
      client_ca_file: /etc/perfuse/direct/hisp-clients.pem

Vaihto › Direct luetellaan kanavien lähettämät ja vastaanottamat Direct-osoitteet niiden sertifikaatteineen, vanhenemisajankohtineen ja ankkureineen; ylläpitää osoitekirjaa (nimi, organisaatio, muistiinpanot ja sertifikaatti, joka on liitetty heidän HISP:stään tai löydetty DNS:stä tai LDAP:stä, ja evätetty, kun se ei ole kyseiselle osoitteelle tai verkkotunnukselle); ja etsii osoitteen sertifikaatteja DNS:stä tai LDAP:stä tallentamatta niitä. Kirja on direct-certs -kansio tietokannan vieressä, yksi PEM-tiedosto kunkin osoitteen tai verkkotunnuksen mukaan, jonka kohde lukee, ellei se mainitse omaa recipient_certs_dir:ää.

Varmistettu OpenSSL 4.0:n cms- ja smime-työkalujen kanssa molempiin suuntiin: mitä Perfuse allekirjoittaa ja salaa, OpenSSL varmistaa ja purkaa (PKCS#1 v1.5 ja OAEP-avainkuljetus), ja Perfuse avaa, mitä OpenSSL allekirjoittaa ja salaa (AES-128 ja AES-256). Viesti, joka on tehty openssl smime-työkalulla ja toimitettu SMTP:llä, vastaanotetaan, avataan ja tallennetaan kanavaan, ja yksi Perfuse lähettää viestin toiselle kanavalle HISP-välikappaleen kautta, joka vastaa MDN:llä, jonka lähettäjä avaa. Sertifikaatit löytyvät OpenLDAP 2.4:stä (osoitekohtaiset ja domainkohtaiset, kirjoitetut OpenLDAP:n omalla ldapadd-työkalulla); Direct-viesti luetaan GreenMail IMAP-postilaatikosta ja avataan, ja yksi, joka ei ole Direct, siirretään virhekirjaan; XDR xds-kohteesta otetaan direct-lähteestä ja hylätään, kun se on osoitettu jollekin toiselle, ja hyväksytään NIST XDS Toolkitin Document Recipientin ja ONC SITE:n XDR-vahvistimen toimesta; SITE:n Direct XDR Edge Test Tool lähetti sekä minimi- että täydelliset metatietoviestit direct-lähteelle, joka otti ne. ONC:n Direct Certificate Discovery Toolin kanssa Direct-kohteella valitaan oikea sertifikaatti tai ei yhtäkään niistä 18 havaintotapauksessa (D1-D18: vanhentuneet, peruutetut ja AIA-myönnetyt sertifikaatit, SRV-prioriteetti ja paino, yhteydenoton estäminen). Direct-lähde lukee viestin SITE:n omasta HISP:stä (Apache James) IMAP:llä STARTTLS:in avulla. Ei vielä testattu: SMTP-vaihto SITE:n HISP:n (AWS pitää lähtevän postin portissa 25 uusille tileille) tai akkreditoitujen HISP:ien kanssa.

8.10 SQL FHIR-näkymät

ViewDefinition (HL7 SQL on FHIR v2) muuttaa jokaisen FHIR-resurssin tietyn tyypin riveiksi nimetyistä sarakkeista, jokainen sarake on FHIRPath-lause, joten FHIR-data voidaan lukea tauluina DuckDB:llä, Athenalla, Sparkilla, data-warehousella tai taulukkolaskentaohjelmalla. Perfuse suorittaa ne omalla FHIRPath-moottorillaan: column, sisäkkäinen select, forEach, forEachOrNull, repeat ja unionAll, where, constant (jokainen arvo[x] -tyyppi), collection-sarakkeet, %rowIndex ja getResourceKey()- ja getReferenceKey(type)-liittymisavaimet.

{
  "resourceType": "ViewDefinition",
  "name": "blood_pressure",
  "resource": "Observation",
  "constant": [{ "name": "systolic", "valueCode": "8480-6" }],
  "where": [{ "path": "code.coding.exists(system = 'http://loinc.org' and code = '85354-9')" }],
  "select": [{ "column": [
    { "name": "id", "path": "getResourceKey()", "type": "id" },
    { "name": "patient_id", "path": "subject.getReferenceKey(Patient)", "type": "id" },
    { "name": "systolic", "path": "component.where(code.coding.code = %systolic).value.ofType(Quantity).value.first()", "type": "decimal" }
  ]}]
}

Valvonta › SQL on FHIR suorittaa näkymän tämän palvelimen FHIR-tietokannasta (yksi potilas tai kaikki) tai resursseista, jotka on liitetty (NDJSON massavirheestä, Bundlesta, JSON-taulukosta), näyttää rivit ja lataa ne CSV-, NDJSON- tai Parquet-tiedostona. Se aloittaa viidestä esimerkkinäkymästä (potilaan demografiat, havainnot arvolla, verenpaine, oireet, kohtaamiset) ja tallentaa näkymät views-hakemistoon tietokannan vieressä, yksi JSON-tiedosto kussakin.

FHIR-päätepiste vastaa määrityksen $sql-run-kyselyyn järjestelmätasolla, GET- tai POST-menetelmällä, ViewDefinition-aiheen mukaan annettuna suoraan (subjectResource), subjectReference-kautta (ViewDefinition/<name>, tallennettu näkymä) tai subjectCanonical-kautta (tallennetun näkymän url), _format-kyselyparametrin (csv, ndjson (oletus), json tai parquet) kanssa, header, patient, _since, _limit ja resource suorittamaan resursseja, jotka lähetetään pyynnön mukana sen sijaan, että ne haettaisiin tietokannasta. Se on lukukäyttö: SMART-tunniste tarvitsee lukuoikeuden näkymän resurssityypille, tunniste, joka on sidottu yhteen potilaaseen, saa vain kyseisen potilaan rivit, ja hienorakeiset oikeudet rajoittavat resursseja, joita luetaan, kuten ne rajoittavat hakua. Yli miljoona riviä vaatii _limit-, patient- tai _since-parametria.

perfuse sof -view v.json [-format csv|ndjson|json|parquet] [-o out] files... suorittaa näkymän FHIR-tiedostoja ilman palvelinta: massavirheen NDJSON-tiedostot, Bundle tai taulukot.

perfuse sof -view blood_pressure.json -format parquet -o bp.parquet export/Observation.ndjson
duckdb -c "SELECT patient_id, avg(systolic) FROM 'bp.parquet' GROUP BY 1"

Parquet-tiedostot sisältävät yhden riviryhmän ja pakkaamattomat PLAIN-sivut; totuusarvot ovat BOOLEAN, kokonaisluokat INT64, desimaalit DOUBLE ja kaikki muu UTF-8-merkkijonot (kokoelmasarake sen JSON-muodossa).

Varmistettu virallisen SQL on FHIR -testisarjan (sql-on-fhir.js-repositorion tests/-kansiossa olevat 144 testiä, jotka suoritetaan jokaisessa koontiversiossa: kaikki menevät läpi) ja Parquet-tulosteen lukeminen takaisin DuckDB 1.5.6:lla oikeilla tyypeillä ja arvoilla. Ei tueta: SQLQuery- ja SQLView-kirjastot (SQL näkymien tauluilla), $sql-export, _format=fhir ja source- ja group-parametrit; jokainen kieltäytyy syystä.

8.11 Digitaaliset laatusäännökset

Digitaalinen laatusääntö laskee potilaiden määrän kussakin FHIR-Measure-resurssin populaatiossa mittaamisjaksolla (alkuperäinen populaatio, nimittäjä, nimittäjän poissulkemiset ja poikkeukset, ylämäki, ylämäen poissulkemiset) ja pisteyttää tuloksen. Vastaus on FHIR-MeasureReport, joka on muotoiltu Da Vinci Data Exchange for Quality Measures (DEQM) -oppaan mukaisesti. Tässä on, minne CMS:n eCQM-ohjelmat ja NCQA:n digitaalinen HEDIS ovat menossa.

Perfusessa väestön kriteerit ovat FHIRPath ("language": "text/fhirpath"), jotka suoritetaan samalla moottorilla kuin SQL FHIR:lle. Kukin kriteeri arvioidaan kerran potilaakohtaisesti. Sen keskipisteenä on potilaan omat tiedot sisältävä Bundle (Potilas-osio), ja siinä on seuraavat muuttujat: %subject (Potilas), %periodStart ja %periodEnd (aikajakso, dateTime-tyyppisenä) ja %"Measurement Period". Kriteeri palauttaa tosi tai epätosi; yksittäinen olemassaoleva arvo katsotaan tosiksi.

{
  "code": { "coding": [{ "system": "http://terminology.hl7.org/CodeSystem/measure-population", "code": "numerator" }] },
  "criteria": {
    "language": "text/fhirpath",
    "expression": "entry.resource.ofType(Observation).where(code.coding.where(system = 'http://loinc.org' and code = '4548-4').exists() and effective.ofType(dateTime) >= %periodStart and effective.ofType(dateTime) <= %periodEnd).exists()"
  }
}

Väestöt muodostuvat Mittausmäärityksen mukaan. Potilas on oletusarvoisesti ainoastaan nimittäjässä, jos hän on alkuväestössä. Nimittäjäpoisto ottaa potilaan pois ennen kuin nimittäjä arvioidaan. Nimittäjäpoikkeus lasketaan ainoastaan potilaalle, joka ei ole nimittäjässä. Suhteen pisteytys on (nimittäjä - nimittäjäpoistot) / (nimittäjä - poistot - poikkeukset); suhdeluvun pisteytys on nimittäjä / nimittäjä; ryhmässä on laskurit ja ei pisteytystä. Yksikriteeriset stratifikointikriteerit jakavat jokaisen väestön arvonsa mukaan (sukupuoli, esim.).

Perfuse ei ole CQL-moottori. Julkaistut CMS eCQMs ja HEDIS digitaaliset mittaukset on kirjoitettu CQL:llä, joten niitä ei voida suorittaa sellaisenaan. Mittaus, jonka kriteerit ovat CQL, hylätään samalla perusteella. Kirjoita logiikka FHIRPathina sen sijaan. Jatkuva muuttujien pisteytys, monikomponenttisten stratifioijien ja ryhmän tai harjoittajan aiheiden käsittely hylätään samalla tavalla.

Monitor › Laatulaadun mittarit arvioi mittaria tämän palvelimen FHIR-kaupassa tai liitettyjen resurssien yli tietylle ajanjaksolle. Se tarjoaa kolme raporttia: yhteenveto, yhteenveto potilaiden määrällä kussakin väestössä tai yksi potilas. Näyttö näyttää väestöt, pisteytyksen ja stratat, ja lataa MeasureReportin. Se alkaa kolmesta esimerkistä: verenpaine hallinnassa, diabetes HbA1c-testillä ja potilaat, jotka on nähty ajanjaksolla. Ne ovat havainnollistavia, kirjoitettu tätä käsikirjaa varten, eivätkä ne ole CMS eCQMs- tai HEDIS-mittauksia. Tallenna FHIR-kauppaan tarkistaa Mittarin ja tallentaa sen Measure-resursseina.

FHIR-päätepiste vastaa Measure/[id]/$evaluate-measure ja Measure/$evaluate-measure?measure=<url>, joko GET- tai POST-pyynnöllä Parameters-ressurssia. Parametrit:

Raportti palautetaan, ei tallenneta. Operaatio on lukeminen, joten SMART-tunniste tarvitsee lukuoikeuden Mittaukseen ja Potilaaseen. Potilastunniste, joka on sitoutunut yhteen potilaaseen, saa yksittäisen raportin kyseisestä potilaasta eikä muista.

perfuse measure -measure m.json -period-start 2026-01-01 -period-end 2026-12-31 [-type summary|subject|subject-list] [-subject Patient/ID] [-o out] files... evaluates a measure over FHIR files (a bulk export's NDJSON, Bundles, arrays) without a server. -measure example:example-bp-control runs a shipped example, and -examples lists them.

Vahvistettu. HL7 FHIR-vahvistin tarkistaa toimitetut Mittaukset FHIR R4:ää vasten ilman virheitä. Se tarkistaa yhteenveto-, yksittäisen ja aihe-luettelon MittausRaportin DEQM 5.0.0 yhteenveto-, yksittäisen ja aihe-luettelon profiileja vasten, myös ilman virheitä. Vahvistamaton: vastaavuus mihinkään julkaistuun eCQM:ään, koska niitä ei voida suorittaa ilman CQL:ää.

8.12 Potilasrekisteri (MPI)

Master-potilasrekisteri linkittää jokaisen järjestelmän pidemmän aikaa säilyttämät tiedot henkilöstä (sairaalan MRN, klinikan, laboratorion) yhdeksi yritysosoitteeksi, EUID:ksi. Se on pois käytöstä, kunnes joku päättää pitää sitä, koska se on potilaiden nimien, syntymäpäivien ja tunnisteen taulukko: käytä Asetukset → Data → Potilasrekisteri (tai serve -mpi) ja käynnistä uudelleen. Se sijaitsee mpi.db-tiedostossa päätietokannan vieressä.

Syöttäminen. Lisää kanaviin, jotka kantavat rekisteröintejä, kohde mpi-tyyppi (Potilasindeksi rakentajassa). Se lukee kunkin HL7 v2-viestin PID:n tai FHIR-potilaan raakakanavalla. Oman tunnisteen omat tunnisteet ovat PID-3 toistumisen MR-tyyppi (id_type muuttaa sen); muut, ja PID-19, tulevat sen muiden tunnisteiksi. Universaalin tunnisteen (PID-3.4.2 tyypillä ISO) antaa urn:oid:...; yksin namespace on kartoitettu authorities-avaimella, tai se tulee urn:perfuse:aa:<namespace>. A40, A34, A18 tai A39 yhdistää henkilön, jolla on MRG-1:n tunniste, henkilöön, jolla on PID-3 (no_merge jättää ne huomioimatta).

destinations:
  - name: index
    type: mpi
    mpi:
      authorities: { HOSP: "urn:oid:1.2.840.114350.1.13.1" }

Tunnistaminen. Uusi tietue liitetään seuraavassa järjestyksessä:

  1. Luotettavat tunnistimet. Tiedon, joka jakaa tunnistimen luettelossa mainitusta järjestelmästä (kansallinen tunniste, yritystunnus), on sama henkilö, ilman pisteytystä. Älä koskaan mainitse järjestelmää, jota perhe jakaa, kuten vakuuttajan tilaajanumero.
  2. Pisteytys. Muutoin henkilöt, joiden tiedot voivat olla samat, löydetään estämällä (saman kuuloinen sukunimi ja syntymävuosi, sama syntymäpäivä tai sama puhelinnumero) ja pisteytetään Fellegi-Sunter-painoilla sukunimi ja etunimi (Jaro-Winkler ja Soundex, aksentit ja pisteet huomioon ottaen, nimet vaihdettuina), syntymäpäivä (päivä ja kuukausi vaihdettu osittainen sopimus), sukupuoli, postinumero, puhelin ja osoite. Vain kentät, joita molemmat tiedot sisältävät, lasketaan. Pisteytys on löydetty todiste osana mahdollista todistetta. Estäminen käyttää viittä avainta, joten yksi virhe ei piilota henkilöä: sukunimiääni ja syntymävuosi, syntymäpäivä, puhelin, molempien nimien äänet (järjestyksessä), ja postinumero etunimen äänellä.
  3. Päätös. Oletuksena mitkään tiedot eivät liity pelkästään pisteytykseen. Tiedot, jotka saavuttavat tai ylittävät tarkastelukynnyksen (60%), muodostavat uuden henkilön ja mahdollinen vastine odottaa tarkastusjonossa; ne, jotka ovat tai ylittävät automaattisen kynnyksen (90%) sukunimen ja syntymäpäivän molempien sopiessa, on merkitty *varmaksi*. Kahden henkilön yhdistäminen yhdeksi (ylipäällekkäin) asettaa toisen potilaan tulokset toisen potilaan karttaan, joten automaattinen yhdistäminen on kytkin, jonka ylläpitäjä kääntää (Linkitä varmat vastineet ilman kysymystä) kun jonot on osoittanut, että varmat ovat oikein. Kun se on päällä, varma vastine linkittyy, kun toinen henkilö ei saavuta yhtä korkeaa pisteytystä. Tarkastelukynnyksen alapuolella tieto on uusi henkilö.

Kansalliset numerot. NHS-numero (ja Skotlannin CHI ja Pohjois-Irlannin terveydenhuollon numero), Irlannin PPSN ja IHI, Saksan KVNR, Itävallan SVNR, Sveitsin AHV-numero, Alankomaiden BSN, Belgian kansallinen rekisterinumero, Luxemburgin matricule, Ranskan INS (NIR ja NIA), Italian codice fiscale, Espanjan DNI/NIE ja CIP-SNS, Portugalin SNS-numero, Pohjoismaiden henkilötunnukset (Ruotsi, Tanska, Norja D-numero, Suomi, Islanti), Baltian koodit, Puolan PESEL, Tšekin ja Slovakian syntymänumerot, ja Unkarin, Romanian, Bulgarian, Kroatian, Slovenian ja Kreikan numerot ovat tunnettuja indeksille. Jokainen tallennetaan yhden tavan: sen järjestelmän mukaan, välilyönnit ja pisteet poistettu, joten NHS-numero, joka lähetetään yhden järjestelmän toimittamana urn:oid:2.16.840.1.113883.2.1.4.1|999 000 0018 ja toisen järjestelmän toimittamana https://fhir.nhs.uk/Id/nhs-number|9990000018, on yksi tunniste. HL7 v2 PID-3 toisto, jonka tunnistetyyppi on NN ja maan kolmen kirjaimen koodi (NNDEU, NNNLD), luetaan kyseisen maan päänumerona, ja tyyppi NH NHS-viranomaiselta on NHS-numero. Jokaisen numeron tarkistusmerkki testataan: yksi, joka epäonnistuu, säilytetään sen tiedostossa, raportoidaan (maskattuna) vastauksessa ja ei koskaan käytetä linkittämiseen tai etsimiseen, koska yksi virheellinen numero yleensä tekee toisen henkilön numerosta. Tanskan CPR tarkistetaan vain päivämäärän osalta, koska vuoden 2007 jälkeen myönnetyt numerot eivät tarvitse vanhan modulus 11 -testiä.

Asetukset luettelevat jokaisen scheman sen muodossa, sen tarkistuksessa ja järjestelmässä, jossa se tallennetaan. Järjestelmät, jotka on otettu maan omasta FHIR-oppaasta (UK Core, fhir.de, Nictiz, CH Core, ANS, HL7 Italia, MedCom, Ruotsin, Norjan ja Suomen OID-rekisterit), on merkitty sellaisiksi; muut ovat oletusarvoja, jotka voidaan muuttaa kansalliseen arvoon, jonka sivusto voi tehdä kunkin scheman kohdalla (vanha säilytetään edelleen). Scheman luottaminen on yksi merkintä. Kansalliset numerot näytetään kokonaisuudessaan toimittajille ja ylempänä oletuksena ja maskattuna (viimeiset merkit) muille; Kuka näkee numerot kokonaisuudessaan muuttaa sitä, alaspäin katselijoille tai ylöspäin vain hallinnoitsijoille. Jos maan laki rajoittaa numeron käyttöä (Ranskan Référentiel INS, Irlannin PPSN, Belgian kansallinen rekisterinumero, Saksan §290 SGB V), asetukset sanovat niin. GET /api/mpi/schemes luetellaan schemat ja POST /api/mpi/check tarkistaa yhden numeron tallentamatta sitä. FHIR $match ja PIXm vastaavat valtuutetuille asiakkaille numerot kokonaisuudessaan.

Päivämäärä, joka on kirjoitettu päivä- tai kuukausikohtaisesti (08/15/1972), säilytetään sellaisenaan eikä se vastaa vuosi-kohtaista: Yhdysvallat ja Euroopan järjestelmät ovat erilaisia, ja arvaaminen liittäisi väärät henkilöt.

Potilas-indeksin näyttö (Build) näyttää laskelmia, etsii henkilöitä nimen, numeron, EUID:n tai syntymäpäivämäärän mukaan ja avaa kunkin henkilön: heidän tietonsa, jokainen tunniste ja tapahtumien historia, mitä heille on tapahtunut ja kuka on tehnyt sen. Toimittajat päättävät tarkastuksista (Sama henkilö linkittää ne; Eri henkilöt pitää ne erillään lopullisesti), siirtävät tietueen toiseen henkilöön, poistavat tietueen (Ei tämä henkilö) ja yhdistävät kaksi henkilöä. Hallinnoitsijat asettavat kynnykset, luotettavat tunnistejärjestelmät, kansalliset numerot ja EUID:n järjestelmän. Jokainen haku ja jokainen henkilö, joka luetaan, kirjataan audit-lokiin.

Vastaus muille. POST /fhir/Patient/$match (FHIR:n operaatio, kuten IHE PDQm ITI-119 käyttää sitä) ottaa Potilaan ja palauttaa henkilöt, jotka voivat olla se, parhaat ensin, kunkin Potilaan, jonka tunnus on EUID, jokaisella tunnisteella, search.score ja match-grade-laajennus (certain, probable, possible); onlyCertainMatches ja count otetaan huomioon. PIXm (/mhd/Patient/$ihe-pix, ITI-83) vastaa indeksistä: jokaisen henkilöön liittyvän rekordin jokainen tunniste ja EUID. Samoin tekevät PIX ja PDQ HL7 v3:ssa (/pixv3, /pdqv3; ks. IHE:n asiakirjan jakelu), jotka myös ruokkivat sitä.

Rajapinta on /api/mpi (yhteenveto ja haku), /api/mpi/persons/{euid}, /api/mpi/find, /api/mpi/reviews, /api/mpi/records (rekisteröinti, linkitys, linkin poistaminen), /api/mpi/merge ja /api/mpi/settings.

Painot. Oletusarvon Fellegi-Sunter-painot tulevat rekisteröintitietojen kirjallisuudesta sairaalarekisterin tiedoista. Arvio omista tietueista (asetuksissa, hallinnoitsijat; POST /api/mpi/estimate) sovittaa ne sivuston omiin indeksiin odotus-maksimointimenetelmällä, ei tarvita tarkasteltuja pareja: m (sopimus todellisten vastaavuuksien kesken) pareista, jotka estävät yhteen, u (sopimus sattumalta) 20 000:sta satunnaisesti valitusta parista, koska estetyt parit sopivat nimien ja päivämäärien kanssa rakenteen mukaan. Arvio näytetään käytössä olevien painojen vieressä ja ei muuta mitään, kunnes se käytetään ja tallennetaan. Kenttä, jota verrataan liian vähän parien kanssa, säilyttää oletusarvonsa. Sovitus olettaa, että kentät ovat riippumattomia luokan annettua, mitä ne eivät ole täysin, joten suuri muutos tulee käsitellä epäilyksellä.

Mittaus. FEBRL-aineistossa 3 (5 000 syntetistä tietuetta 2 000 henkilölle, duplikaatit, joissa on kirjoitusvirheitä, vaihdettuja kenttiä, puuttuvia arvoja ja lempinimiä; PERFUSE_TEST_FEBRL), rekisteröity tiedostojärjestyksessä ja tarkastelija vastaa jokaiseen jonoon asetettuun pariin oikein:

Linkitetty itsenäänAsetettu eteen oikean henkilön kanssaJäänyt väliinVäärät linkit
Automaattinen linkitys pois (oletus)02 649 / 3 0003510
Päällä, oletuspainot1 6371 0123510
Päällä, painot arvioiden tietueista1 6221 0703080

Yhtään tietuetta ei koskaan linkitetty väärään henkilöön, ja yhtään uutta henkilöä ei asetettu turhaan jonoon. Hävinneet henkilöt eroavat lähes jokaisessa kentässä (syntymäpäivämäärä ja osoite molemmat virheellisiä, esim.) ja saavat alle tarkastelukynnyksen. FEBRL on syntetistä ja siinä on vähän samannimisiä; todellisessa indeksissä on enemmän, joten sen tarkastelujono on pidempi, ja nämä luvut ovat huolehtimisen alaraja, eivät lupa.

8.13 Rajoitettu

CSV ja sen sukulaiset. Valinnat ovat lähteessä rakentajassa, ja muotoiluviite luetellaan tiedostojen avaimet.

Polut osoittavat sarakkeita. Nimetty sarakkeella on käytettävissä, kun otsikkorivi on julistettu tai nimet on annettu; muuten sarakkeet ovat positiivisia.

8.13.1 Sarakkeiden nimeäminen

On kaksi tapaa, ja ne ovat toisensa poissulkevia. Joko ensimmäinen rivi tiedostosta nimeää ne — ensimmäinen rivi nimeää sarakkeet — tai luettele ne itse, järjestyksessä. Otsikkorivin julistaminen tarkoittaa, että riviä ei käsitellä datana.

Jos kumpaakaan ei ole asetettu, sarakkeita voidaan osoittaa ainoastaan positiivisesti, joten suodatin, joka on kirjoitettu nimen perusteella, ei voi vastata mihinkään. Otsikkorivin käyttöönotto poistaa nimien luettelon sen sijaan, että se pitäisi molemmat: otsikkorivillä nimet tulevat tiedostosta, joten jäljelle jäänyt luettelo olisi huomioon otettava, ja kanava, joka lukee niin, että se valitsi nimet, kun tiedosto valitsi ne, on vaikeampi debugata kuin se, joka kieltäytyy.

8.13.2 Mikä suodattimelle tai käsikirjoitukselle näkyy

Yksi rajoitettu asiakirja muuttuu moniksi viesteiksi, joten tämä on mainittava ennen kuin kirjoitat kumpaakaan.

Jako päällä, kaikki toimii rivin mukaan. Deklaratiiviset vaiheet, suodatin ja muodonmuutoskäsikirjoitus näkevät yhden rivin, ja polku tarkoittaa *tämän* rivin saraketta. Suodatin, joka hylkää rivin, hylkää kyseisen rivin ja ei muita, ja vastaanotettu määrä on rivejä eikä asiakirjoja.

Jako pois, viesti on koko asiakirja ja kirjoitus, joka ylittää rivit, kieltäytyy soveltamasta sitä ensimmäiseen. Tämä kieltäytyminen on tarkoituksellista: hiljainen kirjoittaminen ensimmäiseen riviin on se käyttäytyminen, joka tuottaa muunnetun asiakirjan, joka ei ole todella muunnettu.

8.13.3 Kolme, jotka muuttavat sitä, mikä on virhe

Hyväksy rivit, joilla on väärä määrä sarakkeita on pois oletuksena. Rivi, jolla on liian monta tai liian vähän sarakkeita, on silloin virhe, joka on se, joka havaitsee tiedoston, jonka muoto muuttui ilman varoitusmerkkiä. Sen käyttöönotto hyväksyy rivin ja jättää puuttuvat sarakkeet tyhjiksi.

Leikkaa tyhjät merkit jokaisen arvon ympäriltä korjaa yleisen tapauksen, jossa arvo on täytetty sarakkeen leveyteen. Jätä se pois, missä perämerkit ovat merkittäviä, mikä on joskus tapauksessa tunnisteessa.

Säilytä tyhjät rivit riveinä on pois oletuksena ja yleensä pitäisi. Päällä, tyhjä rivi muuttuu rivi tyhjillä sarakkeilla, mikä on merkittävää ainoastaan, kun laskuri on oltava täsmälleen tiedoston mukainen.

8.14 Raaka

Ei lainkaan parsimista. Viesti on tavuja.

Käytä tätä, kun sisältö ei ole mitään, mitä Perfuse ymmärtää, eikä sitä tarvita: PDF, joka siirretään järjestelmien välillä, omistajaformaatti, jo muodostettu asiakirja, joka välitetään muuttumattomana.

Kustannus on, että mitään, joka riippuu rakenteesta, ei toimi — ei kenttätason muodonmuutos, ei suodatinta kentän perusteella, ei kenttätason vertailua pariteettitarkistimessa. Raaka kanava on putki, ja se on rehellinen siitä, että se on putki.

8.15 Valinta

Jos viesti on HL7 v2, käytä hl7, vaikka aiot vain välittää sen muuttumattomana. Viestin käsittely antaa sinulle jäljityksen, kenttätason tilastot, mahdollisuuden suodattaa myöhemmin ja mahdollisuuden vertailla. raw -käsittely parseable sisällölle ei tarjoa mitään ja menettää kaiken tämän.

Käytä raw -käsittelyä, kun käsittely epäonnistuu tai olisi valhe sisällöstä.

CMS:n *Kill the Clipboard* pyytää tarjoajia hyväksymään potilaan tietueet QR-koodista sisäänkirjautumisen yhteydessä ja antamaan vierailutietueen takaisin samalla tavalla. QR-koodi sisältää SMART Health Linkin (shlink:/...): osoitteen, 256-bittisen avaimen ja valinnaisesti etiketin, vanhenemisen ja salasanan lipun. Vaihto → Terveyden linkit lukee yhden.

Vastaanotto. Liitä linkki tai skannaa se kameralla, jossa selain voi (Chrome ja Edge). Perfuse hakee manifestin, salailee jokaisen tiedoston avaimella linkistä, tiivistää FHIR-pakkauksen - kuka potilas on, kuinka monta kunkin resurssin kopiota - ja tarkistaa SMART Terveydenhuollon Kortin sisällön sen julkaiseman avaimen vastaan. *Toimita kanavaan* luovuttaa FHIR-sisällön kanavalle viestinä, jolla se saavuttaa EHR-järjestelmän. Nouto pidetään egress-käytännössä yhteyden aikana, selkeä HTTP kieltäytyy ja palvelimen vastaus, joka ei ole manifestipalvelin, ei näytetä koskaan, koska osoite tuli vieraan henkilön QR-koodista.

Jakaminen. *Jaa* salailee FHIR-pakkauksen, isännöi sitä ja näyttää linkin ja sen QR-koodin kerran. Palvelin pitää salattua tekstiä eikä avainta - se ei voi avata isännöimäänsä sisältöä eikä näyttää linkkiä uudelleen. Salasana on hashoitu; kymmenen väärää salasanaa estävät linkin. Linkit vanhenevat oletusarvoisesti 30 päivän kuluttua, voivat peruutettaa ja luetella, kuinka usein ja kuka ne on noutanut. Käynnistä palvelin -public-url asetuksella, joka on https-osoite, jota potilaiden puhelimet tavoittavat; manifestin URL, jonka se rakentaa, on oltava 128 merkin määräyksen mukainen.

Kortin vahvistaminen. *Vahvista kortti* ottaa numeron shc:/ QR (yksi palanen tai useita), .smart-health-card tiedoston tai JWS:n ja kertoo, vastaako allekirjoitus julkaisijan avainta.

8.17 UN/EDIFACT

dataType: edifact lukee UN/EDIFACT-vaihtoja (ISO 9735): ORDERS, INVOIC, DESADV, IFTSTA ja loput, mukaan lukien eurooppalaiset terveydenhuollon korvaus- ja laboratoriotiedot. Palvelumerkkijonon neuvot (UNA) otetaan huomioon, julkaisemalla vapautusmerkin ja toistojen erottimen (syntaksiversio 4); toiminnalliset ryhmät (UNG/UNE) ovat valinnaisia. Vaihto toimitetaan täsmälleen sellaisena kuin lähettäjä on kirjoittanut sen.

name: supplier-orders
dataType: edifact
edifact:
  envelope: require      # require (default), warn, or ignore
  split: false           # true: one interchange per message
  acknowledge: contrl    # none (default) or contrl
filter: 'UNB-2.1 == "5412345000013"'
source:
  type: as2              # or http, sftp, file, email ...
  # ...
destinations:
  - name: orders
    type: file
    dir: /data/orders
    filter: 'UNH-2.1 == "ORDERS"'

Kirjekuori. UNT-segmentin määrän ja viitteen, UNE-viestin määrän ja viitteen ja UNZ-määrän ja viitteen vertaillaan vaihdon sisällön kanssa. require-asetuksella, joka on oletusarvo, epäsovinnaisuus hylkää vaihdon (se on tapa, jolla keskeytynyt siirto näkyy); warn hyväksyy sen ja kirjaa varoituksen; ignore ei tarkista.

Polut, kanavan ja kohde-suodattimien osalta, lasketaan alkiot ja komponentit yhdestä lähtien siinä järjestyksessä, jossa segmentti on kirjoitettu, kuten toteutusoppaat niitä numeroidaan: BGM-2 (asiakirjan numero), BGM-1.1, NAD(2)-2.1 (toisen NAD:n osapuoli), LIN-3(2).1 (toisto), UNB-2.1 (lähettäjä), UNH-2.1 (viestin tyyppi). Ilman ilmennystä osoitteessa osoitetaan jokainen.

Jakaminen toimittaa yhden vaihdon kunkin viestin kohdalla, kunkin alkuperäisellä UNB:llä (ja ryhmäotsikolla) ja trailerilla, joka laskee yhden, jotta tilaus voidaan suodattaa, etsiä ja yrittää uudelleen omalla tavallaan. Kohde-suodattimet näkevät kunkin palasen. Tiedoston kohde nimeää tiedostot viestityypin mukaan (ORDERS_INVOIC-20261017.edi), ja ${control_id} on vaihdon viite.

CONTRL. acknowledge: contrl-asetuksella lähettäjä, joka lähettää HTTP:n kautta, saa vastaukseksi CONTRL-syntaksin ja palveluraportin: UCI-toiminto 7, kun vaihto luettiin ja toimitettiin, 4, kun se hylättiin tai ei voitu toimittaa (HTTP 400 tai 502 sitten). Sitä ei voida yhdistää split-ominaisuuden kanssa, koska CONTRL vastaa koko vaihtoa. AS2:n yli kumppanin vastaanotto on vahvistus.

Ei tarjota: viestihakemistot (jotka jakavat ORDERS D.96A: n segmentit), joten rakennetta tarkistetaan, ei sisältöä; muunnokset, jotka kirjoittaisivat uudelleen kumppanin asiakirjan; ja suodatin- tai muunnoskriptit (esikäsittelijä ajaa ennen syntaksin tarkistusta). Tarkistettu pydifact 0.1.8: n, riippumattoman parserin, molemmissa suunnissa.

9 Vahvistukset

Vahvistus kertoo lähettäjälle, mitä tapahtui. HL7 v2:lle MLLP-yhteyden kautta se on ACK-viesti; lähettäjä ei lähetä seuraavaa viestiä, ennen kuin se saapuu, ja yleensä lähetetään uudelleen, jos se ei saavu.

Vahvistusten väärät ovat yleisin tapa, jolla integraatio häviää hiljaisesti, koska lähettäjä, jota vahvistetaan, ei ole syytä valittaa.

9.1 Ajoitus

Kattaa viestivirran, ja yhteenveto on: ack.when on oletusarvoisesti on_delivery, mikä tarkoittaa, että vahvistus lähetetään vain silloin, kun jokainen käytössä oleva kohde on hyväksynyt viestin. on_receipt lähettää sen heti, kun viesti on parsittu ja jonottu.

9.2 Mitä Perfuse lähettää

AA, kun viesti hyväksyttiin, AE, kun se hylättiin syystä, johon lähettäjä voi vaikuttaa, ja AR, kun se hylättiin syystä, johon lähettäjä ei voi vaikuttaa.

Ero AE ja AR on kuka on tehtävä. AE tarkoittaa, että viestissä oli ongelma - kenttä, joka ei voitu parsia päivämääräksi, puuttuva vaadittu segmentti - ja lähettäjä voi korjata sen ja lähettää uudelleen. AR tarkoittaa, että Perfuse ei voinut hyväksyä sitä riippumatta sisällöstä, mikä yleensä tarkoittaa konfiguraatio- tai saatavuusongelmaa tässä päässä. Lähettäjä, joka lähettää uudelleen AR:n jälkeen, saa saman vastauksen.

9.3 Tunnistaa tämän moottorin

ack.application ja ack.facility täyttävät MSH-3 ja MSH-4 vahvistuksessa.

Kun molemmat ovat tyhjiä, vahvistus peilaa alkuperäisen vastaanottajan — se käyttää samaa kuin saapuva viesti oli MSH-5 ja MSH-6. Se on se, mitä useimmat lähettäjät odottavat, ja se on oletusarvo juuri siksi.

Aseta ne eksplisiittisesti, kun lähettäjä validoi ne, tai kun useat Perfuse-ekземпляrit käsittelevät samaa syötettä ja tarvitsevat tietää, kuka vastasi.

9.4 Käynnistystapahtuma

ack.include_trigger_event lähettää ACK^A01 sen sijaan, että pelkän ACK:n.

Jotkut vastaanottajat vaativat sitä ja toiset hylkäävät sen, miksi se on eksplisiittinen valinta ilman oletusta. Jos lähettäjä hylkää vahvistuksesi ja sisältö näyttää oikealta, tämä on ensimmäinen asia, jonka kannattaa kokeilla.

9.5 Negatiiviset vahvistukset eivät ole virheitä, joita pitäisi piilottaa

NACK, joka käsitellään onnistuneena, on yksi vaarallisimmista virheellisistä konfiguraatioista, ja se on tarpeeksi yleinen ollakseen arvoinen nimeäminen. Se tapahtuu, kun kohde lähettää takaisin negatiivisen vahvistuksen ja lähettävä puoli merkitsee *siirron* onnistuneeksi, koska tavut menivät ulos ja jotain tuli takaisin.

Perfuse lukee vahvistuksen, jonka se saa MLLP-kohteesta, ja merkitsee tuloksen vastaavasti. AE tai AR alijärjestelmästä on toimitusvirhe, jota yritetään uudelleen kohteen käytännön mukaan, ja se vaikuttaa epäonnistumisnopeuteen, joka laukaisee hälytykset.

Jos siirtymässä olet toisesta moottorista, tämä on arvoista varmistaa eksplisiittisesti omassa liikenteessäsi sen sijaan, että oletetaan. Pariteettitarkistin näyttää sen: kohde, jonka vanha moottori merkitsi toimitetuksi ja Perfuse merkitsee epäonnistuneeksi, tarkoittaa yleensä, että vanha moottori oli ohittamassa NACK:ia.

9.6 Aikakatkaisut

Vahvistuksen odottaminen on rajattu. Kun se ei saavu ajoissa, toimitus on epäonnistunut ja se on jonottamassa uudelleenkokeilua varten.

Aikakatkaisu ei ole sama kuin hylkäys, ja se merkitään eri tavoin. Hylkäys tarkoittaa, että kaukainen puoli tutki viestin ja hylkäsi sen; aikakatkaisu tarkoittaa, ettei tiedetä, käsiteltiinkö sitä. Se ero päättää, onko uudelleenkokeilu turvallista: uudelleenkokeilu hylkäyksen jälkeen on turhaa, ja uudelleenkokeilu aikakatkaisun jälkeen riski duplicatesta. Perfuse uudelleenkokeilee aikakatkaisun jälkeen, koska puuttuva kliininen viesti on yleensä pahempi kuin duplikaatti, ja vastaanottajajärjestelmä on yleensä kykenevä havaitsemaan toistuvan viestin tunnisteen.

Onko se kauppa oikea tietyn syötteen kohdalla, on arvio, ja se on tehtävä tietoisesti kaikissa tapauksissa, joissa duplikaatti voi johtaa kliiniseen seuraamukseen — tilaus, lääkehoito — sen sijaan, että hyväksytään oletusarvo hiljaisesti.

9.7 Lähteet, jotka eivät vahvista

Kaikilla kuljetuksilla ei ole vahvistuksen käsitettä. Tiedostolähde ei voi lähettää vahvistusta mihinkään; välittäjälähde vahvistaa välittäjälle eikä alkuperäiselle lähettäjälle; HTTP-lähde vastaa tilakoodilla.

Kun lähde ei voi toimittaa vahvistusmuotoa, jonka kanava pyytää, kanava hylätään latauksen aikana eikä se käynnisty ja vahvista hiljaisesti. Kanava, joka uskoo vahvistavansa ja ei tee sitä, on pahempi kuin se, joka ei käynnisty.

9.8 X12-vahvistukset

Kaikki edellä mainittu on HL7 v2:sta. X12:lla on omat vahvistukset, ja toisin kuin v2, ne ovat pois päältä oletuksena: tyhjä asetus tarkoittaa, ettei mitään lähetetä.

Se oletus on turvallinen, koska kauppakumppani, joka ei odota vahvistusta ja saa sen, voi käsitellä sitä pyynnöttömänä vaihtona. acknowledge-avain X12-kanavalla ottaa yhden neljästä arvosta:

ArvoMitä lähetetään
noneMitään. Oletus.
999Toteutusvahvistus. Korvaa 997:n HIPAA-transaktioissa.
997Toiminnallinen vahvistus. Vanhempi, ja edelleen se, mitä monet maksajayhteydet odottavat.
ta1Vaihtovahvistus, joka koskee kirjekuorta eikä sen sisältöä.

Kuka vahvistus lähetetään, on ominaisuus kauppakumppanisuhteelle eikä viestille, miksi se on konfiguroitava ja ei voida johtaa. 999 korvaa 997:n HIPAA-transaktioissa, mutta monilla kumppaneilla — erityisesti vanhemmilla maksajayhteyksillä — on odotus 997:lle, ja he käsittelevät 999:ä tuntemattomana tiedostona.

Vahvistuksen lähettäminen väärin on pahempi kuin mitään lähettämättä. Se vastaa kysymykseen, jota kukaan ei ole kysynyt, ja jättää oikean kysymyksen auki, eikä lähettäjällä ole mitään keinoa erottaa niitä toisistaan.

9.9 HL7 v3-vahvistukset

HL7 v3-kanava lähettää vahvistuksen oletuksena, mikä on vastakkainen kuin X12 ja arvoista tietää.

Syy on kuljetusmuoto eikä standardi: v3-viestintä saapuu yleensä synkronisesti yhteydenottajan odottaessa vastausta, ja lähettäjä, joka ei saa mitään, yrittää yleensä uudelleen. Tämä on tapa, jolla potilas rekisteröityy kolme kertaa.

Sen poistaminen on mahdollista ja se on tehtävä nimenomaisesti — "ei asetettu" ja "asetettu epätodeksi" ovat tarkoituksella erilaisia, joten oletusarvo pysyy voimassa, ellet toisin määrätä.

10 Toimitus, jonotus ja uudelleenyritys

Kohde, jota ei voida tavoittaa, on normaali tapaus, ei poikkeus. Järjestelmät käynnistetään uudelleen, verkkoyhteydet katkeavat, ja sairaalan rajapintamoottori on käyttämätön omassa ylläpitäjäikkunassa. Toimitus perustuu siihen.

10.1 Jono kohdekohtaisesti

Attempt Delivered queue on disk — per destination 1, 2, 3, 4 … Retry growing backoff Dead letter kept, never discarded the same message, at the front Each destination has its own queue, so one slow receiver does not hold up the others. The queue is on disk, so a restart does not lose it. Order is preserved: message 2 is not attempted before message 1 succeeds or is given up on. A message that exhausts its attempts is dead-lettered and kept. Nothing is deleted to make a queue look healthy.

Kullakin kohteella on oma jono. Epäonnistunut kohde ei vaikuta muihin, ja kullakin on oma syvyys, ikä ja uudelleenyritystila.

Jonotus on kohdekohtainen eikä kanavakohtainen, koska epäonnistuminen on kohdekohtainen. Kanavakohtainen jono pitäisi pidemmän aikaa toimivien järjestelmien toimituksen, koska neljäs järjestelmä on pois käytöstä, ja kaksi tilannetta — yksi kohde ei ole saatavilla, kaikki neljä eivät ole saatavilla — näyttävät samalta tilastojen mukaan.

10.2 Jono-asetukset

queue on a destination:

AvainMitä se tekee
enabledOnko epäonnistuneet viestit jonossa lainkaan.
max_attemptsKuinka monta kertaa yritetään ennen antamista periksi.
backoffOdota ennen ensimmäistä uudelleenyritystä.
max_backoffKatto kasvavalle odotukselle.
max_depthEnimmäismäärä viestejä, jotka voidaan pitää. Ei asetettu tarkoittaa, että ei ole rajoitusta.
retain_hoursKuinka kauan toimitettu viesti pidetään. Ei asetettu tarkoittaa, että se pidetään loputtomasti.

Kaksi viimeistä puuttuivat tästä taulukosta ja rakentajasta, ja ne ovat pari, joka estää levyn täyttymisen. Jono, jolla ei ole kumpaakaan, kasvaa, kunnes tiedostojärjestelmä on täynnä, ja tämä epäonnistuminen ilmenee jonkin toisen asian murtumisena — kirjoitusvirhe kokonaan toisaalla — eikä jono-ongelmana.

Uudelleenyritys kasvaa yritysten välillä max_backoff:iin saakka. Kasvava ei ole kiinteä, koska kohde, joka on pois käytöstä, on yleensä pois käytöstä minuuteista sekunteihin, ja uudelleenyritys joka sekunti kymmenen minuutin ajan tuottaa useita satoja lokitapahtumia, jotka hautaavat sen, mikä on tärkeää.

10.3 Järjestys säilyy

Kohteen sisällä viestit toimitetaan saapumisjärjestyksessä, ja viesti, joka epäonnistuu, pitää paikkansa. Myöhemmät viestit odottavat sen takana eivätkä ohita sitä.

Tämä on oikea oletusarvo kliinisille tiedoille — sairaalahoito ja lähtö, jotka sovelletaan väärässä järjestyksessä, ovat huonompia kuin molemmat myöhässä — ja sillä on seuraus, joka on ymmärrettävä: yksi viesti, joka aina epäonnistuu, pitää kaiken sen takana olevan jonossa.

Siksi jonon syvyys ja jonon ikä ovat erilliset hälytysolot. Syvä jono, joka on tyhjenevä, on kiireinen järjestelmä. Jono, jonka vanhin viesti vain vanhenee, on jumissa, ja hälytystyypit queue-depth, queue-age ja queue-stuck erottavat ne toisistaan.

Myrkyllinen viesti — sellainen, joka ei koskaan onnistu, olkoonpa sitä yritetään kuinka usein tahansa — on tarkkaan ottaen epäonnistuminen, jolle tämä suunnittelu on altis. max_attempts on se, mikä rajoittaa vahinkoa: sen jälkeen viesti merkitään epäonnistuneeksi ja jono etenee. max_attempts asettaminen hyvin korkeaksi toiveena lopullisesta onnistumisesta muuttaa yhden epäonnistuneen viestin pysähtyneeksi syötteeksi.

10.4 Kun jonotus on poistettu

Kun queue.enabled on epätosi, epäonnistunut toimitus on epäonnistunut toimitus. Se merkitään ja ei yritetä uudelleen.

Tämä on oikea valinta, kun myöhäinen tieto on pahempaa kuin ei mitään tietoa — reaaliaikainen näyttö, sivuva kuulutusjärjestelmä, mitä tahansa, jossa viesti, joka toimitetaan neljäkymmentä minuuttia tapahtuman jälkeen, olisi harhaanjohtavaa eikä vain myöhässä.

Se on väärä valinta kaikelle, mitä tallennetaan tietueeseen, jossa viesti on yhtä kelvollinen tunnin kuluttua.

10.5 Uudelleenyritys vastaan jono

On kaksi mekanismia, ja ne toimivat eri tasoilla.

retry kohdassa määrittää välittömät yritykset yhden toimituksen sisällä — yhteys, joka epäonnistuu, yritetään uudelleen lyhyen tauon jälkeen ilman poistumista toimitusreitistä. Tämä käsittelee hetkelliset virheet: yhteys, joka on pudonnut, hetkellinen kieltäytyminen.

queue määrää, mitä tapahtuu kun nopeat uudelleenyritykset on lopetettu. Viesti poistuu toimitusreitistä ja yritetään uudelleen myöhemmin pitemmällä aikataululla.

Molemmat ovat olemassa, koska kaksi epäonnistumista ovat erilaisia. Yhteys, joka on resetoitu ensimmäisellä yrityksellä, on yleensä poissa toisella yrityksellä, ja sen kautta jonoa olisi turha lisätä minuutteja viiveitä virheeseen, joka kesti millisekunteja. Kohde, joka on ollut pois käytöstä ylläpidon vuoksi, ei tule takaisin kolmen välittömän yrityksen kuluessa, ja sen hakkaaminen on turhaa.

10.6 Mikä HTTP-päätepisteen kautta lähetetyksi luetaan

HTTP-kohteella on kolme asetusta, jotka päättävät, katsotaanko viesti lähetetyksi, ja kaikki kolme ovat kohteessa rakentajassa.

Status codes that mean delivered. Empty means any 2xx. Some endpoints answer 202 Accepted for something they have not processed yet, and some answer 200 with an error in the body — the second is what *Treat as failed if the reply contains* is for. Setting an explicit list is worth doing when a partner has told you which code means what, because the alternative is discovering the difference from a message that was never delivered and never queued.

Seuraa uudelleenohjauksia. Päällä oletuksena, ja tarkoituksella. Uudelleenohjaus voi osoittaa toiseen isäntään, joten sen seuraaminen lähettää viestin jonnekin, mihin kukaan ei ole määritellyt, ja ilmoittaa onnistumisen.

Kantaja-tunniste. Lähetetään Authorization-otsakkeena. Se tallennetaan kanavan kanssa ja sitä ei koskaan näytetä uudelleen, joten tyhjän ruudun jättäminen, kun muokkaat olemassa olevaa kanavaa, säilyttää jo tallennetun tunnisteen sen sijaan, että se tyhjentäisi sen.

10.7 Nimeäminen ja arkistokansio

Tiedoston kohde liittää oletusarvoisesti yhteen tiedostoon päivittäin ja viestityypin mukaan (20261012-ADT_A01.hl7), MLLP-kehyksessä, jotta tiedosto toistaa perfuse send-käskyllä. Neljä asetusta kohteessa muuttaa sitä.

Tiedostonimi (file_name) luo yhden tiedoston kunkin viestin kohdalla, nimettynä ${date}: n, ${timestamp}: n, ${control_id}: n, ${message_type}: n ja ${destination}: n mukaan. Tiedostonimi, joka on jo olemassa (sama ohjaus-ID kahdesti), saa yksilöivän etuliitteen sen sijaan, että se ylikirjoittaisi viestin siinä.

Liitä (append: true) kirjoittaa jokaisen viestin tiedostoon, jonka Tiedostonimi nimeää, joten ${date}.hl7 on yksi tiedosto päivittäin jokaiselle tyypille.

Etuliite kirjoittamisen aikana (temp_suffix, yksi tiedosto kunkin viestin kohdalla) oletetaan .part ja poistetaan uudelleennimeämällä, kun tiedosto on valmis. Kuka tahansa, joka kerää nämä tiedostot, ei pidä poimia puolivälissä olevaa tiedostoa, ja uudelleennimeäminen kansiossa on atomia. Muuta sitä vain, jos kerääjä suodattaa toisen laajennuksen perusteella.

Poista jonka jälkeen (retain_hours) karsii kansiossa olevia tiedostoja, jotka ovat vanhempia kuin annettu tuntimäärä, tarkistettuna enintään joka kymmenes minuutti, kun viestejä saapuu. Vain suorat tiedostot kansiossa poistetaan, ei koskaan alikansioita. Tyhjä tai nolla pitää ne ikuisesti, mikä on oletusarvo ja on päätös eikä ylihuomio - mutta arkisto, jota kukaan ei karsi, täyttää levykkeen, ja täysi levyke pysäyttää kanavan eikä arkistointia.

10.8 Lähetys FHIR-palvelimeen

Kolme asetusta päättää, kuinka paljon tarkistetaan ennen kuin paketti lähtee.

Väitä US Core -mukautumista lisää profiilin jokaiseen resurssiin. Väitä sitä vain, kun resurssi sisältää, mitä profiili edellyttää, koska vastaanottaja voi validoida väitteen perusteella ja hylätä paketin, joka muuten olisi hyväksytty.

Validoi ennen lähettämistä tarkistaa jokaisen resurssin täällä vastaanottajan sijaan. Hylkäys kaukaisessa päässä kertoo sinulle vähemmän, myöhemmin, ja usein vain lokissa, jota et voi lukea.

Käsittele varoitukset hylkäyksinä vaikuttaa vain, kun validointi on päällä, ja ohjaus on käytettävissä vain, kun se on. Se on tarpeeksi tiukka estämään paketin, jonka vastaanottaja hyväksyisi, joten se kuuluu syötteen, jota otetaan käyttöön, eikä palvelussa olevaan.

10.8.1 Isännöidyt FHIR-palvelut

fhir-kohde auth-lohko kirjautuu hosted-palveluihin, jossa liimattu bearer-token loppuu tunnin kuluttua:

fhir:
  url: https://healthlake.us-east-1.amazonaws.com/datastore/<id>/r4/
  auth: {type: aws, access_key_id: ${AWS_ACCESS_KEY_ID}, secret_access_key: ${AWS_SECRET_ACCESS_KEY}}

aws allekirjoittaa jokaisen pyynnön AWS HealthLake: lle Allekirjoitusversion 4: llä, alueen lukien URL: sta. azure saa Microsoft Entra -tunnistustodistuksen Azure Health Data Services: stä tenant_id: stä, client_id: stä ja client_secret: stä - sovellusrekisteröinti, joka sisältää FHIR Data -avustajan roolin - FHIR-palvelun URL: n yleisönä. client_credentials tekee saman OAuth 2.0: n token_url: n vastaan. Todistukset uudelleen käytetään, kunnes ne vanhenevat minuutin ennen vanhenemista. Samat valinnat ovat kohteen Isännöity palvelun kirjautuminen kanavan rakentajassa.

10.8.2 Julkinen terveydenhuollon ilmoittaminen

Merkitse ilmoitettavat tilat terveydenhuollon viranomaisille FHIR-kohteessa, ja se lähettää tapausraportteja pinoraporttien sijaan. Jokainen viesti tarkistetaan ilmoitettavan tilan laukaisinkoodin suhteen: diagnosoinnin, laboratoriotestin tai koodatun tuloksen. Jos siinä on yksi, viesti muuttuu HL7 eCR 2.1.2 eICR:ksi, joka on pakattu eCR-viestiin ja lähetetään URL-osoitteen $process-message-osoitteeseen. Jos siinä ei ole yhtään, mitään ei lähetetä, eikä mitään epäonnistu; kohde laskee sen ei-ilmoitettavaksi.

fhir:
  url: https://ecr.agency.example/fhir
  ecr:
    rctc: /etc/perfuse/rctc.json
    source: https://fhir.springfield-general.example/fhir
    facility: {name: Springfield General Hospital, phone: +1-217-555-0100, city: Springfield, state: IL}

rctc on ilmoitettavien tilojen laukaisinkoodit FHIR-arvojoukkona tai eRSD-pakettina. Siihen tarvitaan UMLS-lisenssi, joten sitä ei sisällytetä; ilman sitä käytetään lyhyttä sisäänrakennettua näyteaineistoa vain testaamista varten. source on kohta, jossa virasto lähettää ilmoitettavuusvastauksensa. Laitos on pakollinen, koska eCR pyytää puhelinnumeroa ja osoitetta, ja v2-viesti ei sisällä niitä.

Raportti kertoo, mitä viesti puuttui, eikä keksitä sitä, ja jokainen aukko kirjataan. Yritä viesti FHIR-laboratorion julkisen terveydenhuollon tapausraportti-paneelissa ennen kuin osoitat live-syötteen virastolle.

10.8.3 Laboratoriotulokset julkiselle terveydenhuoltoon: ELR

perfuse elr -config elr.yaml results.hl7 muuttaa laboratorion tulokset HL7 2.5.1 ELR-viesteiksi, jotka osavaltion terveysvirastot vastaanottavat, yksi kullekin viestille, jossa on ilmoitettava tulos, ja vain ne tilaukset, jotka sisältävät yhden: täydellinen verikoe positiivisen SARS-CoV-2-testin rinnalla ei ole julkisen terveydenhuollon asia. Laukaisinkoodit ovat samat kuin tapausraportoinnissa, RCTC, jonka lataat tai sisäänrakennettu näyteaineisto.

ELR nimeää kaikki OID: n tai CLIA-numeron mukaan, mitä kuitenkaan mikään laboratorion syöte ei sisällä lähettäjälle ja vastaanottajalle, joten ne tulevat tiedostosta:

sending_application: {namespace: Perfuse, id: 2.16.840.1.113883.19.5.9, type: ISO}
sending_facility: {namespace: Springfield Lab, id: 2.16.840.1.113883.19.5, type: ISO}
receiving_application: {namespace: ELR, id: 2.16.840.1.113883.19.6.1, type: ISO}
receiving_facility: {namespace: State DOH, id: 2.16.840.1.113883.19.6, type: ISO}
processing: T
ordering_facility: {name: Springfield Clinic, phone: "+1 217 555 0100", line: 1 Main St, city: Springfield, state: IL, postalCode: "62701"}
performing_lab: {name: Springfield Lab, line: 2 Lab Rd, city: Springfield, state: IL, postalCode: "62701"}
performing_lab_clia: 14D0000000
placer_authority: {namespace: SPRINGFIELD-EHR, id: 2.16.840.1.113883.19.5.1, type: ISO}
filler_authority: {namespace: SPRINGFIELD-LAB, id: 2.16.840.1.113883.19.5.2, type: ISO}

Tilauksen tekijä, suorittava laboratorio ja määräävät viranomaiset käytetään ainoastaan siinä tapauksessa, että laboratorion viesti jättää ne pois, ja jokainen käyttö on muistiinpano. Se, mitä vain laboratorio tietää, ei koskaan täytetä: tulos, jolla ei ole näyte-tyyppiä, menee SPM-4 tyhjänä ja muistiinpanona, koska arvattu näyte julkisen terveydenhuollon raportissa on pahempi kuin aukko, jonka osavaltio voi kysyä. Aloita processing: T:lla, kun osavaltion käyttöönoton tiimi testaa syötettä.

Se, mitä laboratorio teki oikein, säilytetään sellaisenaan, kuin se lähetettiin. Lapsitilaus (herkkyysohjelma tai refleksitesti, jonka OBR-29 nimeää vanhempansa ja jolla ei ole omaa ORC:ää) menee vastaanotettuna, ilman että sille keksitään ORC:ää tai näytettä, ja lapsi, jolla ei ole omaa ilmoitettavaa tulosta, menee vanhempansa kanssa, koska herkkyysohjelma ei merkitse mitään ilman siihen kuuluvaa kulttuuria. Muistiinpano PID:n jälkeen pysyy potilaan kanssa, ja ORC-14, palautepuhelinnumero, kopioituu OBR-17:stä, kun laboratorio on laittanut sen sinne. Kaikki 28 esimerkkiviestiä, jotka ONC julkaisee ELR-sertifioinnin työkaluun, tulevat voimassa ilman virheitä.

MSH-2 kirjoitetaan ^~\&#, viisi merkkiä, jotka ELR-julkaisun 1 virhekorjaukset vaativat ja ONC:n sertifioinnin työkalu tarkistaa. Jos osavaltion opas näyttää vanhemman neljän merkin, lisää encoding_characters: "^~\\&" tiedostoon.

Lähettääksesi ne kanavan kautta komentorivin sijaan, anna kohteelle, joka ylettyy osavaltioon, elr-lohko, joka nimeää saman tiedoston. Jokainen laboratoriotulos muotoillaan uudelleen lähtiessä, ja sellainen, jolla ei ole mitään ilmoitettavaa, ei lähetetä ollenkaan, mikä lasketaan toimitetuksi, ei epäonnistuneeksi: osavaltio pyysi ainoastaan ilmoitettavia tuloksia.

destinations:
  - name: state-elr
    type: mllp                 # or http, sftp, file: whatever the state's onboarding team gives you
    address: elr.health.state.example:6661
    tls: {enabled: true}
    elr:
      config: elr.yaml         # beside this channel file
      rctc: rctc.json          # optional; the built-in sample is for testing only

Lohko soveltuu HL7 v2 -kanavaan, joka toimittaa viestin itse (mllp, http, tcp, tiedosto, sftp, ftp, S3, Azure Blob, soap, viestinvälittäjät tai toinen kanava); kanava kieltäytyy lataamasta muuten, ja kun tiedosto puuttuu tai siitä puuttuu lähettävä laitos, vastaanottava sovellus tai vastaanottava laitos. Muistiinpanot kirjoitetaan lokitiedostoon viestin ohjaus-ID:n kanssa.

ELR-tiedosto on kanavan kumppani, ei kanava: perfuse check ja kanavien näyttö ohittavat sen sen sijaan, että ne ilmoittaisivat kanavan, joka ei lataudu. Kanavan rakentajassa samat kaksi asetusta ovat kohteen alla Laboratorioraportointi (ELR 2.5.1); laukaisinkoodien kenttä avautuu, kun ELR-tiedosto on nimeämistilassa, ja tallentaminen kieltäytyy tiedostosta, joka ei ole kanavan vieressä.

10.8.4 DICOMweb-arkistot

type: dicomweb tallentaa kunkin kohteen STOW-RS: Orthanc, dcm4chee, pilvi-kuvauspalvelut tai Perfuse-palvelimen oma arkisto. Anna palvelun juuri (https://pacs.example/dicom-web); /studies lisätään, ja URL, joka jo päättyy /studies-merkkijonoon, hylätään sen sijaan, että se postittaisiin /studies/studies. Todenna token (kantavatunniste) tai username ja password avulla; headers lisää muita, kuten pilvipalvelun projektiotsikkoa. Kanava tarvitsee dataType: dicom.

Palvelimen vastaus päättää tuloksen, ei ainoastaan sen tilakoodi. Kohde, jonka vastaus luettelee epäonnistuneeksi, on epäonnistunut toimitus DICOM-epäonnistumissyytä vastaavasti, ja sama koskee 202-koodia, joka ei luettele mitään tallennettua: palvelin otti pyynnön ja piti siitä mitään. Aikakatkaisu oletusarvoisesti on kaksi minuuttia, koska suuri sarja on hidasta.

10.8.5 Asiakirjarekisterit (IHE XDS.b)

type: xds julkaisee kunkin kliinisen asiakirjan XDS.b-repositorioon ITI-41 Provide and Register -menetelmällä: CDA-asiakirja tai sellainen, jonka HL7 v2 -viesti (MDM, ORU) sisältää. Metatiedot tulevat asiakirjasta ja kohteen asetuksista (source_id, patient_domain, facility_type, practice_setting), ja repositorion RegistryResponse päättää toimituksen. Katso IHE asiakirjojen jakaminen.

10.8.6 Rokotusten rekisterit

Jokainen Yhdysvaltain osavaltion immunisaatiorekisteri (IIS) ottaa vastaan HL7 2.5.1 -viestejä samalla SOAP-rajapinnalla, jonka CDC julkaisi vuonna 2011 (nimiavaruus urn:cdc:iisb:2011). Siinä on kaksi toimintoa: connectivityTest, joka osoittaa päätepisteen, ja submitSingleMessage, joka sisältää viestin. VXU^V04 -viesti ilmoittaa rokotuksesta ja tulee takaisin ACK-viestinä; QBP^Q11 -viesti kysyy potilaan historiasta ja ennusteesta ja tulee takaisin RSP^K11 -viestinä.

Valitse Rokotusten rekisteri (CDC IIS web-palvelu) kohteen palveluna tai kirjoita profile: cdc-iis:

destinations:
  - name: state-registry
    type: soap
    soap:
      profile: cdc-iis
      url: https://iis.state.example/iis-ws/cdc
      username: clinic-submitter       # the registry account for this submitter
      password: "..."
      facility_id: FAC-1234            # optional in the WSDL; many registries require it
    queue: {enabled: true}

Perfuse luo kirjekuoren, joten viestiin ei ole kirjoitettavaa. Käyttäjänimi ja salasana sijoitetaan pyynnön sisään, CDC WSDL:n määrittelemään paikkaan, eikä HTTP-autentikointiin. Versio on SOAP 1.2, WSDL:n sidonta, ellet aseta version: "1.1" rekisteriä varten, jonka opas pyytää sitä. Jos rekisteri vaatii asiakasvarmenteen, aseta kohteen tls kuten mihin tahansa HTTPS-puheluun.

Rekisterin vahvistus päättää, toimittaako viesti, ei HTTP-tila. Rekisteri vastaa hylätyn kuvauksen HTTP 200 ja AR:n sisällä, joten kohde, joka luotti tilaan, ilmoittaisi hävinneen immunisaation toimitetuksi.

Rekisterin vastausPerfuse-tallenteet
AA (tai CA)Toimitettu.
AE jonka ERR-segmentit ovat varoituksia (ERR-4 W tai I)Toimitettu. Varoitukset ovat vastauksessa.
AE jolla on ERR-4 E tai ERR ilman vakavuuttaEpäonnistui, jokaisen ERR:n sijainnin, koodin ja tekstin virheessä.
AR tai CREpäonnistui, samalla tavalla.
SOAP-virhe (väärä salasana, viesti liian suuri)Epäonnistui, rekisterin syystä.
Jokin, joka ei ole HL7-viestiEpäonnistui.

warnings_are_errors: true (Käsittele varoitukset virheinä) tekee jokaisen AE: n odottavan henkilöä. Vastaus, jota vastauskriptit ja HTTP-kutsuja, joka odottaa kanavaa, lukee, on rekisterin HL7-viesti: ACK tai RSP historiassa ja ennusteessa. examples/iis sisältää kolme kanavaa, joista aloittaa: VXU EHR: stä MLLP: n yli, QBP-kyselyt HTTP: n yli ja paikallinen stand-in rekisteriä varten.

Yhteydet-kojussa kysytään rekisteriltä connectivityTest, kun mitään ei ole lähetetty seitsemään päivään. Tämä toiminto on olemassa tätä tarkoitusta varten ja lähettää mitään, joten se on ainoa sovellustason tarkistus, jonka Perfuse tekee. Se osoittaa osoitteen, TLS: n ja SOAP-sidonnan, ei käyttäjänimeä ja salasanaa; vain oikea lähetyksen testaa ne.

SOAP-lähde voi vastata samalla tavalla: Vastaa immunisaatiorekisterinä, tai profile: cdc-iis lähde. Se toistaa connectivityTest, ottaa viestin submitSingleMessage: sta, palauttaa kanavan vahvistuksen return: iin ja palvelee CDC WSDL: ää ?wsdl: ssä. Käyttäjänimi ja salasana, kun ne on asetettu, tarkistetaan pyynnön arvoja vastaan, ja väärä pari saa WSDL: n SecurityFault: in. Viesti, jonka kanava hylkää, palautuu aina NAK: na, ei koskaan virheenä, kuten CDC-opas sanoo. Käytä sitä testiduplikaattina tai vastaanottamaan lähetyksiä rekisterin tavoin.

Ei käsitellä: osavaltiokohtaiset osat rekisteröinnissä. Jokaisella rekisterillä on oma päätepiste, tili prosessi ja paikallinen profiili 2.5.1-opasta (vaaditut RXA- ja OBX-kentät, VFC-kelpoisuus, kieltäytymiskoodit). Nämä ovat viestien sisältöä, jonka kanavan muunnokset muotoilee; mikään osavaltion päätepiste ei ole sisäänrakennettu. Perfuse on testattu itseään ja tallennettuja rekisterivastauksia vastaan, ei elävää osavaltion rekisteriä vastaan.

10.9 Kun kuljetus sanoo kyllä ja viesti ei saapunut

"Tuli tämä perille" on usein kysymys, jota kuljetus ei voi vastata. MLLP-vastaanottaja palauttaa sovelluksen vahvistuksen, jonka merkitys on sen tekstin mukainen. HTTP-vastaanottaja palauttaa 200 virhedokumentin kanssa. Molemmissa tapauksissa kuljetus onnistui ja viesti ei saapunut.

Tarkastele vastausta kohdistuu määränpäähän, joka ottaa vastaan kriittisen vastauksen. Palauta false tai heitä, ja toimitus on merkitty epäonnistuneeksi — mikä tarkoittaa, että se yritetään uudelleen, se laitetaan jonoon ja se näkyy epäonnistumisen määrässä sen sijaan, että se olisi hiljaisesti laskee toimitetuksi.

Se tarjotaan vain määränpäille, jotka voivat vastaanottaa vastauksen. Määränpäähän, joka ei voi, se hylätään latauksessa sen sijaan, että se jätettäisiin koskaan suorittamatta.

10.10 Mikä toimituksen tulos merkitsee

TulosMerkitys
DeliveredMääränpää hyväksyi viestin. MLLP:lle saatiin myönteinen vahvistus.
QueuedToimittaminen epäonnistui ja viestiä yritetään toimittaa uudelleen.
FailedToimittaminen epäonnistui ja sitä ei yritetä toimittaa uudelleen, joko koska jonotus on pois päältä tai yritykset on lopetettu.
FilteredMääränpää hylkäsi viestin omalla suodattimellaan. Tämä ei ole virhe.

Nämä ovat tallennettu kohden mukaan kullekin viestille, joten viesti, joka saapui kolme neljästä kohdesta, on tallennettu tarkalleen siten. Kanavatasolla ei ole "onnistuminen", koska se ei merkitsisi mitään.

10.11 Hidas toimitus

Määränpää, joka hyväksyy viestejä, mutta vie niiden käsittelyyn kauan aikaa, on erillinen ongelma verrattuna siihen, joka epäonnistuu, ja se on helppo missata, koska jokainen tulos on onnistuminen.

slow-delivery -varoituslaji on olemassa tätä varten. On syytä asettaa se kaikille, joilla lähettäjän vahvistus odottaa toimitusta, koska kohde, jonka vastausajan on hiljalleen kaksinkertaistunut, ylittää lopulta lähettäjän aikakatkaisun ja alkaa tuottaa uudelleenlähettyksiä - ja siinä vaiheessa oire ilmenee ylempänä, järjestelmässä, jota et välttämättä hallitse.

10.12 Kirjoittaminen tietokantaan

type: database suorittaa lauseen kullekin viestille arvoja sitoen viestistä.

Vastaa paikkoja on ajurin oma — $1 postgresille, ? mysqlille ja sqlite: lle, @p1 sqlserverille — ja Perfuse ei kirjoita niitä uudelleen. Se on tarkoituksella: käännöskerros, joka sai paikan väärin, sitoisimme potilaan nimen väärään sarakkeeseen, ja tuloksena olisi näyttäisi kelvolliselta datalta eikä virheeltä.

Lause, joka on kirjoitettu väärässä murteessa, hylätään, kun se tallennetaan, ja mainitaan tyyli, jonka ajuri haluaa. Ennen kuin tämä tarkistus oli olemassa, virhe ilmenee syntax error at or near "," palvelimelta, kun viesti saapuu, joka mainitsee lauseen, jonka olet kirjoittanut, ja se lähettää etsimään kirjoitusvirhettä sen sijaan, että etsisi murteella.

destinations:
  - name: warehouse
    type: database
    database:
      driver: postgres
      dsn: ${WAREHOUSE_DSN}
      statement: INSERT INTO messages (mrn, family_name, birth_date) VALUES ($1, $2, $3)
      params:
        - PID-3.1
        - PID-5.1
        - PID-7

Merkitty parametri on vakio eikä polku, joka on tapa, jolla kanava kirjoittaa oman nimensä tai lähdejärjestelmän koodin rinnalla viestidatan.

Arvot sitoutuvat aina parametreina. ${...}-viittaus lauseessa hylätään: nimi, joka sisältää heittomerkin, rikkoisi lauseen, ja vihamielinen arvo kirjoittaisi sen uudelleen.

10.13 Lähetys raakasokkeliin

type: tcp kirjoittaa päätepuolelle valitsemasi kehyksen, joka on se, mitä laite tai laboratoriolaite yleensä haluaa. MLLP on yksi useista kehyksistä; tämä kohde tarjoaa muut.

destinations:
  - name: instrument
    type: tcp
    tcp:
      address: instrument.lab:9100
      framing: delimited
      delimiter: \r
      expect_reply: true
      timeout: 30s

Kehys on määritettävä. Väärän kehyksen kanssa kirjoittaminen ei epäonnistu. Vastaanottava järjestelmä lukee viestit väärissä kohdissa tai odottaa päättymistunnistetta, jota ei koskaan tule, ja oire ilmenee vastaanottavassa järjestelmässä eikä täällä.

framingMitä se kirjoittaa
mllp0x0b ennen, 0x1c 0x0d jälkeen. Sama kehys, jonka MLLP-kohteena käytetään.
delimiteddelimiter jokaisen viestin jälkeen, ja valinnainen start_block ennen sitä.
fixedTiedot täytetään tai katkaistaan record_length-arvoon.
lengthlength_bytes-etuliite. big_endian ja length_includes_header molemmat ovat kahden tavanomaisen käytännön ja ero on hiljainen.
wholeYksi viesti yhteyden aikana, suljettu merkitsemään loppu.

Vain valitun kehyksen asetukset hyväksytään. Tietueen pituus erotellussa virrassa hylätään sen sijaan, että se olisi huomiotta, koska asetus, joka on hiljaisesti ohitettu, on joku, joka uskoo, että se on voimassa.

expect_reply muuttaa sitä, mitä toimitettu tarkoittaa. Ilman sitä, onnistuminen tarkoittaa, että tavut saavuttivat käyttöjärjestelmän lähetyspuskurin — jonka peeri, joka kaatui hetkeä myöhemmin, ei koskaan lukenut.

10.14 Amazon S3, SQS ja SNS

Kanava voi lukea SQS-jonosta tai S3-bucketti-etuliitteen ja toimittaa SQS: ään, SNS: ään tai S3: een. Kaikki viisi ovat allekirjoitettu HTTP ilman AWS SDK: ta binääritiedostossa, ja kaikki viisi ottavat samat pääsyasetukset: region, access_key_id, secret_access_key (kirjoita ${AWS_SECRET_ACCESS_KEY} ympäristöön), valinnainen session_token ja endpoint LocalStackia, MinIO: ta tai VPC-päätepistettä varten. Valitse Kanavat → Uusi kanava, valitse *Luemme Amazon SQS -jonosta*, *Keräämme objekteja Amazon S3 -bucketista* tai SQS-, SNS- ja S3-kohteen tyypit.

Mitään ei vahvisteta AWS: lle, ennen kuin kanava on käsitellyt sen. SQS-viesti poistetaan sen jälkeen ja muutoin ilmestyy uudelleen, kun sen näkyvyysaika päättyy, joten jonon uudelleenohjauspolitiikka on se, joka siirtää yhden, joka jatkuvasti epäonnistuu, kuolleeseen kirjeen jonoon. S3-objekti siirtyy processed/: een sen jälkeen tai error/: een, jos sitä ei voitu käsitellä, joten yksi huono tiedosto ei estä loput.

FIFO-jonossa tai aiheessa viestit ryhmitellään potilaan mukaan oletusarvoisesti - SQS säilyttää järjestyksen ryhmän sisällä ja muualla - ja deduplikaatiot sisällön mukaan, joten uudelleenkäynnistys ei toimiteta kahdesti.

S3-arkisto voidaan kirjoittaa suoraan Glacieriin storage_class: n avulla ja JSON-riveiksi Amazon Athenan format: ndjson: n avulla; perfuse athena tulostaa taulun. Viittaus sisältää jokaisen asetuksen.

10.15 AMQP 1.0 ja Azure

AMQP 1.0 is what Azure Service Bus and Event Hubs speak, and RabbitMQ 4, ActiveMQ and Artemis beside their other protocols. An amqp source receives from a queue or a subscription and accepts each message only once the channel has handled it; one that could not be handled is released as a failed delivery, so the broker redelivers it and, past the queue's limit, dead-letters it. An amqp destination reports success only when the broker accepts the message. For Service Bus: addr is <namespace>.servicebus.windows.net:5671 with tls, username the shared access policy name, password its key, and address the queue name, or <topic>/subscriptions/<name> to receive.

Azure Blob Storage: azure_blob-kohteella kirjoitetaan blobi kullekin viestille valitussa pääsytasossa - Hot, Cool, Cold tai Archive - ja azure_blob-lähde poimii blobit etuliitteestä, siirtäen ne processed/: een tai error/: een, kuten S3-lähde tekee. Suositellaan SAS-tunnistetta, joka on rajoitettu säiliöön, enemmän kuin tiliavainta.

10.16 MQTT

Tämä mqtt-lähde tilaa aiheen suodattimen (+ vastaa yhtä tasoa, # kaikkia alempia tasoja) millä tahansa MQTT 3.1.1-välittäjällä: Mosquitto, EMQX, HiveMQ, AWS IoT Core, Azure Event Grid. Oletuksena QoS 1:llä kunkin viestin käsittely vahvistetaan vain kerran. MQTT:llä ei ole mahdollista hylätä yksittäistä viestiä, joten se, jota ei voida käsitellä, jätetään vahvistamatta ja yhteys muodostetaan uudelleen; välittäjä pitää istuntoa asiakastunnisteella (perfuse-<channel>, ellei client_id määrittele toisin) ja lähettää sen uudelleen ensimmäisenä jonossa. QoS 0 on enintään kerran: mitä tahansa lähetetään Perfusen ollessa alas, se häviää. mqtt-kohde julkaisee ja ilmoittaa onnistumisesta QoS 1:llä, kun välittäjä on vastaanottanut viestin.

source:
  type: mqtt
  mqtt:
    addr: broker.hospital.local:8883
    topic: hl7/+/adt
    username: perfuse
    password: ${MQTT_PASSWORD}
    tls: {enabled: true, ca_file: /etc/perfuse/broker-ca.pem}

AWS IoT Core vaatii asiakasvarmenne: anna tls.cert_file ja tls.key_file.

10.17 IBM MQ

ibm_mq lukee ja kirjoittaa IBM MQ -jonoja jonon hallinnan viestintä-REST-rajapinnan (mqweb) kautta, jonka IBM MQ 9.1.5 ja myöhemmät toimittavat jokaisella alustalla, mukaan lukien z/OS, joten MQ-asiakasohjelmaa ei asenneta Perfusen viereen. Käyttäjän on oltava MQWebUser-rooli ja asetuksen, haun ja selausvaltuus jonossa. Lähde selailee ensimmäisen viestin, antaa sen kanavalle ja poistaa sen vain viestin tunnisteen kautta, kun se on käsitelty; viesti, joka epäonnistuu, pysyy jonon ensimmäisenä. Suorita yksi lukija per jono. Kohde asettaa pysyvät viestit (ellei non_persistent), HL7-ohjaus-ID: n korrelaatio-ID: nä.

destinations:
  - name: to-mainframe
    type: ibm_mq
    ibm_mq:
      url: https://mq.hospital.local:9443
      queue_manager: QM1
      queue: HL7.ADT.OUT
      username: perfuse
      password: ${IBM_MQ_PASSWORD}
      tls: {enabled: true, ca_file: /etc/perfuse/mq-ca.pem}

api_version on v3 MQ 9.3: lle ja myöhemmille (oletus), v2 9.1.5: lle - 9.2: lle. Jonon hallitsija, jolla on AMQP-kanava, voidaan myös tavoittaa amqp-liitännän kautta.

10.18 Google Cloud Pub/Sub ja Cloud Storage

pubsub-lähde vetää viestin tilauksesta ja vahvistaa jokaisen viestin, kun se on käsitelty; se, joka epäonnistuu, annetaan takaisin heti (sen vahvistamisajan määräaika nolla), loput erästä, joten Pub/Sub toimittaa sen uudelleen ja, tilauksen kuolemansanomapolitiikan jälkeen, kuolemansanoo sen. pubsub-kohde julkaisee HL7-viestityypin ja ohjaus-ID: n attribuutteina; order_by: patient asettaa järjestysavaimen PID-3.1: stä, joten tilaus, jolla on viestin järjestys, pitää jokaisen potilaan viestit järjestyksessä.

gcs-kohde kirjoittaa yhden objektin per viesti, nimettynä S3-avaimen kaltaiseksi, valitussa tallennusluokassa (STANDARD, NEARLINE, COLDLINE, ARCHIVE). gcs-lähde poimii objekteja etuliitteestä ja siirtää ne processed/- tai error/-kansioon, kuten S3-lähde tekee.

Molemmat kirjaavat sisään palvelutilillä: credentials_file on sen JSON-avain. Jätä se tyhjäksi Google Cloudissa (VM, GKE tai Cloud Run) käyttääksesi siellä liitettynä olevaa palvelutiliä. endpoint nimeää emulaattorin (Pub/Sub-emulaattori, fake-gcs-server), joka ei vaadi tunnisteita.

source:
  type: pubsub
  pubsub:
    project: hospital-integration
    subscription: adt-to-perfuse
    credentials_file: /etc/perfuse/gcp-key.json

10.19 Sähköpostilaatikon lukeminen (IMAP ja POP3)

email-lähde lukee postilaatikon ja muuttaa sen, mitä se löytää, viesteiksi: jokainen liite (take: attachments, oletus, kapeampi attachment_names-kuvioilla), sähköpostin teksti (take: body) tai koko sähköposti (take: raw) käsikirjoitukselle, joka purkaa sen. Laboratoriot, kuvantamiskeskukset ja pienet harjoittelualueet lähettävät edelleen tuloksia tällä tavoin.

Jokainen tarkistus kirjautuu sisään, lukee lukemattoman postin vanhimmasta alkaen ja kirjautuu ulos. IMAP: n yli sähköposti haetaan ilman, että se merkitään luetuksi, annetaan kanavalle ja vain kerran, kun jokainen viesti siitä on hyväksytty, se siirretään move_to-kansioon (Käsitelty), merkitään luetuksi (after_read: flag) tai poistetaan. Posti, joka epäonnistui tai jota ei otettu (lähettäjä allowed_senders- ulkopuolella, ei liitettä, joka vastaa attachment_names-kuviota, suurempi kuin max_message_size), siirretään error_folder-kansioon (Virhe) syyn kanssa lokissa. Molemmat kansiot luodaan, kun ne puuttuvat. POP3: lla ei ole kansioita tai lippuja, joten se poistaa: poistot vahvistetaan QUIT: n lopussa tarkistuksen lopussa, joten istunto, joka katkeaa, poistaa mitään ja käsitelty sähköposti voidaan lukea uudelleen (ei koskaan katoa). POP3-posti, jota ei oteta, pysyy palvelimella ja ilmoitetaan kerran.

Sisäänkirjautuminen on salasana (${MAIL_PASSWORD}; sovellussalasana Gmailiin) tai OAuth 2.0 SASL XOAUTH2: n yli, jota Microsoft 365 vaatii (se on sammuttanut salasanakirjautumisen) ja Gmail suosittelee:

source:
  type: email
  email:
    host: outlook.office365.com        # imap.gmail.com, pop.gmail.com, or your server
    username: results-feed@hospital.example
    oauth:
      provider: microsoft              # microsoft, google or custom (with token_url)
      tenant: hospital.onmicrosoft.com
      client_id: 00000000-0000-0000-0000-000000000000
      client_secret: ${MAIL_CLIENT_SECRET}
    attachment_names: ["*.hl7"]
    allowed_senders: [lab.example, results@partner.example]

With client_secret and no refresh_token, Microsoft 365 app-only access is used (the client-credentials grant, scope https://outlook.office365.com/.default): an administrator registers the app, grants it IMAP.AccessAsApp and limits it to the one mailbox with an Exchange service principal. With a refresh_token (a person's consent), the delegated scope IMAP.AccessAsUser.All or POP.AccessAsUser.All is used, and a rotated refresh token is kept for the life of the process. Gmail needs a refresh_token: Google offers no app-only access to a mailbox.

allowed_senders ottaa osoitteita ja verkkotunnuksia. Sähköpostin From-rivi voidaan väärentää, joten se pitää esteettömänä onnettomuudet ja harhaanjohtavan postin, ei hyökkääjää; luotettava syöte kuuluu Directiin (S/MIME allekirjoitettu), SFTP: hen tai VPN: ään. security on tls (993 tai 995, oletus), starttls (143 tai 110) tai none, joka on sallittu vain localhost-osoitteelle. Tarkistukset ovat vähintään 10 sekunnin välein (60 oletuksena), koska sähköpostipalvelut rajoittavat tilit, jotka tarkistavat nopeammin.

Testattu GreenMail 2.1.3: ää (IMAPS, IMAP, POP3S ja POP3: kirjautuminen hylätään väärällä salasanalla, nouto ilman lukuun merkitsemistä, SIIRRÄ, lippu, poista, liian suuri sähköposti hylätään ennen kuin se luetaan) ja Gmailin IMAP: n kanssa sovellussalasanalla (luo kansio, liitä, nouto, SIIRRÄ, poista). OAuth testattiin vain stand-in-tunnisteiden päätepisteeseen: ei Microsoftia tai Googlea vastaan.

10.20 AS2

AS2 (RFC 4130) on tapa, jolla useat maksajat, välittäjät ja toimittajat vaihtavat EDI-tietoja: HTTP POST -pyyntö, jonka sisältö on allekirjoitettu lähettäjän varmenneksi ja salattu vastaanottajan varmenneksi, ja johon vastataan kuittauksella (MDN), joka nimeää saapuneen viestin tiiviste. S/MIME on sama koodi, jota käytetään suorassa viestinnässä. Molemmat päät ovat kanavan rakentajalla: Liikekumppanit lähettävät meille EDI-tiedot AS2: n kautta lähteenä, Liikekumppani AS2: n kautta kohdekohtaisesti.

# receive: partners post here
source:
  type: as2
  as2:
    listen: ":4080"            # path /as2 by default
    id: HOSPITAL-AS2           # our AS2 identifier (AS2-To)
    cert_file: as2/ours.crt    # partners encrypt to this
    key_file: as2/ours.key     # and receipts are signed with it
    tls: { enabled: true, cert_file: tls.crt, key_file: tls.key }
    partners:
      - id: PAYER-AS2
        cert_file: as2/payer.crt
dataType: x12
# send
destinations:
  - name: payer
    type: as2
    as2:
      url: https://as2.payer.example/as2
      from: HOSPITAL-AS2
      to: PAYER-AS2
      cert_file: as2/ours.crt
      key_file: as2/ours.key
      partner_cert_file: as2/payer.crt
      file_name: "${control_id}.x12"

Vastaanotto. Viesti, joka on osoitettu jollekin muulle AS2-To: lle tai joka tulee lähettäjältä, jota ei ole partners -luettelossa, hylätään 403 -virheilmoituksella ja ilman kuittauksia. Liikekumppanin viestin on oltava allekirjoitettu ja salattu, jollei sen luetteloon allow_unsigned tai allow_unencrypted ole asetettu. Viestin sisältö salataan, sen allekirjoitus tarkistetaan liikekumppanin varmenneksi (liikekumppanit vaihtavat yleensä itse allekirjoitetut varmenteet, mikä on hyväksytty: varmenne on luottamus), ja se toimitetaan kanavalle sen määrittelemässä viestimuodossa. Liikekumppani saa pyytämänsä kuittauksen: vastauksessa tai lähettämällä sen Receipt-Delivery-Option -osoitteeseen; allekirjoitettu, kun se on pyytänyt allekirjoitettua. Viesti, joka epäonnistuu, saa kuittauksen, joka nimeää syyn (decryption-failed, authentication-failed, insufficient-message-security, unexpected-processing-error).

Lähetys. Jokainen viesti on allekirjoitettu (SHA-256) ja salattu (AES-256-CBC). receipt: sync -asetuksella, joka on oletusarvo, se katsotaan toimitetuksi vain, kun kuittaus on verifioitu partner_cert_file -tiedostoa vasten, sanoo processed, ja sisältää saman tiiviste (MIC) kuin mitä lähetettiin; muu on epäonnistunut toimitus ja se yritetään uudelleen. receipt: async pyytää kuittauksen receipt_url -osoitteesta, joka on oltava AS2-lähde tässä palvelimessa, joka luetellaan liikekumppani: viesti katsotaan toimitetuksi, kun liikekumppani hyväksyy pyynnön, ja myöhempi kuittaus, joka ei ole sama, kirjataan virheeksi. receipt: none ei pyydä mitään. unsigned, unencrypted ja unsigned_receipt -asetukset poistavat kunkin osan, jos sopimus niin sanoo; username ja password lisäävät HTTP-perusautentikoinnin portille, joka vaatii sitä. Sisällön tyyppi seuraa kanavan muotoa (application/edi-x12 X12: lle) ellei content_type aseta sitä.

Triple DES, AES-128 ja AES-192 luetaan yhtä hyvin kuin AES-256, koska liikekumppanit lähettävät niitä edelleen, ja myös Java-porttien kirjoittama streaming BER (määrittelemättömät pituudet) luetaan.

Pakkaus (RFC 5402). Pakattu viesti luetaan kummallakin tavalla, jolla se on rakennettu: pakattu ennen allekirjoittamista tai salaamista, tai allekirjoitettu viesti pakattu kokonaisuudessaan. Kuittauksen MIC noudattaa RFC: ä: allekirjoitettua, kun se on allekirjoitettu, ja pakkaamattoman sisällön, kun se ei ole allekirjoitettu. Viesti, joka laajenee yli kymmenkertaiseksi lähdekohtaisen max_message_size -arvon, hylätään decompression-failed -virheilmoituksella, jotta muutamia kilotavuja ei voida väittää gigatavuiksi muistia. Kohde pakkaa compress: true -asetuksella, ennen allekirjoittamista ja salaamista, kuten useimmat portit tekevät; kysy liikekumppanilta ensin.

Viesti lähetetään kahdesti. Liikekumppani, joka ei ole koskaan saanut meidän kuittauksemme, lähettää viestin uudelleen samalla Message-ID: llä (RFC 4130, osa 7.5). Lähde muistaa kunkin liikekumppanin Message-ID: t duplicate_window -ajaksi (oletusarvo 720h, 30 päivää; vähintään tunti) ja vastaa uudelleenlähetykseen processed -kuittauksella ilman viestin uudelleenlähetystä. Tietue pidetään tietokannassa, joten uudelleenkäynnistys ei unohda sitä. Viestin prosessointi epäonnistui, eikä sitä muisteta, joten liikekumppanin uudelleenyritys menee läpi. Samanaikaisesti saapuvat kopiot odottavat toisiaan, ja vain ensimmäinen lähetetään eteenpäin. Jos tietuetta ei voida lukea, viesti hylätään unexpected-processing-error -virheilmoituksella, ja liikekumppani yrittää uudelleen myöhemmin, sen sijaan että riskittäisiin toisen kopion lähetyksessä. Viesti, jolla ei ole Message-ID: tä, ei voida tunnistaa, ja se kirjataan sellaisena.

Yhteensopivuus testataan pyas2lib 1.4.3: ää vastaan molemmissa suunnissa, Triple DES: n ja AES-256: n, pakattujen ja epäpakattujen, allekirjoitettujen synkronisten kuittauksien kanssa.

10.21 OpenPGP

Maksajat, välittäjät ja valtion virastot ottavat usein ja lähettävät tiedostoja vain OpenPGP: n avulla. pgp -lohko lähdekohtaisesti avaa saapuvan tiedoston; yksi kohdekohtaisesti suojaa lähtevän tiedoston. Molemmat ovat kanavan rakentajalla: Avaa PGP-salaus lähteen alla, Salaa OpenPGP: llä kussakin kohteessa.

source:
  type: sftp
  sftp: { host: sftp.payer.example, user: hospital, key_file: keys/id_ed25519, dir: outbound }
  pgp:
    decrypt_with: keys/our-secret.asc      # our secret key, armored or binary
    passphrase: ${PGP_PASSPHRASE}
    verify_with: [keys/payer.asc]          # the senders' public keys
    require_signature: true
destinations:
  - name: claims
    type: sftp
    sftp: { host: sftp.payer.example, user: hospital, key_file: keys/id_ed25519, dir: inbound,
            file_name: "${date}-${control_id}.x12.pgp" }
    pgp:
      encrypt_to: [keys/payer.asc]
      sign_with: keys/our-secret.asc
      passphrase: ${PGP_PASSPHRASE}

Avain tiedostot luetaan kanavatiedoston suhteen, ja ne luetaan ja avataan, kun kanava ladataan: puuttuva avain tai väärä salasana pysäyttää kanavan siinä, eikä ensimmäisessä tiedostossa.

Viestit kirjoitetaan AES-256: lla RFC 4880 -muodossa, jota vanhemmat vastaanottimet lukevat, ja uudempi RFC 9580 -muoto luetaan myös. Salakirjoitus on ProtonMail/go-crypto; Perfuse ei toteuta primitiivejä. Yhteensopivuus testataan GnuPG: ää vastaan molemmissa suunnissa: gpg salaa ja verifioi, mitä Perfuse kirjoittaa, ja Perfuse avaa ja verifioi, mitä gpg kirjoittaa.

10.22 Toimitus toiseen kanavaan

Kanavan kohde luovuttaa viestin toiselle kanavalle nimeltä. Vastaanottava kanava käsittelee sen kuten minkä tahansa saapumisen: se merkitsee sen, suodattaa sen, muuttaa sen ja jakaa sen.

Tämä on tuettu tapa rakentaa ketju. Se on tietoisesti näkyvä — kaksi kanavaa, kaksi joukkoa tilastoja, kaksi merkintää viestihistoriassa — koska ketju, joka on piilotettu yhden kanavan sisään, on ketju, jota kukaan ei voi valvoa.

Viesti luovutetaan muistissa eikä verkon yli, joten siinä ei ole kehystystä, vahvistusta eikä aikakatkaisua kahden kanavan välillä.

10.23 Mitä tapahtuu, kun prosessi tapetaan

Se, joka on ajettu rajapintamoottoria, kysyy ensimmäiseksi, ja se on vastaus, jota harvoin saadaan, koska rehellinen vastaus on yleensä nolo.

Se vastattiin tappamalla prosessi SIGKILL: llä erän aikana — mikä on sama kuin virran katkeaminen, muistin loppuminen ja hypervisorin resetointi — ja laskemalla, mitä selvisi verrattuna siihen, mitä oli luvattu.

Testattava ominaisuus ei ole "ei mitään menetetä". Se ei ole saavutettavissa, ja sen väittäminen olisi valhe. Se on kapeampi lupaus, johon lähettäjä todella luottaa: viesti, joka on vahvistettu myönteisesti, on viesti, joka on saapunut.

Kun ack.when: on_delivery (joka on oletus), jokainen kohde kirjoitetaan ennen kuin vahvistus lähetetään, joten AA on lausunto kohdesta eikä jonosta. Viesti, joka tapetaan ennen vahvistusta, voi hyvin hävitä, ja se on oikein: lähettäjälle ei ollut luvattu mitään, ja se lähettää sen uudelleen.

10.23.1 Vahvistus toimituksen yhteydessä

Viisi suoritusta, tapettu 5, 25, 40, 75 ja 110 viestin jälkeen 120:sta.

VahvistettuOlemassa alavirrassa myöhemminVahvistettu mutta puuttuu
2552550

Lupaus pidettiin jokaisessa tapauksessa, eikä mitään toistettu. Toisto olisi ollut hyväksyttyvä, ja menetys ei: uudelleen lähetetty A08 on häiriö, jonka vastaanottajat voivat hyväksyä, ja laboratoriotulos, joka ei saapunut hiljaa, on potilasturvallisuuden tapahtuma.

10.23.2 Vahvistus vastaanotossa

on_receipt vastaa heti, kun viesti on jonossa, ennen kuin kohde on kirjoitettu. Tämä luku on aina sanonut, että vahvistettu viesti voidaan edelleen hävittää tällä tavoin.

Tappo jälkeenVahvistettuOlemassa alavirrassaHävitetty
5514
2525124
7575273
1101102108

Periaatteessa kaikki lentokoneessa. Asetus ei ole vika, ja on olemassa syötteitä, joissa se on oikea valinta, mutta se pitäisi valita tietäen, että kaatuminen hylkää sen, mitä on vahvistettu ja mitä ei ole kirjoitettu, ja että se on melkein kaikki räjähdys.

Ei mitään palautettu käynnistyskerran jälkeen, koska perfuse run ei ole kestävää tallennusta. Kohde, joka ei saa menettää viestejä katkoksen aikana, tarvitsee queue.enabled, joka tarvitsee tietokantaa, jonka perfuse serve tarjoaa — ja perfuse run kieltäytyy nyt tällaisen kanavan käynnistämisestä sen sijaan, että se käynnistäisi sen ilman jonoa.

10.23.3 Lähettäjä, joka kuolee puolivälissä viestiä

Näistä virheistä vaarallisimman, koska HL7-viesti, joka on katkaistu, yleensä kuitenkin parseataan. Ennen katkosta olevat segmentit ovat täydellisiä ja hyvin muotoiltuja, joten vastaanottajalla ei ole mitään keinoa tietää, onko PID ja PV1 saapunut ja OBX-segmentit, jotka sisältävät tulokset, eivät.

Runko avattiin, kuusi kymmenesosaa viestistä lähetettiin, ja yhteys resetoitui sen sijaan, että se suljettiin. Osittainen viesti ei toimitettu, kuuntelija selvisi, ja hyvin muotoiltu viesti, joka lähetettiin heti sen jälkeen, hyväksyttiin normaalisti, joten fragmentti ei kulkeutunut seuraavaan viestiin.

Yhteysloki ilmoittaa nyt, monta tavua keskeneräistä kehyksestä hylättiin, jokaisessa virhetilanteessa eikä ainoastaan siistissä sulkemistilanteessa. Aikaisemmin kaatunut lähettimelle, prosessi, joka tapettiin, ja irrotettu kaapeli kaikki ilmoittivat messages=0 ja mitään muuta, mikä ei voi erottaa tyhjää terveystarkastelua laboratoriotuloksesta, joka heitettiin pois yhdeksän kymmenesosaa läpi.

10.23.4 Täysi levy

Tilan loppuminen havaitaan ja kirjataan sen sijaan, että se niellään. Kaksi asiaa siitä on arvoista tietää.

Lähettäjä ei saa välitöntä hylkäystä. Toimitus yrittää uudelleen normaalilla aikataululla — yksi sekunti, kaksi, neljä, kahdeksan — ja kielteinen vahvistus saapuu noin viidentoista sekunnin kuluttua. Lähettäjä, jonka omien aikakatkaisujen aika on lyhyempi kuin se, näkee jumittuneen yhteyden sen sijaan, että se näkisi AE: n, ja se johtaa siihen, että verkko on vikainen eikä levy.

Ja volyymi, joka ilmoittaa nolla vapaita tavuja, voi silti hyväksyä pieniä lisäyksiä jonkin aikaa, koska muutaman sadan tavun lisääminen tiedostoon, jonka viimeinen lohko on tilaa, ei vaadi uutta varaamista. Ensimmäinen kirjoitusvirhe tapahtuu myöhemmin kuin hetkellä, jolloin levy täyttyi.

10.23.5 Mitä ei testattu

Kohdekansio menetti kirjoitusoikeuden. Sitä ei voitu injektoida chmod: n avulla: moottori pitää tulostiedostoa auki, ja tiedoston tilan muuttaminen ei vaikuta aikaisemmin avattuun kuvaajaan. Sen kokeileminen oikein vaatii volumen uudelleen kiinnittämistä vain luku-tilassa tai poistamista prosessin alta, mitä ei ole tehty. Se mainitaan tässä sen sijaan, että se jätettäisiin mainitsematta, koska aukko, josta kukaan ei mainitse, luetaan aukoksi, jota kukaan ei etsi.

11 Hälytykset

Mitään Perfusen ulkopuolella ei kerro, että syöte on loppunut. Lähettäjä on vahvistettu ja tyytyväinen; vastaanottajalla ei ole mitään keinoa tietää, onko viesti lähetetty. Hälytykset ovat ainoa asia, joka erottaa rikkinäisen rajapinnan ja jonkun, joka huomaa sen viikoja myöhemmin.

11.1 Hälytystyypit

TyyppiLaukaistaan kun
error-rateVirheet ylittävät liikenteen osuuden.
queue-depthJonossa on yli N viestin jonossa.
queue-ageVanhin jonossa oleva viesti on vanhempi kuin määritetty kesto.
queue-stuckJonot eivät tyhjene.
no-trafficMitään liikennettä ei ole saapunut kiinteään aikaan.
below-rhythmLiikenne on selvästi alle tämän syötteen normaalilla tasolla *tämän viikonajan*.
channel-downKanava, joka pitäisi olla käynnissä, ei ole.
script-errorsSkripti epäonnistuu.
rows-quarantinedTietokantataulu asettaa rivejä erilleen.
slow-deliveryToimitukset onnistuvat, mutta ne kestävät liian kauan.
contractViesti rikkoo kanavan määritetyn sopimuksen.
phi-volumeKanava kuljettaa useita kertoja sen normaalia tuntikohtaisella tasolla.
phi-after-hoursKanava, joka vain kuljettaa päiväliikennettä, kuljettaa myös yöaikaan.
phi-new-destinationKanava toimittaa osoitteeseen, johon se ei ole aiemmin lähettänyt.
phi-bulk-readsYksi henkilö lukee yli N eri potilastietoa minuutissa.

Nämä neljä viimeistä tarkkailevat potilastietojen pääsyä ja niistä kerrotaan seuraavassa.

11.2 Hiljaisuus on vaikein asia havaita

Kanava, joka on lopettanut viestien vastaanottamisen, ei tuota virheitä. Siinä ei ole mitään lukittavaa. Tämän vuoksi no-traffic on olemassa, ja siksi se ei ole tarpeeksi hyvä yksinään.

no-traffic on kiinteä kynnysarvo: hälytä, jos mitään ei ole saapunut, sanotaan, kahden tunnin ajan. Syötössä, joka ei todella koskaan ole hiljainen, se toimii. Klinikan laboratoriosyötössä se on hyödytön — syöte on hiljainen joka yö ja viikonloppuisin, joten kahden tunnin kynnysarvo hälyttää jonkun kello 1 aamulla joka yö, ja kynnysarvo, joka on tarpeeksi pitkä selviytymään viikonlopun yli, ei huomaa tiistai-aamun katkoa ennen tiistai-iltapäivää.

Ei ole yhtä numeroa, joka on molemmat. Tämä ei ole säätöongelma; se on, että kysymys "onko tämä syöte lopettanut" ei voida vastata vakioarvolla, kun syötteen normaali vaihtelee satakertaisesti viikon aikana.

11.3 Rytmitietoinen havaitseminen

below-rhythm vertaa nykyistä liikennettä siihen, mitä tämä kanava normaalisti tekee tässä tunnissa tässä päivässä viikossa.

Perfuse oppii kunkin kanavan viikon omasta tallennetusta historiasta: 168 tunnin kokonaista, maanantai ensin, jotta työviikko on yhtenäinen. Kussakin kokonaistunnissa se pitää mediaania, matalaa ja korkeaa, lattiaa ja montako havaintoa se perustuu.

Kynnysarvo on osuus normaalista, oletusarvo 0.8 (80 prosenttia konsolissa) — hälytä, kun liikenne laskee alle neljännesosan siitä, mikä on normaalia tässä tunnissa.

11.3.1 Mediaani, ei keskiarvo

Yksittäinen viiveen puhdistus 40 000 viestistä normaalin 300 viestin vastaan siirtää keskiarvon tarpeeksi siirtymään, jotta syöte voi mennä täysin hiljaiseksi ilman, että se koskaan laskee alle sen.

11.3.2 Lattia on prosentti, ei vähin

Päätetäänkö kanavan rytmistä, onko se luotettava hälyttämiseen, sen matala päättää, ei sen korkea pää. Hälytys vajaasta liikenteestä laukaisee, kun liikenne on *matala*, joten vain matala pää voi kertoa, aiheuttaako se väärän positiivisen tuloksen. Aikaisemmassa versiossa vertailtiin korkeaa mediaania ja se meni väärin molemmissa suunnissa: se hylkäsi täysin vakaan syötteen kuukauden ajaksi yhden viiveen jälkeen, ja se hyväksyi oikeasti epätasaisen syötteen, joka vaihteli kahden ja yhdeksän sadan viestin välillä samassa tunnissa, koska sen korkea oli vain kolme kertaa sen mediaani.

Lattia on kahdenkymmenes prosentti, ei vähin, koska vähin vetää yksittäinen pankkien loma nollaan. Ja prosentti ei ole interpoloitu — jokainen luku hälytyksessä kello 2 aamulla pitäisi olla laskelma, jonka syöte on todella tuottanut, ei keskiarvo laskelmista, joita se ei ole tuottanut.

11.3.3 Se kertoo, kun se ei voi sanoa

Kanava, jolla ei ole lainkaan historiaa, jätetään kokonaan pois sen sijaan, että se kohdellaan kanavana, joka on lopettanut. Uusi kanava ei saa näyttää rikkoontuneelta.

Missä historia on liian ohut tai liian epätasainen tukeakseen päätöstä, sääntö kieltäytyy laukaisemasta sen sijaan, että se arvaisi. "En voi rehellisesti sanoa" on ensiluokkainen vastaus tässä, ja se on mieluummin valittu hälytyksestä, joka on oikein hieman useammin kuin sattuma.

Poissa olevat tunnit oppimisikkunassa merkitään oikeasti nollaksi, ei puuttuvaksi dataksi. Puoli signaalia klinikan syötössä on *siitä, milloin se on laillista hiljainen*, ja niiden tuntien käsittely puuttuvana datana heittäisi sen pois.

11.4 Hälytysten asettaminen

Käyttöliittymästä, Valvontaa-välilehdeltä, kunkin kanavan tai kaikkien kanavien osalta. Jokaisella säännöllä on tyyppi, kynnysarvo ja määränpää, johon hälytys lähetetään. Säännöt tallennetaan tiedostoon alerts.yaml tietokannan vieressä (tai tiedostoon, jonka nimi on -alerts) ja ne tulevat voimaan välittömästi; kunnes ensimmäinen tallennus tehdään, käytetään sisäänrakennettuja sääntöjä. Tiedostoa voidaan myös muokata käsin: muutos otetaan käyttöön 30 sekunnin kuluessa, ja tiedosto, jota ei enää voi ladata, ilmoitetaan lokissa ja voimassa olevat säännöt säilytetään.

Arvoa tehdä ennen kuin syöte menee liveen sen sijaan, että se tehdään ensimmäisen tapahtuman jälkeen. Tietty joukko, joka on arvokasta millä tahansa kliinisellä syötöllä:

  1. below-rhythm — syöte on mennyt hiljaiseksi, kun se ei pitäisi olla hiljainen.
  2. error-rate — viestit saapuvat ja epäonnistuvat.
  3. queue-age — jokin on jumissa eikä vain kiireinen.
  4. channel-down — kanavaa ei suoriteta lainkaan.

Ensimmäinen on se, joka sieppaa epäonnistumisen, jota kukaan muu ei ilmoita.

11.5 Potilastietojen pääsyä valvotaan

Tietoturvaloukkaus ilmoittaa itseään harvoin. Se näyttää siltä, että syöte kuljettaa enemmän kuin tavallisesti, liikennettä kello kolme aamulla kanavalla, joka toimii vain päiväsaikaan, määränpäähän, jota kukaan ei ole määritellyt, tai yhden henkilön avaamassa potilas toisensa perään. Perfuse valvoo näitä neljää, ja ne ovat käytössä oletusarvoisesti (serve -watch-access=false poistaa ne käytöstä), ja se ilmoittaa havaintonsa yllä mainittujen hälytysääntöjen kautta, joten se on määritetty, vahvistettu ja toimitettu kuten mikä tahansa muu hälytys.

Mitään kanavaa ei arvioida, kunnes se on kuljettanut 200 viestiä, koska "epätavallinen" tarkoittaa mitään ilman mallia. Malli opitaan viimeisen kahden viikon aikana tallennetuista viesteistä, kun palvelin käynnistyy, joten palvelimen uudelleenkäynnistäminen ei tee kaikista kanavista uusia. Mitä tahansa havaitaan, se pidetään 15 minuutin ajan, minkä jälkeen hälytys tyhjenee itsestään.

Se vain valvoo ja ilmoittaa. Se ei koskaan pidättele viestiä tai kiellä lukemista: nämä ovat heuristiikkaa, ja syötteiden pysäyttäminen, koska arvaus oli väärä, on kliininen ongelma. Kussakin hälytyksessä kerrotaan, mitä on havaittu ja mitä se voi olla viattoman.

Järjestelmänvalvojat näkevät, mitä valvonta on oppinut Valvontanäytöllä, Potilastietojen pääsy -osiossa: kunkin kanavan malli (edelleen oppimassa, vain päiväsaika, tai sekä päivä- että yöaika), montako määränpäätä se tuntee, ja kaikki, mitä on havaittu viimeisen 15 minuutin aikana, mukaan lukien se, mikä on alle kynnysarvon.

11.6 Mihin hälytykset menevät

Hälytykset voidaan lähettää JSON-muodossa webhookiin (-alert-webhook: Slack, Teams, Mattermost, PagerDuty, Alertmanager tai mikä tahansa, joka hyväksyy POST-pyynnön), lähettää SNMPv2-ansoittimina SNMP-hallitsijoille (-snmp-traps, ks. SNMP) tai kirjoittaa lokitiedostoon kerääjän noutamista varten. Sähköpostitoimitusta ei ole: osoita webhook sähköpostireleelle, jos hälytykset on toimitettava sähköpostitse.

Hälytys, joka on kirjoitettu lokitiedostoon, jota kukaan ei lue, ei ole hälytys. Jos Perfuse on ainoa, joka huomaa lopetetun syötteen, hälytys on saada se henkilölle.

12 Viestivarasto

Jokainen Perfuseen saapuva viesti tallennetaan sellaisenaan, ennen kuin siihen tehdään muutoksia. Samoin tallennetaan se, mitä lähetettiin kuhunkin määränpäähän ja mitä sille tapahtui. Varasto on SQLite-tiedosto, joka määritellään -db-valinnalla.

12.1 Mikä tallennetaan

Jokaisen viestin osalta: raakabitit, kun ne saapuivat, kumpi kanava, parsittu viestityyppi ja laukaiseva tapahtuma, sekä suodatusulos.

Jokaisen määränpään osalta jokaiselle viestille: lähetetyt bitit, tulos, kulunut aika ja mahdolliset virheet tai kielteiset vahvistukset.

Tämä on tutkimuksen tarvitsema muoto. "Mitä he lähettivät meille", "mitä me lähettimme heille" ja "mitä he sanoivat siitä" ovat kolme eri kysymystä, ja kullekin niistä löytyy vastaus.

12.2 Haku

Kanavan, aikavälin, tuloksen, viestityypin ja laukaisevan tapahtuman, sekä kentän arvon perusteella.

Kenttähaku toimii parsitun viestin kanssa, joten esimerkiksi ennusteenumeron haku löytää sen siitä, mihin kohtaan viesti sijoittuu, eikä se vastaa pelkästään numeroiden osumia tekstissä. Tekstihaku 12345 viestissä, joka sisältää määrän 12345, löytää viestin, jolla ei ole mitään tekemistä etsimäsi potilaan kanssa.

12.3 Toisto ja uudelleenprosessointi

Siksi, että alkuperäinen viesti säilytetään, viesti voidaan ajaa uudelleen nykyisen konfiguraation läpi.

Jäljitys ottaa tallennetun viestin ja näyttää, mitä kanava tekisi siitä nyt, ilman että mitään lähetetään. Käsitellään kohdassa virheenjäljitys.

Uudelleenprosessointi ajaa viestin uudelleen, mukaan lukien toimitus. Tämä korjaa viestipaketteja, jotka epäonnistuivat, koska määränpää oli väärin määritetty: korjaa määränpään konfiguraatio, valitse vaikuttavat viestit ja uudelleenprosessoi.

Uudelleenprosessointi toimittaa viestit uudelleen. Jos viestit osittain onnistuivat ensimmäisellä kerralla, uudelleenprosessointi tuottaa duplikaatteja määränpäissä, joissa ne jo olivat. Perfuse tallentaa, mitkä määränpäät onnistuivat, joten uudelleenprosessointi voidaan rajoittaa niihin, jotka epäonnistuivat — tee näin, paitsi jos vastaanottava järjestelmä poistaa duplikaatit viestin ohjaus-ID:n perusteella.

12.4 Vanheneminen

Vanhan viestin jäljitys nykyistä konfiguraatiota vasten vastaa hypoteettista kysymystä: mitä *tapaisi* nyt. Tämä on yleensä se, mitä haluat, mutta ei aina — jos tutkit, mitä meni pieleen edellisenä tiistaina, kanava saattaa olla muuttunut sen jälkeen.

Perfuse havaitsee tämän ja ilmoittaa siitä. Vanhan viestin jäljitys, joka saapui ennen kuin kanavaa viimeksi muokattiin, on merkitty sellaiseksi, jotta vastausta ei sekoiteta todelliseen tapahtumakuvaan.

12.5 Säilytys

Varasto kasvaa. cleanup.periodDays-ominaisuus määrittää, kuinka kauan viestejä säilytetään.

Kaksi asiaa, jotka on painotettava. Kliiniset viestit saattavat kuulua pidemmän säilytysajan alaisuuteen kuin mitä valitsisit operatiivisista syistä, ja varasto ei ole järjestelmän virallinen rekisteri — vastaanottava järjestelmä on. Perfusen kopio on olemassa diagnosoida ja uudelleenprosessoida, ja molemmat tarpeet vähenevät terävästi muutaman viikon jälkeen.

Säilytys määrittää myös, kuinka paljon historiaa rytmin oppimiselle on käytettävissä. Katso alerting: säilytysikkuna, joka on muutamia viikkoja lyhyempi, jättää sen kykenemättömäksi erottamaan hiljaisen sunnuntain lopetetusta syötteestä.

12.6 Varasto sisältää kliinisiä tietoja

Tämä on Perfusen osa, joka sisältää potilastietoja, ja sitä tulisi kohdella asianmukaisesti: se tulisi säilyttää salatulla tallennuksella, varmuuskopioitu kuten kliiniset tiedot ja pääsy on kontrolloitu. Katso turvallisuus.

Luodut testiviestit, jotka on kuvattu kohdassa testing, ovat osittain olemassa, jotta näitä tietoja ei tarvitse viedä ympäristön ulkopuolelle jotta voidaan toistaa ongelma jossakin muualla.

13 Virheenjäljitys

Kysymys on lähes aina sama: tämä viesti tuli sisään, jokin meni pieleen, missä vaiheessa se muuttui? Perfuse vastaa siihen toistamalla tallennetun viestin nykyisen konfiguraation kautta ja näyttämällä jokaisen vaiheen.

Mitään ei lähetetä jäljittäessä. Kanava toimii muuttumattomana, eikä uudelleen käyttöönottoa tarvita.

13.1 Viestin jäljittäminen

Valitse mikä tahansa tallennettu viesti ja jäljitä se. Tulokset näytetään järjestyksessä:

13.2 Askelttain

Askeltava näkymä suorittaa kunkin muunnoksen erikseen ja ottaa valokuvan koko viestistä sen jälkeen. Numeroiden raitisilla askelmuodoilla, joissa on väri, joka kertoo, mitä tapahtui, ja viesti kuten se oli kussakin vaiheessa.

Koko viesti muutoksen sijaan, koska ongelma ei usein ole siinä, missä muutos on — askel, joka muutti kohdistetun kentän oikein, viestillä, jolla aiempi askel oli jo asettanut väärän asian sinne, näyttää täydelliseltä eristetyssä.

13.3 Neljä lopputulosta ja se ero, joka on merkittävä

LopputulosMerkitys
changedAskeltapahtuma suoritettiin ja muutti viestiä.
no-effectAskeltapahtuma suoritettiin, ja viesti ei muuttunut.
skippedAskeltapahtuman when -ehto oli epätosi, joten se ei suoritettu.
failedAskeltapahtuma epäonnistui.

no-effect ja skipped ilmoitetaan erikseen, ja tämä on koko ominaisuuden pointti.

Ulkopuolelta ne ovat identtisiä: viesti on sama molemmissa tapauksissa. Ne tarkoittavat vastakkaisia asioita. skipped tarkoittaa, että ehto toimi kirjoitettuna ja tämä viesti ei ollut sellainen, johon se sovelsi — yleensä oikein. no-effect tarkoittaa, että askeltapahtuma suoritettiin ja se ei löytänyt mitään tekemistä, mikä yleensä tarkoittaa, että se on kohdistettu kenttään, jota ei ole.

Moottori, joka ilmoittaa molemmat vain "ei tapahtunut mitään", jättää sinut kykenemättömäksi tunnistamaan toimivan ehdollisen ja rikkoontuneen polun välillä, ja se on yleisin muunnosvirhe, joka on olemassa.

Askeltapahtuma, joka ilmoittaa no-effect jokaiselle viestille, on lähes aina väärä polku. Askeltapahtuman otsikko laskee, kuinka monta askelta ei löytänyt mitään, mikä on nopein tapa havaita se: kanava, jolla on kolme askelta ja kolme no-effect -tulosta, ei muunna mitään oikeasti.

13.4 Muutoksen testaaminen ennen tallentamista

Rakentaja voi suorittaa ehdokaskaavan tallennetun liikenteen kautta ja ilmoittaa, mitä se eroaisi. Tämä on turvallisin tapa muuttaa live-kanavaa: tee muutos, katso, mitä se tekee viimeisten muutaman sadan oikean viestin kanssa, ja tallenna sitten.

Se on myös keino selvittää, että muutos, joka näyttää selvästi oikealta, vaikuttaa viesteihin, joista et ollut ajatellut — askel, joka on ehdollistettu yhdelle laukaisevalle tapahtumalle, syötteellä, joka osoittautuu kantavan neljää.

13.5 Mitä jäljittäminen ei voi kertoa

Se suorittaa nykyisen konfiguraation. Jos kanavaa on muokattu viestin saapumisen jälkeen, jäljitys on hypoteettinen eikä rekonstruktio, ja Perfuse merkitsee sen sellaisena eikä anna eroa kulkeutua hiljaa.

Se ei myöskään harjoita kuljetusta. Jäljitys näyttää, mitä lähetettäisiin, eikä sitä, hyväksyisikö kohde sen — viesti, joka on oikein, ja kohde, joka kieltäytyy yhteyksistä, tuottavat puhdasjäljityksen ja epäonnistuneen toimituksen. Ne ovat näkyvissä toimitusrekisterissä sen sijaan.

13.6 Skriptit

Skripti on yksi epäselvä askel jäljityksessä. Perfuse voi näyttää, mitä tuli sisään ja mitä tuli ulos, eikä se voi näyttää, mitä tapahtui välimaastossa tai mitä kenttiä luettiin.

Tämä on kirjoitetun koodin käytön konkreettinen kustannus verrattuna deklaratiivisiin vaiheisiin, ja se on syytä punnita valinnan tekemisen yhteydessä. Katso muunnos.

14 Testaus

Vakaa neuvonta liittymän testaamiseksi on rakentaa näyteviestejä, jotka heijastelevat omaa ympäristöäsi — laboratoriokoodisi, tapausvalintasi, lähettäjäsi tavat — ja poistaa potilastiedot käsin. Se on hidasta, ja tekeminen epätäydellisesti on normaali tulos.

Perfuse tarjoaa kolme asiaa sen sijaan: generoitu liikenne, joka vastaa syötteen muotoa sen sisällön sijaan, kanava, joka on ehdotettu näyteviestistä, jonka joku on lähettänyt sinulle, ja vertailu korvaavan moottorin kanssa.

14.1 Luotu testiliikenne

Jos kanava on käsitellyt viestejä, Perfuse voi tuottaa enemmän viestejä, jotka muistuttavat niitä.

Mikä on uskollinen:

Mikä ei ole uskollinen, ja tämä on ilmoitettu sen sijaan, että se olisi implisiittinen: kliininen johdonmukaisuus. Luodun potilaan tiedot ovat irralliset, nimiksi muodostettu merkkijono ja diagnosoitu, jolla ei ole suhdetta havaintoon. Nämä viestit harjoittelevat rajapintaa. Ne eivät ole kliininen testijoukko eivätkä voida käyttää kliinisen logiikan vahvistamiseen.

14.1.1 Miksi siinä ei ole oikeaa dataa

Väite on rakenteellinen eikä vaatinnaisuuden väite. Generaattorin ainoa syöte on kanavan liikenneprofiili, ja profiili sisältää täyttöasteet, muodot, pituudet, toistojen määrät ja segmenttien taajuudet. Siinä ei ole arvoja.

Ainoa poikkeus on koodikentät, ja koodi ei tunnista ketään.

Tämä on vahvempi takuu kuin oikeiden viestien de-identifioiminen, joka on prosessi, jota voidaan tehdä epätäydellisesti ja jota yleensä tehdään. Tässä ei ole polkua, jota kautta nimi voisi päätyä tulosteeseen, koska nimeä ei ollut syötteenä.

Jokainen luotu viesti parsitaan ennen kuin se palautetaan — epäparsittava korpus lähettäisi jonkun etsimään virhettä rajapinnasta, joka on itse asiassa generaattorin virhe — ja jokaiselle on merkintä T MSH-11:ssa, tarkoituksella luodulla lähettäjällä ja laitoksella.

Testiviesti, jota ei ole merkitty sellaiseksi, löydetään lopulta tuotantojärjestelmästä joku, jolla ei ole mitään keinoa tietää, ettei se ollut aito. T ja keinotekoinen lähettäjä eivät ole kosmeettisia.

14.2 Kanavan rakentaminen näytteestä

Liitä viesti, jonka laboratorio, sairaala tai myyjä on lähettänyt sinulle, ja Perfuse ehdottaa kanavaa sille. Mitään ei tarvitse olla käynnissä ensin.

Se käsittelee sitä, mitä ihmiset todella liittävät: useita viestejä yhdessä lohkossa, mitä tahansa rivin loppumista, MLLP-kehyksen, joka on säilynyt kopioinnissa, ja peittävän muistiinpanon yläpuolella viestin. Viestin hylkääminen, koska se saapui Windows-rivin loppumisilla, olisi este eikä tarkastus.

14.2.1 Kolme luetteloa

Ehdotus tulee mukana siitä, mitä näyte näyttää, mitä on arvattu, ja mitä näyte ei voi kertoa — kolme erillistä luetteloa, jotka on painotettu tasapuolisesti rajapinnassa.

Ne ovat erillisiä, koska lukija, joka ei voi sanoa, mikä on mikä, joutuu vahvistamaan kaiken tai luottamaan kaikkeen, ja molemmat ovat huonompia kuin tietäminen, mihin kannattaa katsoa.

Yhdestä viestistä rajoitukset on nimetty nimenomaan eikä yleisesti: mitkä kentät ovat valinnaisia, mitkä segmentit toistuvat, mitkä koodit ovat olemassa siitä, mitä tässä on, lähetetäänkö eri laukaiseva tapahtuma. Yleinen varoitus on sana, jota ihmiset vilkaisevat.

Luottamus on sana — alhainen, kohtuullinen, järkevä — ei koskaan prosentti. Prosentti implikoi laskelmaa, ja tämä on arvio siitä, kuinka monta näytettä on.

Z-segmentit mainitaan nimeltä, koska paikallinen segmentti on se asia, josta määritys ei mainitse, ja yleisin syy sille, että kanava, joka on rakennettu standarditemplatista, ei toimi.

14.2.2 Erottimen varoitus

Jos näytteen kenttäerotin ei ole tavallinen |, se näkyy ensin, ja luottamus laskee alhaiseksi.

Syy on aito hiljainen virhe. HL7 ottaa kenttänsä erottimen itse viestistä, joten näyte, jonka putkit on korvattu typografisilla näköisillä — mitä sanomistoimisto tekee — parsitaan täydellisesti kenttiin, jotka ovat kaikki väärin. Mitään virhettä ei esiinny missään.

Tällaisen näytteen hylkääminen olisi väärin, koska lähettäjä voi laillisesti käyttää toista erottinta. Sen vuoksi se on merkitty, ja merkintä on nimetty, ja pyydetään ehdotus siitä, että pyydettäisiin plain text -liite.

14.3 Vertaaminen vanhaan moottoriin

Ennen kuin siirrät live-syötteen, kysymys on, tuottaako Perfuse saman tulosteen kuin se, joka on ollut käynnissä vuosia. Mikään suunnittelun laatu ei vastaa tähän. Katso migration.

14.4 Varmistaminen oikean asian kanssa, konteinereissa

Kolme tarkastusta suoritetaan oikeiden toteutusten kanssa eikä Perfusen omien protokollan määrittelyn kanssa. Ne sijaitsevat konttien ulkopuolella make check -käskystä, koska ne tarvitsevat konttien suoritusympäristön, ja tarkastus, joka tarvitsee Dockerin, on tarkastus, jonka ihmiset lopettavat suorittamasta.

scripts/interop-up.sh käynnistää kaikki nämä ja tulostaa, mitä kunkin tarkastus löytää.

KonttiTarkastuksetMitä se löysi
Keycloak 26web/e2e-saml/ ja internal/saml -testitVirhe. Kanoninen muoto, jota allekirjoitus kattaa, laskettiin ilman nimirakenteen etuliitteitä, joten mikään todellinen tunnistuspalvelu ei voi allekirjoittaa ketään
Microsoft Entrainternal/saml -testit ja testitiedotKaksi vikaa, molemmat siinä, mitä ympäröi protokollaa. Tili luotiin Entran epäselvän NameID:n alle, koska luettavan nimen logiikka halusi sähköpostiväitteen ja Entra ei lähetä sellaista. Ja SAML-tili merkittiin OIDC:ksi, koska tallennus johti protokollan tunnistamiseen julkaisijasta, joka näyttää samalta molemmille
HAPI FHIRgo test ./internal/engine/ -run HAPIVirhe. Määrittämätön määräävä viranomainen tuotti tunnistejärjestelmän, joka ilmoitti OID:n ja sisälsi sanan, jota HAPI hyväksyi ilman valitusta
ActiveMQgo test ./internal/engine/ -run RealBrokerOikein, myös null-merkin kehyksen tapaus. Vahvistettiin välittäjän oman hallintaliittymän kautta eikä funktion kautta, joka palauttaa nil
nginx, asiakasvarmenteetgo test ./internal/engine/ -run ClientCertificateOikein
Orthanc (oikea PACS)go test ./internal/engine/ -run RealPACSOikein. C-STORE saapuu ja potilaan nimi, tunniste, tutkimuspäivämäärä, modaliteetti ja SOP-luokka kaikki säilyvät
PostgreSQLgo test ./internal/engine/ -run RealPostgresOikein, ja se aiheutti paremman virheen: lause, joka on väärän murteen paikoissa, kieltäytyy nyt tallentamisesta eikä muutu syntaksivirheeksi palvelimella, kun viesti saapuu
OpenSSH sftp-palvelingo test ./internal/engine/ -run OpenSSHServerOikein. Olemassa olevat SFTP-testit käyttävät samaa Go-kirjastoa molemmissa päissä; OpenSSH on eri toteutus ja se on lähes jokaisen todellisen syötteen päässä
Mirth 4.5.2go test ./internal/mirth/ -run RealMirthOikein nyt. Ainoa testitieto, jota aiemmin käytettiin, oli käsin kirjoitettu, ja Mirth ei lata sitä; scripts/mirth-author-channel.sh tekee Mirthin kanavan, ja Perfuse lukee sen

Jokainen tarkastus ohittaa kontin puuttumisen sijaan, joten make check menee läpi koneella, jolla ei ole Dockeria.

Miksi tämä on erillinen muusta joukosta. Jokainen muu näiden ominaisuuksien testi oli kirjoitettu täällä: asiakirja, jonka tämä koodipohja allekirjoitti, luettiin takaisin koodilla, joka allekirjoitti sen. Se on sopimus itsensä kanssa, ja se on vähemmän arvokasta kuin se näyttää.

SAML-kanoninen muotoilu on tapaus, joka osoittaa asian. Se sisälsi tuhannen rivin testejä, viisi niistä oli erityisesti kanonisen muotoilun suhteen, ja kaikki ne menivät läpi, vaikka mikään todellinen tunnistuspalvelu ei voinut allekirjoittaa ketään — kanoninen muoto, jota allekirjoitus kattaa, laskettiin ilman nimirakenteen etuliitteitä, ja ainoa tapa löytää se oli antaa sille asiakirja, jonka Perfuse ei ollut kirjoittanut.

Kaksi kahdeksasta tarkastuksesta löysi virheitä suoraan, ja kolmas aiheutti todellisen parannuksen. Kolme ei löytänyt mitään vikaa. Tuo suhde on argumentti kaikkien niiden säilyttämiseksi: tarkastus, joka menee läpi, on kertonut sinulle jotain, mitä et muuten olisi tiennyt, ja ei ollut mitään tapaa tietää etukäteen, mitkä ne olisivat.

Yksi kuvaamisen arvoinen malli, koska se ilmestyi molemmissa virheissä: hyväksyntä ei ole vahvistus. HAPI hyväksyi viallisen tunnistejärjestelmän ja tallensi sen; virhe ilmestyi vasta, kun resurssi luettiin takaisin. Vastaanottaja, joka sallii jotain, ei ole todiste siitä, että se on oikein, vaan vain se, että tämä vastaanottaja oli lempeä.

Kaksi tallennettua väittämää on tallennettu internal/saml/testdata/keycloak-assertion.xml ja entra-response.xml -tiedostoihin, ja niiden yli on testejä — joten tämä tietty takaisinmenetelmä on kiinni ilman konttia.

Molemmat ovat tarpeen eikä toista voi korvata toisella. Keycloak etuliitteet väittämänsä ja allekirjoituksensa, Entra ei tee sitä, ja ne ovat kaksi vastakkaista tapausta kanonisen muotoilun suhteen — joka on tarkalleen se, missä virhe oli. Testi vahvistaa kummankin asiakirjan edelleen oman tapauksensa, koska korvaava tallennus, joka sattumalta on etuliitetty, voisi hiljaisesti puolittaa kattavuuden ilman, että se epäonnistuu.

14.5 Oireiden määrittäminen testille, joka epäonnistuu kerran eikä enää

Testi, joka epäonnistuu täydessä suorituksessa ja menee läpi yksin kuusitoista kertaa, ei ole epävakaa testi. Se on testi, joka jakaa jotain suorituksen kanssa, ja tapa löytää se on mitata jaettua asiaa eikä testiä.

Kaksi välinettä on olemassa, ja molemmat on tarkoitettu suoritettavaksi täyden suorituksen rinnalla:

./scripts/e2e-watchdog.sh /tmp/watchdog.log     # the HTTP server and the shared session
./scripts/e2e-mllp-probe.py /tmp/mllp.log       # the fixture channel's listener

Kumpikaan niistä havaitsee suorituksen porteista asetuksen oman tilatiedoston ja ottaa näytteitä joka 500 millisekuntia, kunnes palvelin lopettaa. Ne kirjaavat jokaisen näytteen eikä vain epäonnistumisia, mikä tekee niistä hyödyllisiä: piikki näkyy suorituksessa, jossa mitään ei epäonnistunut, joten virhe, joka ilmenee kerran kolmessa suorituksessa, tulee mitattavaksi jokaisella suorituksella.

Aseta PERFUSE_E2E_KEEP=1 säilyttääksesi väliaikaisen hakemiston, joka sisältää tietokannan sellaisenaan ja palvelimen lokin koko suorituksen ajan. Palvelinloki on yleensä vastaus. Yhdessä tutkitussa tapauksessa se tallensi kanavan pysähtymisen ja sen kuuntelijan uudelleensitoutumisen 421 millisekunnin kuluttua, ja anturin yhden hylätyn yhteyden sattui kyseiseen aikanaan.

Lue jäljitys error-context.md -tiedoston sijaan, joka on ollut tyhjä useammin kuin kerran, kun jäljitys sisälsi oikean viestin.

Kopioi artefaktit ulos ennen kuin ajat mitään uudelleen. Menestyksekäs suoritus tyhjentää test-results -hakemiston, joten epäonnistuneen suorituksen jäljitys katoaa hetkeä ennen kuin yrität toistaa sitä. Kadonneen jäljityksen avulla voitaisiin vastata kysymyksiin, joita se olisi voinut vastata.

Pysäytä interop-containers ensin. Pysäytä ne ennen täydellistä selainajoa ja käynnistä ne ./scripts/interop-up.sh -komennolla myöhemmin, jos niitä tarvitset edelleen.

Kahdeksan konttia vie noin 9,8 GB muistia, ja koneella, jolla ei ole paljon enempää, on liian vähän jäljellä Chromiumin prosessien, solmun ja Go-työkalurivien yhteiskäytölle. Se tuottaa ei-muistivirheen, vaan renderöijä lopettaa aikataulutuksen: yksi tallennettu jäljitys näyttää 60,2 sekunnin aukon ilman kehysraameja, jonka aikana Playwright odotti, että painike tulisi "näkyväksi, käytettäväksi ja vakaaksi" ja ei voinut saada kahta peräkkäistä animaatiokehystä vertailemalla. Palvelin oli koko ajan terve, ja hitain pyyntö koko suorituksessa kesti 154 millisekuntia.

Se epäonnistuminen näyttää siltä, kuin kyseessä olisi vikaa kokeessa, joka sattui suorittamaan. On arvoa tietää sen muoto: jokainen pyyntö nopea, sivu visuaalisesti jäätyneenä, toisto silmukka ei koskaan saavuta toista iteraatiota, ja koko asia menee läpi eristetyssä tilassa.

Vain yksi suoritus kerran. Pakkaus jakaa yhden palvelimen, yhden kirjautuneen istunnon web/e2e/.auth/admin.json -tiedostossa ja yhden tilatiedoston, joka nimeää palvelimen prosessin. Mikään näistä ei ole suoritusspesifi, joten toinen suoritus, joka alkaa, kun ensimmäinen on menossa, ylittää tilatiedoston, ja kumpi tahansa puhdistus, joka päättyy ensin, tappaa toisen suorituksen palvelimen ja poistaa sen istunnon.

Miltä se näyttää, ei ole mitään sellaista kuin syy. Se tuotti 279 epäonnistumisen sarjan, jonka ensimmäinen viesti oli ENOENT: no such file or directory, open './e2e/.auth/admin.json', sarja joka pysähtyi kesken ilmoittaen 217 onnistunutta ja kaksi epäonnistunutta testiä bind: address already in use -virheellä — mikä ei viittaa siihen, että kaksi suoritusta taistelisivat. Testisarja ottaa nyt lukon ja kieltäytyy käynnistymästä, mainiten prosessin, joka pitää lukkoa. Keskeytetyssä suorituksessa jäänyt lukko otetaan haltuun sen sijaan, että se estäisi toiminnan ikuisesti, koska turvallisuustoimi, joka jumittaa testisarjan, on sellainen, jonka joku poistaa turvallisuuden mukana.

Läheinen ansa, joka on nyt korjattu: kaksi määritystä nimesi kuunteluporttinsa suoraan, joten palvelin, joka oli jäänyt keskeytetyssä suorituksessa, sai ne epäonnistumaan asiassa, johon ne eivät olleet osallisia. Portit pyydetään nyt käyttöjärjestelmältä.

Älä vastaa tähän uudelleenyrityksillä. Testi, joka menee läpi toisella yrittämällä, löysi oikean kilpailun ja piilotti sen, ja playwright.config.ts asettaa retries: 0 tästä syystä.

Yksi varoitus: otos joka 100 millisekuntia synnytti kaksikymmentä prosessia sekunnissa, venytti suoritusaikaa puoleen, ja epäonnistui kahdessa testissä aikakatkaisuilla, joilla ei ollut mitään vikaa. Mittalaite, joka muuttaa sitä, mitä se mitata, tuottaa havaintoja itsestään.

14.6 Mitä tarvitaan edelleen oikeaan infrastruktuuriin

Useat osat Perfusesta on toteutettu, mutta ne eivät ole koskaan olleet testattuina oikeaa asiaa vastaan. Ne on lueteltu tässä sen sijaan, että ne jätettäisiin löytämättä:

Ominaisuudet tässä luvussa ja seuraavassa luvussa ovat olemassa, jotta voit kerätä oman näytön sen sijaan, että ottaisit jonkun sanan.

14.7 Mitattu julkisia yhdenmukaisuuskokoelmia vastaan

Testisarja, jonka kiinnikkeet on kirjoitettu täällä, osoittaa sopimuksen itsensä kanssa. Nämä ovat muiden ihmisten dataa.

14.7.1 FHIR R4, määrityksen omat esimerkit

Kaikki 2 912 esimerkkitiedostoa, jotka on julkaistu FHIR R4-määrityksen kanssa — jokainen esimerkki, jonka standardin kirjoittajat ovat kirjoittaneet.

TulosMäärä
Resurssit, jotka on validoitava ilman löytöjä13 723
Resurssit, jotka on ilmoitettu virheellisiksi0
Tiedostot, jotka on hylätty toteutamattomana resurssityyppinä753
Bundle-merkinnät, jotka on ohitettu toteutamattomana tyypinä1 348

Yksikään resurssi ei validoitunut väärin. Jokainen epäonnistuminen on eksplisiittinen kieltäytyminen, joka nimeää sen tyyppiä, jota se ei voi lukea — 672 ValueSet, 80 ConceptMap ja yksi Parameters. Validointityökalu, joka hiljaa hyväksyy sen, mitä se ei ymmärrä, on huonompi kuin sellainen, joka sanoo sen.

Korpus löysi virheen, joka on syy sen suorittamiseen. Bundle-validoiminen tulosti "Bundle-validoiminen tiedostosta ei ole vielä tuettu" ja jatkoi. Se oli väärä kummassakin suunnassa: bundleja, joiden kirjaukset sattuivat olemaan tyyppejä, joita parseri pystyi pitämään, validoidaan jo, ja bundle, joka oli todella virheellinen, tuotti saman rivin, laskee mitään ja poistuu nollaan — myös -strict-valitsimella, joka on olemassa, jotta se voi portaan rakentaa. 42 määrityksen omista bundleista ohitettiin.

Pakettiin kuuluvat tiedot validoidaan yksitellen, ja niistä muodostuu kolme eri tulosta: virheellinen tieto epäonnistuu ja nimeää kentän, tieto, jota tämä versio ei pysty lukemaan, luetaan yli ja raportoidaan, ja paketti, joka ei sisällä resurssien runkoja, ei ole kumpaakaan. Sama aineisto kasvoi 2 100 tarkistetusta resurssista 13 723:een.

14.7.2 HL7 v2, HAPI-testikorpus

HAPI: n viestin esimerkit, Java HL7 v2 -viittausmenetelmä — tarkoituksella epäkäytännöllinen materiaali, joka sisältää uuencode-paketit, paennut erotinmerkit ja toistuvat ryhmät.

59 viestiä, 59 parsittu, mitään ei hylätty. Seitsemän viestityyppiä joukossa, jota yksittäinen järjestelmä kuvaisi yhtenä asiana, mikä on se syy, miksi perfuse profile on olemassa.

14.7.3 Mitä ei ole ajettu

DICOM julkisessa mukautumisjoukossa ja X12 julkaisemassa aineistossa. Kumpaakaan ei ole tehty, eikä kumpaakaan pitäisi päätellä kahdesta edellisestä.

15 Siirtymä Mirthistä

Kaksi asiaa tarvitaan toimivan moottorin korvaamiseen: kanavat on siirrettävä, ja joku on näytettävä, että korvaava tuottaa saman tuloksen. Perfuse tekee ensimmäisen tuomalla Mirthin omat viennit, ja toisen vertaamalla kahta moottoria omassa liikenteessäsi.

Kaikki tässä luvussa sanottu koskee yhtä lailla Open Integration Engineä ja BridgeLinkiä. Mirth Connect lakkasi olemasta avoimen lähdekoodin ohjelma versiossa 4.6 maaliskuussa 2025; OIE (isäntänä Eclipse Foundation) ja BridgeLink (Innovar Healthcare) ovat forkkeja, jotka jatkavat avoimen lähdekoodin linjaa, ja molemmat kirjoittavat samat vientiformaatit. Tuonti on testattu kaikkia kolmea alla.

15.1 Kanavien tuonti

Perfuse lukee jokaisen näiden moottorien kirjoittaman viennin:

VientiHallinnoltaMitä tulee mukaan
KanavaVienti KanavaKanava
KanavaryhmäVienti RyhmäJokainen kanava siinä, jokainen säilyttää ryhmän
KoodimallineetVienti KoodimallineetJokainen kirjasto yhtenä skriptitiedostona
PalvelinvarmuuskopioVarmuuskopio Konfiguraatio, tai GET /api/server/configurationKaikki edellä mainitut kerran

Osoita perfuse translate missä tahansa niistä, tai pudota yksi Hallinta → Siirrä:

perfuse translate -o ./channels server-backup.xml

Kooditemplattekirjasto muuttuu lib/<library>.js:ksi kanavien vieressä, ja jokaiselle kanavalle, jolle kirjasto on otettu käyttöön, tulee scripts.include: [lib/<library>.js] — joten transformer, joka kutsuu sivufunktiota, kuten formatMRN(), löytää sen edelleen. Kanava, jolle kirjastoa ei ole otettu käyttöön, ei sisällä sitä, koska sen skriptit eivät voi nähdä sitä Mirthissäkään. Raahaa-ja-pudota -palat jätetään pois: Mirth liittää ne aina vain käsin askelkohtaisesti, joten ne eivät ole itsenään suoritettavaa koodia. Selaimessa kanavan tuominen tallentaa ensin sen sisältämät kirjastot.

Kanavan kirjoittaja nimeää kanavan, johon se toimittaa, tunnisteella. Ryhmässä tai varalla kohde on samassa asiakirjassa, joten se tulee channel-kohdeksi, joka nimeää kyseisen kanavan; yhden kanavan viennistä se ilmoitetaan sinun täyttämään. Palvelimen laajuiset globaalit skriptit eivät ole Perfusen vastaavia, ja ne ilmoitetaan sen sijaan, että ne hylätään.

Raportti kertoo kanava kohden, onko se käännetty puhtaasti, käännetty varoituksin vai ei se voitu lukea.

Otsikko on murto-osa, jonka nimittäjä on — "37 40:stä valmis" — koska "37 valmis" ei kerro sinulle mitään siitä, mitä sinun on vielä tehtävä.

Kanava, jota ei voitu lukea , on eri ongelma kuin kanava, jota ei voitu käännetä . Ensimmäinen tarkoittaa, että itse XML ei parseerunut ja on yleensä katkaistu tai osittainen vienti; jälkimmäinen tarkoittaa, että kanavan sisältö sisältää jotain, jolla ei ole Perfusen vastaavaa. Tuonti erottaa ne.

15.2 Mitä käännetään ja mitä tarvitaan päätös

Lähteet, kohde, suodattimet ja tavalliset transformer-vaiheet käännetään suoraan. Liitännäiset, jotka käännetään: TCP/MLLP (ja raaka TCP sen kehyksineen), HTTP, Tiedosto, Tietokanta, JavaScript, DICOM, Web-palvelu (SOAP), SMTP ja Kanava Kirjoittaja/Lukija. JMS ja Asiakirja Kirjoittaja eivät käänny, ja ne ilmoitetaan esteinä.

Mapper-vaihe, joka asettaa muuttujan, laittaa sen karttaan, jonka sen piiri nimeää — channelMap oletusarvoisesti — täsmälleen kuten Mirth tekee, joten myöhemmät vaiheet, jotka lukevat sen $('name'):lla, löytävät sen.

JavaScript-transformerit eivät yleensä. Mirth-kanavat sisältävät usein merkittäviä koodinpätkiä transformerissa, eikä ole olemassa automaattista muunnosta mielivaltaisesta JavaScriptistä deklaratiivisiksi vaiheiksi. Tuonti ilmoittaa ne sen sijaan, että se yrittäisi kääntää sitä, mikä voisi olla häikäisevästi väärin: väärin käännetty transformer on huonompi kuin sellainen, joka on merkitty ihmisen tarkastettavaksi, koska se suoritetaan.

Siinä tapauksessa, että skripti on oikeasti jäävä skriptiksi, Perfuse voi suorittaa sen — katso scripts-avain kanavaviitteessä — hävittäen vaihekohtaisen jäljityksen, josta on kerrottu virheenjäljityksessä

15.3 Mitä tuonti on testattu vastaan

Viisi moottoria, joista kunkin kirjoittaa omat asiakirjansa: Mirth 4.5.2, OIE 4.5.2, 4.6.0 ja 4.7.0, sekä BridgeLink 26.9.0. scripts/mirth-engine-corpus.sh kokoaa pienen ohjelman kunkin moottorin omiin jar-tiedostoihin ja kirjoittaa sen oman serialisoijan avulla kolme tavallista kanavaa — MLLP-syötteen, jossa on kartturi, skripti, joka kutsuu kooditemplatesekirjastoa ja suodatinta; HTTP-syötteen tietokantaan; tiedoston tarkkailu MLLP:n yli — sekä kirjaston ja kanavaryhmän. Se lataa ne suorittavaan moottoriin ja lataa moottorin oman palvelimen varmuuskopion. Tulokset tallennetaan internal/mirth/testdata/engines/ - alle, ja testisarja pitää tuojaa jokaisessa niistä jokaisella rakennuksella: kunkin varmuuskopion luetaan, käännetään, ladataan ja ADT-kanava suoritetaan kahdella viestillä tarkistamaan, että kirjasto täyttää asiakirjan numeron ja suodatin pudottaa tuloksen.

Perfusen omat viennit menevät toiseen suuntaan — Perfuse-kanavat tuodaan jokaiseen suorittavaan moottoriin ja tarkistetaan, ettei moottori tallentanut niitä virheellisinä. Kaikki viisi hyväksyvät jokaisen Perfusen viennin kuljetuksen. Open Integration Engine 4.7.0 lisäsi kaksi HTTP-asetusta, joilla ei ole tässä vastinetta: HTTP-lähetin, joka on sitoutunut valittuun paikalliseen osoitteeseen, ilmoitetaan varoituksena, ja HTTP-kuuntelijan pyynnön otsikko rajoitus vain, kun se ylittää 1 MB, jonka Perfuse hyväksyy.

Ensimmäinen suoritus tätä korpusoimaa löysi neljä virhettä, jotka kaikki on korjattu: kääntäjä kieltäytyi HTTP- ja tiedostolähteistä "vain MLLP on tuettu" pitkän aikaa sen jälkeen, kun Perfuse oli jo molemmat; se luki HTTP-lähettäjän osoitteen kentästä, jota kukaan moottoreista ei kirjoita; se käänsi Mirthin soketin puskurin koon 64 KB viestin rajaksi; ja kartan muuttuja tuli JavaScriptin globaaliksi, jota $('mrn') ei koskaan nähnyt, joten kirjasto täytti tyhjän merkkijonon.

The single-channel fixture that started this was also exported by Mirth 4.5.2, authored by Mirth itself rather than written here. That distinction earned its place: the only fixture in this repository used to be hand-written, and a real Mirth will not load it — the API accepts the POST and then stores the channel as This channel is invalid. Verify all required extensions are loaded correctly, with every destination connector discarded.

Käsin kirjoittaminen ei koskaan toiminut, ja syy on arvokas tietäminen, jos tuotat omia vientejäsi. Mirthin serialisoija ignooraa tuntemattomia elementtejä, joten väärä elementin nimi ei tuota virhettä lainkaan — liitännäinen on vain poissa lopputuloksesta. Ei ole mitään luettavaa eikä mitään korjattavaa.

scripts/mirth-author-channel.sh rakentaa yhden Mirthin omien malliluokkien ja serialisoijan avulla, ja lähettää sen suorittavaan palvelimeen ja epäonnistuu, jos palvelin hylkää sen. Perfusen tuonti lukee tuloksen: nimi, lähdetransportti ja kohdekaistat kaikki säilyvät.

15.4 Osoittaminen, että se vastaa

Tämä on osa, joka päättää, tapahtuuko migraatio, ja se tarvitsee näyttöä sen sijaan, että olisi vain luottamus.

Perfuse vertaa omaa tulostettaan vanhan moottorin tulokseen, viesti viestin jälkeen, liikenteessäsi. Se tarvitsee parit: viesti, joka saapui, ja viesti, jonka vanha moottori tuotti siitä. Molemmat ovat Mirthin omassa viestivarastossa ja voidaan viedä sen viestiselaimesta.

Perfuse ei pysty tunkeutumaan Mirthiin, ja tämä käsikirja ei väitä vastakkaisesti. Työkalu, joka väittäisi vahvistavansa migraation ilman, että se koskaan näkee vanhan moottorin todellista tulostetta, vahvistaisi mitään. Parien toimittaminen on rehellinen muoto tästä harjoituksesta.

15.4.1 Neljä lukua, ei läpäisyprosentti

TulosMerkitys
IdenttinenSamanlainen bitti bittien jälkeen.
Vain kosmeettinenEroaa tavoin, jotka eivät kanna tietoa — peräkkäiset tyhjät kentät, lopullinen päättymismerkki.
EroaaKentän arvo on erilainen.
Ei suoritettuPerfuse ei voinut käsitellä viestiä lainkaan.

Ne ovat neljä lukua, koska ne tarkoittavat neljää eri asiaa, ja niiden yhdistäminen piilottaa ne, jotka tarvitsevat päätöksen.

Identtinen tarkoittaa bitti bittien jälkeen, ei vastaavaa. Heikompi testi antaisi erojen segmentin järjestyksessä tai peräkkäisten erottimien kautta, ja ne ovat juuri sitä, mitä tarkka järjestelmä hylkää.

Kosmeettiset erot lasketaan erikseen eikä niitä yhdistetä hyvään sarakkeeseen. Ne eivät kanna tietoa, joten niiden käsittely virheinä haudottaisi oikeat löydökset tuhansiin mitättömiin — mutta ne eivät ole identtisiäkään, ja vastaanottaja, joka tekee oman tiukkojen parsimisen, voi olla eri mieltä.

"Ei suoritettu" on erillinen "eroaa"-kohdasta, koska se on yleensä konfiguraatio-aukko, jonka tuonti ei voinut täyttää, eikä kartoituspäätös. Jos kaikki on siinä sarakkeessa, lausunto sanoo sen ja kehottaa tarkastelemaan konfiguraatiota ennen kuin lukee mitään muuta.

15.4.2 Erot ryhmitellään kentän mukaan

Suoritus 50 000 viestin yli, joka ilmoittaa 4 000 eroa, on kertonut sinulle mitään, jota voit tehdä. Sama suoritus, joka ilmoittaa, että PID-8 eroaa jokaisessa viestissä, koska vanha moottori kirjoitti Male siinä, missä Perfuse kirjoittaa M, on kertonut sinulle yhden asian, jonka voit päättää.

Jokainen löytö on kenttä, jolla on laskuri, ja se kertoo, onko ero järjestelmällinen — sama arvopari joka kerta — vai onko kentän sisältö erilainen.

Tämä ero on hyödyllisin asia raportissa. Yksi erillinen arvopari 4 000 viestin yli on yksittäinen kartoituspäätös. 4 000 erillistä paria on sisällön ero, joka on erilainen ja paljon huonompi ongelma, ja ne eivät saa olla samanlaisia.

Löydöt on järjestetty siinä järjestyksessä, kuinka monta viestiä ne vaikuttavat, joten suurin yksittäinen syy on ensin.

15.4.3 Lausunto ei pyöristä

Se antaa tarkat luvut: 49 993 50 000:sta, ei "yli 99 %". Ne seitsemän ovat koko suorituksen pääasia.

Se on kirjoitettu siten, että se voidaan siteerata muutospyyntöasiakirjassa, koska siinä luvut lopulta päättyvät.

15.5 Ehdotettu järjestys

  1. Tuominen kanavia ja ratkaiseminen kaikki, mitä ilmoitetaan lukukelvottomaksi.
  2. Kunkin kanavan kohdalla tarkastellaan varoituksia. Useimmat ovat skriptejä.
  3. Viedään muutamia tuhansia viestipareja Mirthista ruuhkaisimmasta kanavasta ja suoritetaan vertailu.
  4. Työskennellään löydösten parissa. Järjestelmälliset ovat yksi päätös kussakin.
  5. Suoritetaan uudelleen, kunnes ainoat erot ovat ne, jotka olet päättänyt olevan oikein.
  6. Suoritetaan Perfuse varjona Mirthin rinnalla liven liikenteessä, toimittamatta minnekään, ja vertaillaan uudelleen jakson aikana, joka kattaa viikonlopun ja kuun lopun.
  7. Leikataan yksi kanava, ei kaikkia.

15.6 Mitä toimii vain yhden valmistajan ohjelmistolla

Siirtymänäkymä vastaa toiseen kysymykseen, ja se on arvokasta kysyä ennen kuin sinulla on mielipidettä Perfusesta: kuinka paljon integraatiologiikkasi voi toimia vain ohjelmistollasi.

Jokaiselle kanavalle annetaan Siirrettävyys -tuomio, samasta skannauksesta, joka tuottaa siirtymismerkinnät. Se suoritetaan kanavan viennissä, joten siihen ei tarvita mitään asennusta eikä se muuta mitään.

15.6.1 Ero on koko asian pointti

Useimmat Java-kielet Mirth-skripteissä eivät ole lukkoja. SimpleDateFormat, HashMap, Apache Commons — kaikki toimivat JavaScript-moottorin ympärillä vuodelta 2009, kaikki ovat tavallisia, kaikki niistä on suoria vastineita. Kanava, jossa on kolmesataa viittauksia, on täysin siirrettävä, ja työkalu, joka ilmoittaa "300 Java-viittauksia, olet lukittu" olisi valehtelemassa sinulle.

Lukko on nimenomaan soittopyynnöt, jotka tarvitsevat valmistajan omaa palvelinta: com.mirth.connect.* ja valmistajan jar-tiedostot. Viisi niistä ja olet jumiutunut. Viisisataa muun tyyppistä ja olet vapaa.

Joten tuomio alkaa luvulla, joka on tärkeintä, ja sanoo samassa lauseessa, että suurempi luku ei ole se. Kun on valmistajan soittopyyntöjä, ne luetellaan nimeltä — laskenta on väite, ja luettelo on jotain, mitä oma insinööri voi tarkistaa.

Kolmas kategoria pidetään erillään: ominaisuus, joka on olemassa, mutta ei skriptistä. Kanavan käynnistäminen JavaScriptistä ei ole vastaavaa täällä, ja on API-päätepiste, joka tekee samaa asiaa. Kutsuminen lukitsemiseksi olisi liioittelua.

15.6.2 Java-soittopyynnöt, jotka toimivat muuttumattomina

Näistä Java-luokista yleisimmät suoritetaan sellaisenaan. Perfusella ei ole Java-ajonaikaa, joten nämä ovat JavaScript-luokat, joilla on samat nimet ja menetelmät, riittävästi kanavaskriptien käyttöä varten; importPackage(java.util) ja importClass(...) tuovat ne laajuuteen lyhyillä nimillä, kuten Rhinossa (JavaScriptin omat Date, Map, Set, Math, String ja Boolean eivät koskaan korvata: Java-versiot ovat edelleen käytettävissä täydellisillä nimillä). Siirtoraportti laskee jokaisen näistä kutsuista jo olemassa olevaksi.

PakettiLuokat
java.utilArrayList, LinkedList, Vector, List, Collection, HashMap, LinkedHashMap, Hashtable, TreeMap, Properties, HashSet, LinkedHashSet, TreeSet, Arrays, Collections, Date, Calendar, GregorianCalendar, UUID, Base64, regex.Pattern (Matcher), concurrent.ConcurrentHashMap
java.langString, StringBuilder, StringBuffer, Integer, Long, Short, Byte, Double, Float, Boolean, Math, System (aika ja rivin erottaja vain)
java.text, java.math, java.net, java.nioSimpleDateFormat ja DateFormat (Mirthin kirjainmerkit), BigDecimal (kaksoisena), URLEncoder, URLDecoder, StandardCharsets
Apache Commonslang3.StringUtils ja lang.StringUtils (noin kuusikymmentä menetelmää), StringEscapeUtils, codec.binary.Base64

Ne käyttäytyvät Java: n tavoin, kun skriptit riippuvat siitä: Integer.parseInt("x") heittää NumberFormatException, String.replaceAll ja split ottavat säännöllisiä lausekkeita, kun taas replace on kirjaimellinen, kartat avainmerkkijonoja arvon mukaan, TreeMap ja TreeSet iteroidaan järjestyksessä, ja SimpleDateFormat.parse palauttaa päivämäärän, jolle getTime() toimii. Menetelmä, jonka skripti kutsuu, ja jota vastaava puuttuu, epäonnistuu kyseisellä rivillä, nimeää sen; mikä tahansa muu Java-luokka epäonnistuu nimen perusteella, kuten aiemmin. BigDecimal on täällä double, joten se ei säilytä Java: n tarkkaa desimaalilaskentaa: tarkista skriptit, jotka käyttävät sitä rahaa varten.

15.6.3 Ulkopuoliset skriptit ilmoitetaan tuntemattomiksi

Askeltapa, joka suorittaa ulkoisen skriptitiedoston, viittaa polkuun vanhassa palvelimessa, ja tiedostoa ei ole viennissä. Mitään ei voida sanoa siitä, mitä se sisältää, joten se lasketaan tuntemattomaksi eikä oleteta kumpaakaan suuntaa. Nouda nämä tiedostot ennen kuin teet mitään johtopäätöksiä — molempiin suuntiin.

15.6.4 Perfusen oma lukko, ilmoitettu samassa henkäyksessä

Tämä osio olisi epärehellinen ilman sitä.

Perfuse on Apache 2.0, joka on peruuttamaton jo julkaistuun koodiin. Voit forkata mitä on olemassa tänään, ja kukaan ei voi peruuttaa sitä. Kanavat ovat YAML-tiedostoja, ja skriptit ovat tavallisia JavaScript-tiedostoja, joten siinä ei ole mitään omisteisia pintoja, joita kutsutaan — Mirthin Java-riippuvuuden maku on rakenteellisesti saatavissa täällä, mikä on aito ominaisuus.

Mitä se ei luvaa: että tuleva versio pysyy avoimena, että isännöity palvelu on olemassa edulliseen hintaan, tai että Perfusen siirtäminen maksaa mitään. Minkä tahansa integraatiokerroksen siirtäminen tarkoittaa jokaisen kanavan uudelleentestaamista todellista liikennettä vastaan. Mitä valitset, onko rakennettavien artefaktien luettavissa ja siirrettävissä, ja riippuuko poistuminen lisenssistä, jonka joku muu hallitsee.

15.6.5 Asetus kuudennen vaiheen

One message real traffic Live channel unchanged Candidate the version you are testing Receiver delivers nothing Comparison field by field The candidate sees the same real messages as the live channel and delivers none of them. Only the live channel reaches the receiver. What you read afterwards is where the two disagreed, field by field — not a pass or a fail.

Varjo -osio aloittaa vertailun. Valitse kanava, joka on käynnissä, valitse kohde, jota vastaan vertaillaan luettelosta, ja aloita.

Kolme asiaa siitä on arvoa tietää ennen kuin luotat numeroihin.

Vastaus valitaan luettelosta, eikä kirjoiteta. Varjo nimittää kanavatiedoston, ja nimi, joka ei ratkea, tekee *aktiivisen* kanavan virheelliseksi — Perfuse hylkää koko kanavan, kun mitään siihen viittaavaa on rikkoontunut. Virheellinen kirjoitus ei siis aiheuta varoitusta, vaan saa aikaan, että suoritettava kanava katoaa.

Osuus on prosentteja. Laske sitä ainoastaan kiireisellä syötteellä, ja tiedä, mitä se maksaa: otos vähentää työtä ja luottamusta samassa suhteessa, ja viesti, joka olisi osoittanut eroa, on epätavallinen.

Ohitettavat kentät ovat yleensä tarpeen. Kanava, joka merkitsee aikaleiman tai järjestysnumeron, eroaa jokaisessa viestissä, mikä ilmoittaa 100 %:n eroavuuden ja kertoo sinulle mitään. MSH-7 ja MSH-10 ovat yleinen pari.

Vertailu kirjoitetaan kanavatiedostoon, kun sen käynnistät, ja alkaa havainnoida, kun kanava seuraavan kerran ladataan — näyttö kertoo sen sijaan, että se on jo käynnissä. Vertailun lopettaminen jättää kandidaattikanavan paikoilleen, koska kandidaatti on se, mitä on tarkoitus ottaa käyttöön.

Vaihe 6 on se, jota ei voida lyhentää. Merkittävät erot ovat yleensä liikenteessä, joka näkyy vain toisinaan — harvinainen laukaiseva tapahtuma, kuukauden lopun erä, lähettäjä, joka käyttäytyy eri tavoin keskiyön jälkeen — ja otos, joka otetaan iltapäivällä, ei sisällä niitä.

15.7 Meneminen toiseen suuntaan

Kanava voidaan viedä Mirth-kanavatiedostona selaimen kautta: Kanavat, sitten Mirthiin haluamallasi kanavalla.

Tämä on olemassa, koska vastalause korvaavan toimivan moottorin harvinainen on harvoin se, onko korvaava hyvä. Se on, mitä tapahtuu, jos päätös osoittautuu vääräksi, ja vie viennin takaisin menneiltä on halvin vastaus siihen.

Lue, mitä vuoropuhelu kertoo, ennen kuin otat tiedoston. Mirthin muotoilussa ei ole tilaa Perfuse-suodattimelle, muunnosketjulle, sopimukselle tai varjoverroinnille, joten viety kanava tekee vähemmän kuin se, mistä se tuli. Siirtämisen ja osoitteiden muunnokset; logiikka ei. Jokainen tappio on lueteltu nimellä ennen kuin tiedosto tarjotaan, ja sama luettelo menee kanavan kuvauskohtaan, jotta se, joka tuo sen, näkee sen myös.

Kanavaa, jota Mirth ei voi ilmaista, hylätään sen sijaan, että se approksimoidaan. S3-kohteella ei ole Mirth-vastinetta, ja kanava, joka tuodaan puhdistettuna toimittamalla jonnekin muualle kuin bucketiin, olisi huonompi kuin mikään tiedosto.

Liittymän määritykset eivät ole kirjoitettu Mirthin muodon lukemisesta. scripts/mirth-dump-connector-templates.sh sisältää Mirthin oman sarjoittimen, joka tuottaa oletukset kullekin liittymäluokalle, ja Perfuse korvaa arvot näissä asiakirjoissa — hylkäämällä kaikki asetukset, joita mallipohja ei jo sisällä. Tämä on tärkeää, koska Mirth vastaa kanavaa, jota se ei voi käsittää: se ei hylkää tuontia. Se tallentaa kanavan, jonka kuvaus on korvattu "Tämä kanava on virheellinen. Varmista, että kaikki vaaditut laajennukset on ladattu oikein" ja jonka kohteet on vaikenetesti hylätty. Viejä, joka on tarkistettu omasta tulostuksestaan eikä palvelimesta, läpäisee jokaisen testin ja tuottaa asiakirjoja, jotka heitetään pois, mikä on täsmälleen se, mitä tapahtui täällä ennen kuin viennit yritettiin suorittaa Mirthillä.

Mitä ylittää tänään: MLLP ja TCP molemmissa suunnissa, HTTP molemmissa suunnissa, tiedoston lukeminen ja kirjoittaminen, tietokannan lukeminen ja kirjoittaminen, DICOM molemmissa suunnissa, ja SMTP, SOAP ja JavaScript-kohteet. Kukin pari on vahvistettu tuomalla se todelliseen Mirth 4.5.2:een ja tarkistamalla, ettei palvelin ole vaikenetesti korvannut kanavaa.

16 CMS-0057 vakuutusyhtiöille

CMS Interoperability and Prior Authorization -loppusääntö (CMS-0057-F) edellyttää vaikuttuneilta vakuutusyhtiöiltä — Medicare Advantage -organisaatioilta, osavaltion Medicaid- ja CHIP-ohjelmilta ja niiden hallinnoimilta hoitosuunniteluilta, sekä QHP-vakuutusyhtiöiltä liittovaltion vaihtoehtoja — suorittaa neljä FHIR-Rajapintaa 1. tammikuuta 2027 alkaen, ja julkaista etukäteen hyväksyttyjä metriikoita julkisella verkkosivustollaan joka vuosi vuodesta 2026 alkaen.

Perfuse tarjoaa neljä rajapintaa FHIR-päätepisteessään ja muunnokset, jotka täyttävät ne: vakuutetut vaatimukset CARIN Blue Button -muodossa, etukäteen hyväksytyt metriikat Da Vinci PDex -muodossa, ja vuosittaiset metriikat CMS:n oman mallipohjan asettelussa. CMS-0057-näkymä, Exchange-alaisuudessa, kertoo, mitkä neljästä tämä instanssi voi vastata, ja mitä kullekin vielä puuttuu, ja tekee kaikki kolme muunnosta selaimessa.

Lääkkeet ovat koko ajan laajuisesti ulkopuolella, kuten ne ovat myös etukäteen hyväksyttyjen säännösten osana: ei farmaseuttisia vaatimuksia, ei lääkevalikoimaa, ja metriikka, joka mainitsee lääkkeen, hylätään sen sijaan, että se lasketaan.

16.1 Neljä rajapintaa

APIMitä se palveleeOpaskirjatKäynnistetty
PotilaspuolelleJäsenen korvaukset, kliiniset tiedot ja aiemmat valtuutukset, sovellukseen, jonka he valitsevatCARIN Blue Button 2.2.0, PDex 2.2.0, US Core, SMART App Launch-fhir ja SMART-issuer (-smart-issuer)
TarjoajapuolelleSama tarjoajan määritettyjen jäsenien osalta, erässäPDex 2.2.0, Da Vinci ATR 2.1.0, Bulk Data-fhir-payer-apis ja -fhir-bulk-export
Vakuuttajien välinenJäsenen tietue toiselle vakuuttajalle, sen jälkeen kun heidät on tunnistettuHRex 1.2.0 $member-match, PDex 2.2.0-fhir-payer-apis
EtukäteisvaltuutusMitä tilaukselle tarvitaan, asiakirjat, sitten pyyntö ja päätösDa Vinci CRD, DTR ja PAS 2.2.x (2.2.1, 2.2.0, 2.2.1) ja 2.1.0, X12 278 käännöksellä-fhir, kirjoitettavissa, ja -crd-rules

Potilastason API:lla ei tarvita omaa toimintoa: se on FHIR-päätepisteen tavallinen lukuoikeus ja hakuoikeus, jota SMART suojaa, ja siinä on CARIN- ja PDex-resursseja tallennuksessa. ExplanationOfBenefit-hakeminen tukee CARIN-nimien parametreja — patient, identifier, type, service-date, billable-period-start, provider, insurer, coverage — ja Coverage tukee subscriber-id, identifier ja payor.

16.1.1 Kaksi oppaan julkaisua: 2.1.0 ja 2.2.x

CMS-0057-F suosittelee CRD: tä, DTR: ä ja PAS 2.0.1 ja 2.1.0. 2.0.1-julkaisut perustuvat US Core 3.1.1: een, joka vanheni 1. tammikuuta 2026, joten 2.1.0 on todennäköisesti versio, jota EHR, joka on rakennettu säännön mukaan, puhuu; uusimmat ovat CRD 2.2.1, DTR 2.2.0 ja PAS 2.2.1. Perfuse vastaa molempiin. Se selvittää, mitä versiota soittaja puhuu, ensin tarkimmasta:

  1. pyynnöstä: CRD: n CDS Hooks -laajennus davinci-crd.requestedVersion ("2.1"), tai versio Da Vinci -profiilissa, jonka DTR- tai PAS-syöte vaatii (profile-pas-request-bundle|2.1.0);
  2. soittajan rekisteröinnistä: davinci_version: "2.1" SMART-asiakkaalla (-smart-clients) tai CDS-asiakkaalla (-cds-clients);
  3. palvelimelta: serve -davinci-version 2.1; oletus on 2.2.
clients:
  - issuer: https://ehr.example.org
    jwks_url: https://ehr.example.org/.well-known/jwks.json
    davinci_version: "2.1"

Jokainen vastaus määritetään ja säilytetään 2.2.x-muodossa ja kirjoitetaan uudelleen 2.1.0-soittajalle, kun se lähetetään, joten säännöt, tarkastusjono, X12 278 -linkki ja mittarit ovat samat molemmille. Uudelleenkirjoitus kattaa, mitä julkaisut merkitsevät eri tavoin: CRD 2.1.0: lla ei ole indeterminate (Perfuse sanoo ehdollinen, syystä) eikä kategoriaa kattavuksen yksityiskohdassa; DTR 2.1.0 nimeää paketin PackageBundle ja jättää QuestionnaireResponse-sovelluksen; PAS 2.1.0: n $inquire vastaa yhdellä Bundlella, ja siinä puuttuu tarkastelija- ja lähetyseksensiot. Täydellinen luettelo ja tarkistus kunkin 2.1.0-oppaan omien esimerkkien kanssa on conformance/davinci21: ssä. PAS-ilmoitus seuraa -davinci-version, koska tilaus ei kerro, mikä versio omistajansa lukee.

16.2 Kattavuusvaatimukset ja dokumentaatio: CRD ja DTR

Prior Authorization API on käytännössä kolme Da Vincin opasta yhdessä. CRD kertoo klinikoitsijalle, kun tilaus on vielä luonnos, onko se kattavuus, tarvitaanko ennakkovaltuutus ja mitä asiakirjoja halutaan. DTR antaa EHR:lle kyselylomakkeen, joka kerää kyseisen asiakirjan. PAS lähettää pyynnön ja palauttaa päätöksen. Perfuse palvelee kaikkia kolmea maksajana.

-crd-rules rules.yaml tarjoaa CRD:n CDS Hooks -yli /cds-services: kaikki kuusi CRD:n hookkia, order-sign, order-select, order-dispatch, appointment-book, encounter-start ja encounter-discharge, kullakin on esihaku potilaan aktiiviselle vakuutukselle. Kaksi tapaamishookkia esihakee myös tapaamisen, ja vastaa itse tapaamisesta, joka on vastattu sen tyypin ja palvelun tyypin mukaan, kuten appointment-book vastaa tapaamisesta. Säännöt ovat vakuuttajan käytäntö, jotka säilytetään tiedostossa, koska ne muuttuvat ilman ohjelmistojulkaisuja:

payer: Springfield Health Plan
rules:
  - description: Home oxygen equipment
    codes: [E0424, E0431]
    covered: covered            # covered, not-covered, conditional
    pa: auth-needed             # no-auth, auth-needed, satisfied, performpa, conditional
    documentation: [clinical]
    questionnaire: https://www.springfield-health-plan.example/fhir/Questionnaire/home-oxygen

Jokaiselle tilaukselle tehdään systemActions-päivitys, joka sisältää CRD:n kattavuustietojen laajennuksen - jonka EHR tallentaa tilaukseen ja lähettää myöhemmin eteenpäin ennakkovaltuutuksessa - ja kortin, jonka klinikkotyöntekijä lukee. Tilaukselle, jonka koodi ei ole säännössä, annetaan vastaus conditional, eikä sitä koskaan oleteta olevan katettu; pyynnöille, joilla ei ole lainkaan kattavuutta, annetaan kortti, jossa tämä ilmoitetaan. examples/crd/-kansiossa on sääntötiedosto ja siihen liittyvä kyselylomake.

Sääntö voi myös sisältää loput siitä, mitä CRD sallii maksajalle:

oma invariantti crd-ci-q4 hylkää sen.

Mikä EHR ei ollut esihakenu, Perfuse lukee EHR:n fhirServer-palvelimesta lähetetyllä tunnisteella. Jos tämä epäonnistuu, vastaus on indeterminate CRD:n technical-syyllä, ei koskaan arvaus. Kattavuus, joka on päättynyt tai ei ole aktiivinen, vastataan not-covered, no-active-coverage.

members: fhir sääntötiedostossa ratkaisee kattavuuden maksajan omien tietojen perusteella tämän palvelimen FHIR-tietokannassa (käynnistä se -fhir-valinnalla), samat tiedot, mitä $member-match lukee:

ja siinä on se numero.

Havaitseminen ilmoittaa davinci-crd.version ja coverage-info -konfiguraatiovaihtoehdon. Kun asiakas sammuttaa vaihtoehdon, vastaus on tyhjä. EHR JWT: t tarkistetaan CDS Hooks -määrittelyn mukaan, iss, aud, exp, iat ja jti ja ilman sub, ja toistuva jti hylätään.

Kutsut tunnistautuvat JWT:llä, jonka EHR allekirjoittaa kutsuun, jonka lähettäjä on nimetty -cds-clients-valinnassa sen JWKS-URLin kanssa - joka on se, miten CDS Hooks kuvailee sen - tai Perfusen API-tunnuksella. Etsintä on avoin, kuten CDS Hooks vaatii.

DTR: lataa kyselyt FHIR-päätepisteeseen, ja POST /fhir/Questionnaire/$questionnaire-package palauttaa ne DTR-pakettipaketteina, joissa on CQL-kirjastot, joita ne nimeävät. Pyynnössä voidaan nimeää kysely, tai lähettää tilaus ja antaa sen kattavuustiedon kertoa, mikä.

Kokeile sitä: Vakuuttajat → Väittämät ja valtuutukset → Kattavuusvaatimukset (CRD) lähettää tilauksen tälle palvelimelle säännöille, tai vakuuttajan CDS-palvelun URL: lle, ja näyttää kortit ja kattavuustiedot.

16.3 Väitteet CARIN Blue Button -muodossa

perfuse cms0057 carinbb parittaa kunkin väitteen 837-tiedostossa sen maksun 835-tiedostossa potilaan tilinumeron mukaan, jonka 835 on velvollinen palauttamaan, ja kirjoittaa FHIR-transaktion kullekin: ExplanationOfBenefit-potilaan, Kattavuuden, Organisaatioiden ja Ammattilaisten kanssa, joita se viittaa.

perfuse cms0057 carinbb -system https://fhir.your-plan.org/identifier -network innetwork \
    claims.837 remittance.835

Profiili seuraa väitettä: ammattiväitteet (837P) muuttuvat C4BB-ExplanationOfBenefit-Professional-NonClinician-muotoon, ja laitoshoidon väitteet (837I) sairaalahoitoon tai päivystyskäyttöön laskutuksen tyypin mukaan. Jokainen merkintä on PUT-pyyntö, jonka tunniste on otettu lähtötunnisteista, joten saman väitteen lataaminen kahdesti päivittää sen sen sijaan, että tekee toisen kopion.

Kolme asiaa eivät ole kummassakaan X12-tiedostossa, ja kullekin niistä on omat käsittelytavat, jotka toteutetaan sanomalla niistä sen sijaan, että arvaillaan:

Diagnoosit kirjoitetaan desimaalipisteen kanssa (J02.9, ei J029), koska se on siten kuin koodijärjestelmä julkaisee ne ja terminologiapalvelin, jolta kysytään toisesta oikeinkirjoitustavasta, sanoo, ettei se ole olemassa. Riippuvaisen jäsenen tunniste on saman kuin tilaajan, ja huomautukset sanovat niin. NPI, jonka tarkistusmerkki on väärä, ilmoitetaan ennen kuin US Core hylkää sen.

16.4 Ennakkovaltuutukset PDex-muodossa

perfuse cms0057 priorauth muuttaa Da Vinci PAS ClaimResponse:n — tai PAS-vastepakettin, joka sisältää yhden — PDex-enimmäkseen etukäteen hyväksytyn ExplanationOfBenefitiksi, jota kaikki kolme data-API:aa palvelevat.

perfuse cms0057 priorauth pas-response.json pas-claim.json

PAS-Claim on valinnainen ja lähes aina tarvitaan. ExplanationOfBenefit on sanottava, kuka kattaa päätöksen, ja vain pyynnössä on se; ilman sitä muunnos pysähtyy ja sanoo sen. Tarkastus-toimenpide — hyväksytty, hylätty, odottaa, sen valtuutusnumero ja syy — siirtyy PAS:n laajennuksesta PDex:iin, ja X12-palvelun tyyppi pitää koodinsa URI:n alla, johon PDex sitoutuu.

16.5 Tarjoajan pääsy- ja vakuutusyhtiöiden välinen API

Käyttäen -fhir-payer-apis FHIR-päätepiste vastaa kolmea lisäoperaatiota:

Viennit soveltavat poissulkuja poistuessa. Väitteet menettävät maksun ja kaikki maksujakosumman ja maksukirjeen määrät, ja säilyttävät palvelut, koodit, päivämäärät ja tarjoajat; CARIN-profiili poistetaan meta.profile-kentästä, koska resurssi ei enää täytä sitä. Payer-to-Payer jättää myös pois hylätyt etukätehyväksynnät. Aktiivisen PDex Provider Access -opt-out-suostumuksen omistavat jäsenet jätetään pois tarjoajan viennistä, ja lokimerkintä tallentaa montako niitä on. patient-parametri voi vain rajoittaa ryhmän jäseniin; kenenkään muun nimeäminen ei ole sallittua.

Ryhmän viennin käyttöoikeus määräytyy päätepisteen todennuksen perusteella. SMART-luvat määrittävät, mitä resursseja tokeni voi lukea, eikä mihin ryhmään, joten kunkin tarjoajan on oltava tokeni, joka voi tavoittaa vain oman attribuutioluettelon. API-tokeneita voidaan rajoittaa ryhmiin, kun ne luodaan — perfuse token create -label riverside-provider-access -fhir-groups riverside-attributed, tai Rajoita FHIR-ryhmiin -kenttä Käyttäjät → Konemääräiset tunnistetiedot — ja FHIR-päätepisteessä niitä voidaan lukea, suorittaa $davinci-data-export tai $export niiden kanssa ja noutaa mitä vienti tuottaa, ja mitään muuta. Toisen tarjoajan ryhmä vastaa ei löydy, eikä tokeni opi, mitä muita attribuutioluetteloita on olemassa; kaikki muut pyynnöt, mukaan lukien jäsenen vastaavuus ja tavallinen haku, evätään. Rajoitus koskee API-tokeneita; SMART-issuerin tokenissa ei ole ryhmärajoitusta. Kun SMART on määritetty, API-tokeneita evätään, ellei Asetukset → FHIR → Hyväksy Perfuse API -tokenit SMART-tokenien lisäksi ole käytössä (ks. Turvallisuus, *Kuka voi soittaa FHIR-päätepistettä*); tarjoajan ryhmärajoitettu token tarvitsee sen.

16.6 Tarjoajahakemisto: Plan-Net

CMS-0057 pyytää myös vakuutusyhtiöiltä tarjoajaluetteloa, ja FHIR-päätepiste palvelee sitä Da Vinci Plan-Net 1.1.0:lle ilman vaihtoehtoa käyttää: lataa tarjoajat, tarjoajan roolit, organisaatiot, organisaatioiden jäsenyydet, sijainnit, terveydenhuollon palvelut, vakuutussuunnitelmat ja päätepisteet, ja jäsenten sovellukset voivat etsiä niitä. Jokainen Plan-Net-hakuparametri on indeksoitu - roolin verkosto ja palvelu, suunnitelman kattavuusalue, jäsenyyden osallistuva organisaatio, organisaation partof - sekä oppaan kyselyiden käyttämät sisällytykset ja käänteiset ketjut (_has), ja CapabilityStatement -luetteloi Plan-Net-profiilit.

Infernon Plan-Net -sarja läpäisee 199 testiä. 10 testiä, joita se epäonnistuu, ovat eteenpäin ketjut, joissa paketti ottaa hakuarvonsa ensimmäisestä organisaatiosta, jonka se on nähnyt, eikä resursseista, joita haetaan; tämä on ilmoitettu paketille (sen ongelma 34), ja palvelin vastaa näihin kyselyihin oikein, kun sille annetaan arvo, jota data sisältää.

16.7 Etukäteen hyväksytyn mittarit

perfuse cms0057 metrics lukee CSV-tiedoston, joka on viety käytöstä poistetusta hyödykkeen hallintajärjestelmästä, ja tuottaa julkaistun sivun, jonka CMS vaatii, sen *Etukäteen hyväksytyn mittausraportoinnin — Yleiskatsaus ja malli* -layoutissa.

perfuse cms0057 metrics -year 2025 -org "Springfield Health Plan" -services services.csv \
    decisions.csv > prior-authorization-metrics-2025.html

Sarakkeet löydetään otsikosta: priority, received, decided ja decision ovat vaadittuja, ja request_id, line_of_business, extended, appealed, appeal_decision, service_code ja service_description luetaan, kun ne ovat läsnä. Pyynnöllä on vuosi, jolloin se päätettiin; yksi, joka on edelleen odottamassa, on lueteltu pois suljetuksi, ei koskaan laskettu. Jokainen rivi, jota ei voida lukea, ilmoitetaan rivinumeronsa kanssa.

Laskenta seuraa mallia: standardi- ja kiireellisten pyyntöjen erikseen, hyväksytyn ja hylätyn osuus, hyväksytty ja hylätty päätösaikataulun mukaan, hyväksytty arvion jälkeen, kun tarkasteluaika oli pidennetty, ja hyväksytty valitusten jälkeen — valituksista, ei pyynnöistä — keskiarvon ja mediaanin mukaan, aika vastaanotosta päätökseen. Mediaani, joka on alle päivän, kirjoitetaan tunteina eikä pyöristetä „0 päivää“, jota malli pyytää nimenomaisesti. Osittain hyväksytyt pyynnöt lasketaan hyväksytyiksi, koska mallissa ei ole luokkaa niille, ja sivu kertoo, kuinka monta niitä oli. Mittaukset ilmoitetaan liiketoimintalinjoittain, joka on CMS:n vaatima taso.

Sivu on itsenäinen — siinä ei ole skriptejä, ulkoisia tyylitaulukoita tai fontteja — koska se on julkaistu julkisella verkkosivustolla, ja mikä tahansa siitä ladattu on erillinen asia, joka voi hajota tai seurata vierailijaa. -format csv ja -format json antavat samat numerot muille käyttökohteille. Ilman -services-valitsinta sivu sisältää ilmoituksen, jonka mukaan luettelo kohteista ja palveluista, jotka edellyttävät ennakkohyväksyntää, puuttuu, koska CMS vaatii sitä samalla sivulla.

16.8 Lääkkeet: lääkevalikoima, reaaliaikainen lääkehyöty ja sähköinen ennakkohyväksyntä

CMS-0062-P (ehdotettu 14. huhtikuuta 2026) tuottaisi lääkkeet etukäteen: vaikuttavat vakuutusyhtiöt tuottaisivat NCPDP SCRIPT -sähköisen etukäteen hyväksynnän, NCPDP Formulary & Benefit -standardin ja NCPDP Real-Time Prescription Benefit -palvelun 1. lokakuuta 2027 alkaen, päättäisivät lääkepyynnöt 24 tunnin (kiireellinen) ja 72 tunnin (vakaa) kuluessa, antaisivat tarkan syyn jokaiselle evästyksestä ja ilmoittaisivat lääkekohtaiset tiedot vuonna 2028. Medicare Part D vaatii jo SCRIPT ePA:ta. Yksi tiedosto, formulari, vastaa kaikkea tähän liittyvää:

perfuse serve -fhir -pas -crd-rules payer-rules.yaml -formulary formulary.yaml

examples/formulary/formulary.yaml on esimerkki, jonka lääkkeet ovat todellisia RxNorm-käsitteitä NDC:iden kanssa RxNorm-listoja varten (tarkistettu RxNavia vasten). Tiedosto nimeää maksajan, sen suunnitelmat (jokainen suunnitelma, jolla on käytössään formulario, ryhmän tunnukset ja kustannusjaot apteekin hyödyksi ja tasolla) ja sen formulariot. Jokainen lääke on RxNorm SCD tai SBD, jolla on RxNorm-ryhmä (SCDG tai SBDG, jonka Drug Formulary API vaatii), NDC:t, taso, ja rajoitukset: prior_authorization, step_therapy, quantity_limit (määrä tietyssä päivien määrässä, ja päivittäinen enimmäismäärä), not_covered, alternatives (RxNorm-koodit, suosituimmasta ensin), notes, ja questionnaire, FHIR Questionnaire -kyselylomakkeen kanoninen URL, jota priorisointi pyytää. cost_30_day on suunnitelman kustannus 30 päivän tarpeesta, josta vakuutusmaksu on prosenttiosuus; ilman sitä vakuutusmaksu ilmoitetaan prosentteina, ei keksittyynä summaksi. Koko tiedosto tarkistetaan, kun se ladataan, ja kaikki ongelmat luetellaan kerran. Jäsen löytyy tiedoston members-listasta, ryhmittäin tai FHIR-kaupasta: Coverage, jonka subscriberId on jäsenen tunnus ja jonka class-tyyppi on plan on suunnitelman tunnus. Maksajat › Lääkkeet näyttää formularion, hinnoittelee lääkkeen ja suorittaa priorisoinnin loppuun asti.

16.8.1 Da Vinci US Drug Formulary API

Julkaistu /formulary/fhir -osoitteessa Da Vinci US Drug Formulary 2.1.0: kunkin suunnitelman PayerInsurancePlan, kunkin formularion Formulary (molemmat InsurancePlan), kunkin lääkkeen FormularyDrug (MedicationKnowledge) ja kunkin kohteen FormularyItem (Basic). Oppaan haut ovat käytettävissä (Basic?code=formulary-item&formulary=...&drug-tier=...&pharmacy-benefit-type=...&period=..., subject:MedicationKnowledge.code, InsurancePlan?formulary-coverage=..., coverage-type, MedicationKnowledge?code=...&doseform=...) _include=Basic:subject, Basic:formulary ja InsurancePlan:formulary-coverage kanssa. Se on julkinen, ilman tunnistetietoja, kuten CMS vaatii vakuutusyhtiön formulariolta: se palvelee erillisestä, muistissa olevasta kaupasta, joka sisältää vain formularion, joten sen avaaminen ei voi päästä potilaan tietoihin. Se on vain luettavissa. Poistettu lääke ei julkaista, koska API luettelee, mitä formulario kattaa; RTPB ja ePA vastaavat sille, että se ei ole kattavuudessa.

16.8.2 Reaaliaikainen lääkehyöty

POST /ncpdp/rtpb ottaa RTPBRequest-pyynnön (NCPDP RTPB v13) operaattorin roolin API-tunnisteella ja vastaa RTPBResponse-viestillä formulariosta: kattavuustila, formulariotila, jäsenen arvioitu osuus ja suunnitelman osuus sekä kattavuusrajoitukset, joissa on jopa viisi kohdetta, jotka on hinnoiteltu samalla tavalla. Rajoituskoodit ja kunkin tilaan liittyvä tila noudattavat NCPDP:n julkisia RTPB-toteutussuositukset: 75 edellyttää etukäteen hyväksyttyä, 608 askelhoidon, 76 suunnitelman rajoitukset ylitetty, 7X päivien tarjoamisen ylittäminen suunnitelman rajoituksista (esim. lääke, jota ei voi toimittaa postitse), 70 ei kuulu kattavuuteen, kaikki *kattavuudella varustetut* (CR) paitsi 70 (NC). Jäsen, jolla on hyväksytty etukäteen hyväksytty, saa CC- ja AB8-vastauksen, kuten Surescripts-opas pyytää, jotta määrääjä ei joutuisi pyytämään uudelleen. Pyynnön, jota ei voida hinnoitella, vastaus on NotProcessed NCPDP:n hylkäyskoodilla: 52 jäsenen tuntemattomuuden vuoksi, E7 ja 19 puuttuvan määrän tai päivien tarjoamisen vuoksi. Apteekeille myönnettävä etu luetaan pyynnöstä: täyttö yli 34 päivää on kolmen kuukauden tarjoaminen, ja apteekin tyyppi M on postimyynti.

16.8.3 Sähköinen ennakkohyväksyntä (NCPDP SCRIPT)

POST /ncpdp/script ottaa PAInitiationRequest-, PARequest-, PAAppealRequest- ja PACancelRequest-pyynnöt operaattorin roolin API-tunnisteella ja vastaa kullekin pyynnölle vastaavalla vastauksella:

PyynnöVastaus
PAInitiationRequestClosed, kun sitä ei tarvita: CC ei vaadi ennakkohyväksyntää, FN määrän rajoituksen sisällä, FM ei ole kattavissa tai ei ole lääkevalikoimassa, FQ hyväksyntä on tiedostossa, CD ei ole jäsentä, CG yksi on jo prosessissa. Muutoin Open, tapaus-ID:llä ja kysymysryhmällä.
PARequestPäätetään PAS-pyynnöksi: Approved hyväksymisnumeron ja ajankohdan kanssa, Denied syyn kanssa tai Open arvioitavana.
PAAppealRequestHylätty tapaus päätetään uudelleen PANote-syyllä (valitus ilman sitä pyytää sitä).
PACancelRequestApproved kun tapaus on avoinna tai arvioitavana, ja PAS-pyynnössä peruutetaan; Denied kun se on jo päätetty.

Kysymysryhmä on lääkkeen FHIR-kysymyslista FHIR-kaupasta, sama kuin DTR täyttää: totuusarvo muuttuu kyllä/ei-valinnaksi, valinta valinnaksi, numero numeeriseksi, päivämäärä päivämääräksi ja muu vapaa teksti; ryhmät laajennetaan järjestyksessä ja enableWhen-ominaisuutta ei siirretä, koska SCRIPT jakautuu valinnan mukaan eikä ehdolla. Lääke, jolla ei ole kysymyslistaa, kysytään kolmea vapaa-tekstikysymystä: diagnosi, mitä on kokeiltu ja miksi tämä lääke. PARequest muuttuu Da Vinci PAS-pyynnöksi: Claim-pyyntö lääkkeestä (RxNorm ja NDC), MedicationRequest-pyyntö, jota se pyytää, potilas, määrääjä, maksaja ja kattavuus sekä vastaukset QuestionnaireResponse-muodossa, ja liitteet DocumentReference-muodossa. Sitten päätetään kuten kaikki etukäteen hyväksytyt tässä palvelimessa: sääntötiedosto, päätöspalvelu (-pas-decider-url), tai arvioijan jono, jossa se on merkitty Lääke ja pidetään lääkeajan rajoituksissa. Päätöspalvelu näkee lääkepyynnön täsmälleen samalla tavalla kuin se näkee sen EHR:n PAS-asiakkaalta. Suosittelemme Vagliota, BioDreamin avoimen lähdekoodin (PolyForm Shield) päätösmootoria, jossa on lääkepolitiikat askelhoidolla; maksajan oma moottori liittyy samaan -pas-decider-url-osoitteeseen, eikä mitään moottoria tarvita sääntötiedostolle ja arvioijille päätöksen tekemiseen.

Päätös, joka tehdään pyynnön jälkeen (arvioijan tai valittajan), lähetetään määrääjälle pyynnöttömänä PAResponse- tai PAAppealResponse-viestinä, joka reititetään kanavaan, jonka nimi on -epa-reply-channel, joka toimittaa sen verkkoon. Ilman kanavaa tai kun toimitus epäonnistuu, tapaus kertoo, ettei määrääjää ole ilmoitettu, ja näyttö lähettää sen uudelleen.

Maksajat › Lääkkeet › Etukäteen hyväksytyt lähettää viestit, jotka määrääjän järjestelmä lähettäisi tälle palvelimelle (aloitus, vastaus kysymyksiin, nähdään päätös), luetellaan jokainen tapaus, mitä määrääjälle on kerrottu, ja näytetään lääketilastot, jotka CMS-0062-P ehdottaa: pyynnöt hyväksytty, hylätty ja odottava, valitukset ja hyväksytty tai hylätty valituksessa, keskiarvo ja mediaani tuntia pyynnöstä päätökseen, ja kuinka monta niistä päätettiin myöhässä. Lääkkeet, jotka on pyydetty lääkärin etuuden kautta (HCPCS J-koodi MedicationRequest-pyynnöllä tai RxNorm- tai NDC-koodilla), lasketaan lääkkeiksi myös PAS-luvuissa.

Mikä tämä perustuu, selkeästi sanottuna. NCPDP:n schemat ja toteutusoppaat ovat lisensoituja. Elementtien nimet ja järjestys seuraavat julkisia Surescripts ePA- ja RTPB-oppaita ja niiden esimerkkejä, sekä NCPDP:n julkisia RTPB-suositukset. Kaksi elementtiä, joita julkiset materiaalit eivät näytä, on kirjoitettu SCRIPT-malliin, jota käytetään muualla, ja ne tulisi tarkistaa lisensoituun kopioon ennen sertifiointia: Closed/ReasonCode ja Denied/DenialReason. Yhtään viestiä ei ole tarkistettu NCPDP:n XSD:ää tai verkon sertifioinnin vastaisuutta. NCPDP Formulary & Benefit -tiedostoa ei tuoteta: sen täydellinen rakenne on NCPDP:n lisensoitussa oppaassa, ja osittainen tiedosto hylätään verkkoon, joka lataa sen.

16.9 Mitä tarkistettiin ja mihin

CARIN- ja PDex-tulosteet on validoituna virallisella HL7 FHIR-validoimisohjelmalla, joka on ladattu julkaisemalla paketteja (hl7.fhir.us.carin-bb#2.2.0, hl7.fhir.us.davinci-pdex#2.2.0): ammattimaiset, sairaalahoito- ja ulkosairaalahoitopyynnöt ja kaksi PAS-päätöstä, ilman virheitä. PDex-syötteet olivat PAS-oppaan omat esimerkit eikä tässä kirjoitettuja muotoja, jotka ovat yhtensopivia muuntimien kanssa. Validoija löysi viisi virhettä ensimmäisellä suorituksella — muun muassa, että CARIN vaatii profiilin version meta.profile- ja vaatii korvauslajikoodin version laitosten korvauspyynnöissä — ja jokainen on korjattu ja testattu.

Tämän rakentaminen paljasti vanhemman virheen: FHIR-kauppa pudotti jokaisen elementin, jota sen sisäinen malli ei ollut määritellyt, joten ExplanationOfBenefit menetti kohteensa, diagnosoinnit, sovittelun ja maksun sisääntullessa. Kauppa säilyttää nyt mitä tahansa resurssi kuljettaa, ja testi lataa CARIN-korvauspyynnön palvelimen kautta ja lukee sen takaisin kokonaisena.

CRD:n tuloste - päivitetty tilaus ja CDS Hooks -vastaus CRD:n omassa loogisessa mallissa - ja DTR:n pakkaustuloste validoidaan virallisessa HL7-validoimisohjelmassa CRD 2.2.1:een ja DTR 2.2.0:aan ilman virheitä.

DTR tässä on maksajan puoli 2.2.0:sta. $questionnaire-package ottaa kysymyslistat, jotka on nimetty, CRD:n nimettyjä tilauksia tai CRD:n palauttamaa kattavuusväittämän tunniste (context, kun sama prosessi palvelee CRD:ä), ja palauttaa kunkin niistä pakkauspinona, jossa on QuestionnaireResponse, jota täytetään, ja kirjastot, joita sen CQL tarvitsee ja niiden riippuvuudet. Arvojoukon arvot, joita vastaukset käyttävät, matkustavat pakkauksessa, kun ne ladataan (PUT /fhir/ValueSet/{id}), ja $expand listaa niiden koodit. $log-questionnaire-errors kirjoittaa, mitä DTR-sovellus raportoi palvelimen lokitiedostoon.

Soveltuvat kysymyslistat: kirjoita koko kysymyslista kerran SDC:n questionnaireAdaptive-laajennuksella ja enableWhen-ominaisuudella kysymyksillä, jotka koskevat vain joskus. Pakkaus antaa sovellukselle tyhjän kuoren, ja kunkin $next-question-kutsun kutsuu seuraavan kysymyksen, joka koskee vastauksia tähän asti, kunnes ei ole enää mitään kysyttävää ja vastaus on merkitty valmiiksi. Järjestys ja haarautuminen ovat maksajan omat säännöt; kysymyksiä, jotka eivät koske, ei näytetä koskaan.

Kirjautuminen asiakkaana: DTR- ja PAS-asiakkaat tavoittavat maksajan SMART Backend Services -palvelun kautta, jossa allekirjoitettu JWT vaihdetaan tokeniin maksajan valtuutuspalvelimella. Osoita Perfuse tähän palvelimeen -smart-issuer-valinnalla (ja -smart-jwks-valinnalla, jos osoite ei voi selvittää Perfusen kautta), ja anna -smart-backend-services-valinta, jotta löytödokumentti ilmoittaa tämän. Inferno DTR -paketti käy tämän kautta Keycloak-valtuutuspalvelimen kanssa.

Perfuse voi toimia itse valtuutuspalvelimena: serve -fhir -smart-clients clients.yaml antaa Backend Services -tokenit osoitteessa /auth/token luetteloiduille asiakkaille, joilla on julkiset avaimet, joilla ne allekirjoittavat väitteensä, ja järjestelmän laajuudet, joita niille voidaan myöntää, ja FHIR-päätepiste hyväksyy ne. Erillistä tunnistuspalvelinta ei tarvita maksajan koneiden väliseen viestintään.

With -smart-users users.yaml as well, members and clinicians sign in there to authorize apps, which the Patient Access API needs: the app sends the person to /auth/authorize, they sign in, a clinician chooses the patient, and both see what the app asks for and can untick any of it. A member is only ever given their own record, whatever the app asks for. Each person in the file names the FHIR resource they are, Patient/… or Practitioner/…, and a password hash from perfuse smart hash; the password itself is never written down.

Ihmiset voivat kirjautua sisään myös organisaation oman tunnistuspalvelimen kautta: -smart-oidc oidc.yaml nimeää sen (julkaisija, asiakas-tunnus ja salaisuuden sijainti), ja kirjautumissivu tarjoaa "Kirjaudu sisään"-vaihtoehdon sen rinnalla. Jokainen henkilö on linkitetty palveluntarjoajan aiheen mukaan, oidc_subject käyttäjätiedostossa, joten tiedosto päättää edelleen, kuka voi valtuuttaa sovelluksia ja minkä FHIR-resurssin he ovat; tili, joka ei ole linkitetty kenenkään kanssa, evätään. Koodit, päivitämistunnukset ja peruutukset tallennetaan tietokantaan, joten uudelleenkäynnistys ei kirjaa ketään ulos.

Käyttäjät → SMART-sovellukset-konsolissa luetteloidaan rekisteröidyt sovellukset ja henkilöt, ja niitä voidaan lisätä, muokata ja poistaa. Jokainen tallennus tarkistetaan kuten tiedostot käynnistyksen yhteydessä, kirjoitetaan niihin ja käytetään heti. Salainen sovellus, joka tallennetaan ilman salaisuutta, saa yhden, joka näytetään kerran; salasana asetetaan siellä ja sitä ei koskaan näytetä uudelleen. Sovelluksen tai henkilön poistaminen lopettaa välittömästi jo myönnettyjen pääsytokenien ja heidän myöntämiensä pääsytokenien käytön, eikä odota niiden vanhenemista, ja niiden päivitämistunnukset niiden kanssa.

Laajuudet voivat olla hienorakeisia, kuten SMART App Launch 2 ja US Core määrittelevät ne: patient/Observation.rs?category=laboratory lukee vain havainnot, jotka hakukysely löytää. Sallinta, joka on suodatettu tietyn tyyppisille, soveltaa suodatinta kaikkiin kyseisen tyyppisten hakuihin ja lukuihin; suodattamaton sallinta kyseiselle tyypille tai * poistaa sen. Suodatin, jota ei voida lukea, ei myönnä mitään sen sijaan, että se myöntäisi kaiken.

16.10 Päättäminen ennakkovaltuutuspyynnöistä: PAS

serve -fhir -pas -crd-rules rules.yaml vastaa Da Vinci PAS 2.2.1:ia osoitteissa POST /fhir/Claim/$submit ja POST /fhir/Claim/$inquire. Päätökset perustuvat samaan sääntöihin kuin CRD:n vastaukset, joten clinician käyttöön tarvittava hyväksyntä määräytyy säännön mukaan, joka niin päätti:

  - description: Physical therapy
    codes: ["PT"]                       # matched on the item's productOrService, then the code of the order it requests
    system: https://codesystem.x12.org/005010/1365
    covered: covered
    pa: auth-needed
    pa_decision: approve                # approve, deny or pend; empty: not-covered is denied, no-auth approved, the rest pended
    details:
      - {code: allowed-quantity, value: "6"}   # asked for more, it is certified for six (A6, with the authorised detail)
  - description: MRI
    codes: ["62"]
    pa_decision: approve
    pa_alternative: {system: "https://codesystem.x12.org/005010/1365", code: "4"}  # approved as an X-ray instead (an added item)
  - description: Surgery
    codes: ["2"]
    pa: auth-needed                     # pended for a reviewer, asking for:
    questionnaire: https://payer.example.org/Questionnaire/surgery   # a DTR questionnaire
    pa_attachments: ["18776-5"]         # and documents, by LOINC attachment code

Jokaiselle kohteelle annetaan X12-arviointitoimi: A1 sertifioitu, A3 ei sertifioitu, A4 odottaa, A6 muutettu, C peruutettu (sertifiointityyppi 3). Rivi, joka ei mainitse palvelua, ei ole päätetty, mutta se vastaa virheellä (X12 901 AG, oikein ja lähetä uudelleen). Vastaus toistaa sen, mitä 278-vastaus toistaa — kohdekoodit, pyydetyt palvelupäivämäärät, kohtaamisen päivämäärät, siirtotunnisteet lähettäjän ja vastaanottajan kanssa vaihdettuna — ja antaa kullekin riville maksajan oman hallinnollisen viitenumeron. Palvelu, jota ei mainita, odottaa aina, eikä sitä hyväksytä: päätös, jota kukaan ei ole kirjoittanut, on päätös, joka vaatii ihmisen toimintaa.

Odottavat pyynnöt odottavat arvioijaa, joka vastaa POST /fhir/Claim/$decide :lla:

{"resourceType": "Parameters", "parameter": [
  {"name": "claimResponse", "valueString": "<the ClaimResponse id>"},
  {"name": "decision", "valueCode": "approve"},
  {"name": "reason", "valueString": "Reviewed with the plan of care."},
  {"name": "reviewer", "valueString": "<the reviewer's NPI>"}]}

decision voi myös olla modify: sertifioitu, mutta ei pyydetyssä muodossa, quantity (valueDecimal, sertifioitu arvo) ja/tai alternative (valueCoding, hyväksytty palvelu) kanssa. Vastaus kertoo sitten A6 Modified, sertifioitu yksityiskohta tai vaihtoehto lisätynä kohtana ja autorisaatiotunniste. item (valueInteger, toistuva) rajoittaa päätöksen tiettyihin kohtiin. Päätös muodostaa uuden version vastauksesta, joka on merkitty tarkistetuksi henkilön toimesta, ja se toimitetaan -fhir-subscriptions avainsanalla PAS-aiheeseen (PASSubscriptionTopic, suodatettu org-identifier avainsanalla, pyytäjäorganisaation tunniste) kokonaisena PAS-vastausryppäänä, samassa transaktiossa, jossa se tallennetaan. $inquire palauttaa nykyisen vastauksen jokaiselle pyynnölle, jonka tarjoaja on tehnyt kyseisestä jäsenestä; toisen tarjoajan kysely ei löydä mitään. $decide vaatii kirjoitusoikeuden; $inquire on lukuoikeus.

Pyynnöt ja niiden vastausten kaikki versiot säilytetään pas_requests- ja pas_responses-tietokannoissa palvelimen tietokannassa.

16.10.1 Arvioijan jono

Verkkokonsolissa Payers → CMS-0057 → Reviewer queue luetellaan odottavat pyynnöt niiden määräaikojen mukaan: kiireinen pyyntö (Claim.priority stat) on määräaikainen 72 tuntia sen saapumisesta, standardipyynnölle 7 päivää. Valitsemalla yhden näytetään jäsen, tarjoaja, jokainen palvelu pyydetyillä yksiköillä ja sen tila, mitä vastaus pyysi, ja jokainen asiakirja, joka on vastaanotettu siitä, ja jokainen asiakirja näytetään selkeästi. Muokkain tallentaa päätöksen siellä: hyväksy, hylkää tai muuta (sertifioitu arvo tai toinen hyväksytty palvelu), syyn ja arvostelijan NPI:n kanssa. Muutos on oltava vähemmän yksiköitä kuin mitä pyydettiin; yhtä monta tai enemmän on hyväksyntä, ja se hylätään muutoksena. Hyväksytty palvelu alkaa pyydetyssä koodijärjestelmässä. Se on sama päätös, jonka $decide tekee, joten tarjoajan tilaus toimittaa sen. Pyyntöjen lukeminen ja päätöksen tekeminen ovat molemmat kirjoitettu lokitietoihin.

Monitor → Tiimikohtaiset työpöydät → Ennakkohyväksyntä näyttää viimeisten 30 päivän aikana, kuinka monta standardia ja kiireellistä pyyntöä päätettiin CMS-0057:n aikatauluissa, myöhässä, odottaa vielä aikataulun puitteissa ja on myöhässä, sekä median päätösaika ja miten pyydetyt palvelut käsiteltiin: hyväksytty, muutettu, hylätty tai edelleen odottaa. Nämä kaksi tiiltä luetaan pyynnöistä itsestään, joten ne eivät ole työpöydän Grafana-vienti, joka mainitaan kuvauskohtaisesti.

16.10.2 Vastaanottaminen asiakirjoja, joita kesken oleva pyyntö pyytää

A pended response asks for documents with a Task and one CommunicationRequest per document. A questionnaire is asked for as PAS describes it: a CommunicationRequest with the single LOINC code 102089-0, under the trace number of the line it is for (itemTraceNumber, which the ClaimResponse echoes; a line sent without one is given one). That trace number is the DTR context: $questionnaire-package with only context set to it returns the questionnaire. The provider sends what was asked for with Da Vinci CDex $submit-attachment (POST /fhir/$submit-attachment): the TrackingId is the request's own trace number (the ClaimResponse's first identifier, which is also the Task's), or a CommunicationRequest's identifier, AttachTo is preauthorization, and MemberId must be the request's member. Each attachment's DocumentReference or QuestionnaireResponse is kept with the request and shown to its reviewer; a document arriving decides nothing.

16.10.3 Päätöksenteko X12-käytön hyödyntämisessä

Useimmat maksajat päättävät etukäteen valtuutukset UM-järjestelmässä, joka käyttää X12 278:aa. -pas-278-url:n avulla Perfuse toimii FHIR-etuena tämän järjestelmän kanssa: jokainen $submit lähetetään yhtenä 278-pyynnönä (005010X217), ja jokainen kohteena oleva potilastapahtuma. Jokainen pyyntö sisältää PAS:n antamat tiedot: tarkastelutyyppi (extension-serviceItemRequestType, UM01: terveydenhuollon palvelut, sairaalahoito tai erikoistuva hoito), sertifioinnin tyyppi (extension-certificationType, UM02), palvelun tyyppi, palvelun sijainti (UM04), palvelun taso (extension-levelOfServiceCode, UM06: valinnainen, kiireellinen tai hätätilanne; stat-prioriteetti korvaa kiireellisen), päivämäärä, sairaalahoitotarkastuksen sairaalaan ottamisen ja lähtemisen päivämäärät, diagnoosit, hoitotiimin tarjoaja, joka suorittaa palvelun, ja menettely ja määrä, ammattimaisena (SV1) tai sairaalavaatimuksena (SV2) palvelulinjana. 278-vastauksen toimintakoodi ja valtuutusnumero muuttuvat kohteen tarkastustoiminnoksi: vahvistettu, osittain vahvistettu, muutettu, hylätty, keskeytetty tai ei käsitelty (keskeytetty arvioijalle, hylkäysyllä perusteilla). Paikalliset säännöt eivät ole otettu huomioon.

perfuse serve -fhir -pas -pas-278-url https://um.example/x12/278 -pas-278-receiver ACMEUM \
  -pas-278-token-env UM_TOKEN

UM-järjestelmä, joka odottaa ensin ja päättää myöhemmin, lähettää myöhemmän 278-vastauksensa POST /fhir/Claim/$decide-278:een; jokainen tapahtuma vastaa pyyntöä Perfusen lähettämän jäljitysnumeron perusteella, ja se päätetään kuten $decide päättäisi sen. Jos UM-järjestelmää ei voida tavoittaa tai se vastaa jollakin, joka ei ole 278-vastaus, jokainen kohta odottaa katselijaa ja tarjoajalle ilmoitetaan vain siitä; syy on palvelimen lokissa.

Kyselyt, joita UM-järjestelmä vastaa

Tarjoajan $inquire-pyynnön on löydettävä valtuutus, riippumatta siitä, miten se pyydettiin: faksilla, maksajaportaalissa, puhelimitse tai 278-lomakkeella, jonka toinen lähettäjä on lähettänyt. Perfuse tallentaa vain pyynnöt, jotka tulivat sen kautta; UM-järjestelmä tallentaa ne kaikki. Joten UM-järjestelmällä, joka vastaa reaaliajassa (jokainen kuljetus sftp:n lisäksi), jokainen $inquire lähetetään sinne myös 278-kyselynä (005010X215: BHT02 28, jäsen, tarjoaja, valtuutusnumero Claimin insurance.preAuthRef:stä, kun sellainen on, ja tapahtumapäivämäärät billablePeriod:sta tai palvelupäivämäärät, muutoin vuosi ennen tai jälkeen tätä). Jokainen valtuutus, jota vastaus sisältää ja Perfuse ei (yhdistetty lähettämistään jäljitysnumeroista ja antamistaan valtuutusnumeroista), tulee takaisin yhtenä Claim Inquiry Response Bundle: UM-järjestelmän päätös kullekin palveluriville, valtuutusnumero ja -jakso, sekä huomautus, jossa kerrotaan, missä se löytyi. Mitään Claimia ei luoda valtuutukselle, jota kukaan ei ole lähettänyt FHIR:issä: sen ClaimResponse.request sisältää data-absent-reason, kuten PAS-profiili sallii. Kysely lukee vain; mitään Perfusen omia tietoja ei muuteta. Jos UM-järjestelmä on alhaalla tai vastaa TA1:llä tai 999:llä, tarjoaja saa sen, mitä Perfuse sisältää, ja linkin tila kertoo, miksi.

Miten 278:t saapuvat UM-järjestelmään

UM-järjestelmän yhteysopas kertoo, miten se ottaa 278:t vastaan, ja -pas-278-transport (Asetukset, Vakuuttajat, Käytön hallinta -linkki) seuraa sitä:

KuljetusMitä lähetetäänVarmennus
x12 (oletus)278 lähetetään application/edi-x12:na; vastaus on vastausruumiKantaväittö, OAuth, HTTP Basic, asiakasvarmenne
core-soapCAQH CORE reaaliaikainen SOAP 1.2 -kuori (COREEnvelopeRealTimeRequest, payload-tyyppi X12_278_Request_005010X217E1_2 tai X12_278_Request_005010X215 kyselyyn): Yhteyden sääntö vC2.2.0 payloadilla kuoreen, jota useimmat maksajat ja CMS esMD suorittavat, tai -pas-278-core-version C4.0.0 payloadina MTOM-liitteenävC2.2.0: käyttäjänimi ja salasana (WS-Security UsernameToken) tai asiakasvarmenne. vC4.0.0: asiakasvarmenne ja OAuth-merkki
core-mimeCAQH CORE vC2.2.0 HTTP MIME moniosainen kuori, payload tiedostonaKuoren UserName ja Password tai asiakasvarmenne
sftpJokainen 278 asetetaan UM-järjestelmän SFTP-palvelimen kansioon (-pas-278-sftp, -pas-278-sftp-outbound); vastaukset kerätään toisesta (-pas-278-sftp-inbound, jokainen -pas-278-sftp-every)SSH-avain tai salasana; palvelimen avain on oltava -pas-278-sftp-known-hosts:ssa

Asiakasvarmenne on -pas-278-cert ja -pas-278-key; -pas-278-ca luottaa maksajan omalle varmenneviranomaiselle. OAuth on -pas-278-oauth-token-url, -pas-278-oauth-client-id ja salaisuus, joka haetaan asiakasvirran myöntämisen kautta ja säilytetään yksi minuutti ennen vanhenemista. Salasanat, tokenit ja salaisuudet eivät koskaan ole liput: kunkin nimi on ympäristömuuttuja (-pas-278-password-env, -pas-278-token-env, -pas-278-oauth-secret-env, -pas-278-sftp-password-env), tai kirjoitetaan asetussivulle, missä se säilytetään asetustiedostossa (vain palvelimen tilillä luettavissa) ja ei koskaan näytetä uudelleen.

UM_PASSWORD=... perfuse serve -fhir -pas -pas-278-transport core-soap \
  -pas-278-url https://um.example/CORE/RealTime -pas-278-receiver ACMEUM \
  -pas-278-user perfuse -pas-278-password-env UM_PASSWORD

SFTP:n yli jokainen pyyntö pidetään odottamassa, kunnes vastaus saapuu: 278-vastaus päättää kohteet, ja Perfuse laittaa 999 hyväksymisen lähetettäväksi ulosmenokansioon. Tiedosto, jota ei voida lukea, pysyy saapumiskansiossa henkilölle, ja se tarjotaan uudelleen seuraavalla lukukerralla.

Kun UM-järjestelmä ei voi lukea pyyntöä

UM-järjestelmä, joka ei voi lukea 278:aa, vastaa TA1:llä (kuorella) tai 999:llä (transaktiolla) päätöksen sijaan. Perfuse tutkii, mikä ja mitä se sanoo, pidättelee jokaisen kohteen ("käyttöjohtamista ei voitu lukea pyyntöä"), ja merkitsee sen. Payer, CMS-0057, Reviewer-jono näyttää linkin: mitä viimeisen viikon aikana lähetettiin, kunkin vaihdon mukaan sen ohjausnumeron, ja mitä siitä tuli (vastattu; tunnustettu, vastaus tulee; hylätty, 999:n segmentin, elementin ja koodin mukaan; ei tavoitettu). Kunkin vaihdon oma ohjausnumero on yksi enemmän kuin edellinen, joka on se, mitä TA1 tai 999 nimeää vastauksena.

16.10.4 Päätöksenteko kliinisen näytön perusteella päätöspalvelun avulla

Sääntötiedosto päättää palvelukoodin perusteella: koodi ei tarvitse hyväksyntää, ei kuulu korvauksiin tai menee katselijalle. Onko tämä potilas kelpoinen sille, on eri kysymys, joka vastataan ehdosta, kyselyvastauksista ja asiakirjoista, jotka tarjoaja lähetti pyynnön kanssa. -pas-decider-url-valinnan kanssa jokainen kohta, jonka säännöt jättävät katselijalle, lähetetään ensin päätöspalveluun, kuten Vaglioon, joka lukee saman PAS-pyynnön paketin Perfusen julkaiseman pas-paketin kautta. Julkinen Vaglio, joka toimii keksittyjen pyyntöjen kanssa, toimii Perfusen testitilanteen rinnalla osoitteessa https://vaglio.perfuse.health:8443 (kirjaudu sisään demo-tunnuksella, salasana try-vaglio-demo; se voi tarkastella kaikkea ja muuttaa mitään): jokainen päätös siellä on perusteltu, selkeäkielinen kirje ja kuitti, jonka kuka tahansa voi tarkastaa.

perfuse serve -fhir -pas -crd-rules payer-rules.yaml -pas-decider-url https://vaglio.example/api/pas/decide \
  -pas-decider-token-env VAGLIO_TOKEN

URL on oltava https, tai pelkästään http tähän laitteeseen (localhost, 127.0.0.1), koska se sisältää potilaan tiedot ja tokenin. Vaglio itse vastaa vain https:lla; kun se käyttää omasta viranomaisestaan peräisin olevaa varmenne, anna se -pas-decider-ca DATA/tls/ca.crt (tai mikä tahansa maksajan sisäinen viranomainen, jonka palvelun varmenne on peräisin). Palvelu saa pyynnön paketin sellaisena, kuin tarjoaja lähetti sen, POST <url>?item=<sequence> (application/fhir+json), ja vastaa {"decision": "approve" | "deny" | "pend", "why": "...", "requested": ["..."]}, tai 404, kun se ei päättä mitään kyseiselle kohteelle, jolloin sääntöjen vastaus pysyy voimassa. why on vastauksen prosessimuistiinpano ja vaaditaan hylkäykselle, joka muuten odottaa; requested ilmoitetaan tarjoajalle odottavan pyynnön tarvitseman tiedon. Odottaminen voi myös sisältää "questionnaire": "<canonical>" ja "attachments": ["<LOINC>", ...], jotka pyydetään vastauksen CDex-tehtävässä ja viestintäpyynnöissä DTR-kyselylomakkeen ja liitetiedostojen lisäksi (säännön kyselylomake voittaa, koska tehtävä pyytää yhtä; koodi, joka ei ole LOINC:n muotoa, hylätään ja kirjataan lokitietoihin). Sääntö, joka hyväksyy tai hylkää, on maksajan korvauspolitiikka eikä lähetetä palveluun. Virhe, aikakatkaisu tai vastaus, joka ei ole yksi kolmesta päätöksestä, odottaa kohdetta katselijalle, ja syy on palvelimen lokissa: mitään tässä ei muuteta hyväksynnäksi. Tätä ei voida yhdistää -pas-278-url:iin, jossa UM-järjestelmä vastaa jokaiselle kohteelle.

Neuvonta ennen lähettämistä. -crd-advisor-url-valinnan kanssa -crd-rules-valinnan rinnalla CRD pyytää myös päätöspalvelulta, mitä ennakkohyväksyntäpyyntö kullekin tarvitsisi, ja näyttää vastauksen yhtenä lisäkorttina: "Ennen kuin lähetät: pyyntö tähän vaatisi: ...", tai "hyväksytään", ja mitä se edellyttää, kyselylomake, joka pyytää sitä, ja mitä se hyväksyisi. Vaglio vastaa /api/pas/advise-osoitteessa, samalla tokenilla ja viranomaisella kuin edellä:

perfuse serve -fhir -pas -crd-rules payer-rules.yaml \
  -crd-advisor-url https://vaglio.example/api/pas/advise -crd-advisor-token-env VAGLIO_TOKEN

CRD lähettää POST <url>:n {"service": {"system": "...", "code": "..."}, "resources": [ ... ]}, resursseina haun etukäteisnoudon (potilas ensin, kattavuus jätettiin pois), ja lukee {"decides": true, "answer": "approve" | "pend" | "deny", "summary": "...", "missing": [...], "questionnaire": "...", "toApprove": [[...]], "policyTitle": "..."}. Se on neuvo, eikä se muuta mitään: katteentiedot, muut kortit ja PAS-päätös ovat sääntöjen mukaan. Se odottaa enintään kolme sekuntia, ja vastaamattomuus, epäonnistuminen tai "decides": false jättää vastauksen sellaisenaan ilman sitä. Perfuse ei koskaan tarvitse päätöspalvelua.

Pyyntö sisältää X-PAS-Request-Id-tunniste, jolla vastaus tunnetaan. Palvelu, jolla on omat katselijansa, joka odottaa kohdetta, voi lähettää heidän päätöksensä myöhemmin kuten katselijan: Claim/$decide-pyyntö, jossa on se id claimResponse-kohtana, kohdekohtainen järjestys ja päätös ja syy. Tarjoajan tilaus toimittaa sen kuten yhden, jonka on tehty katselijan jonossa.

Tilaus, jossa on id-only -sisältö, kertoo tarjoajalle, kumpi vastaus on muuttunut, ilman kertomista, mitä se on: ilmoituksen keskipiste on Bundle/<id>. GET /fhir/Bundle/<id> palauttaa viimeisimmän PAS-vastausryhmän, GET /fhir/Bundle/<id>/_history/<n> version, jonka ilmoitus lähetti, ja GET /fhir/ClaimResponse/<id> ClaimResponse-vastauksen yksin. Tokeni, joka on sitoutunut yhteen potilaaseen, kerrotaan, ettei heitä ole olemassa, kuten minkä tahansa ulkopuolisen potilaan tapauksessa.

Varmistettu virallisella Inferno PAS Server v2.2.1 -sarjalla (ks. varmistus). Ei lähetetty, vaikka PAS merkitsee niitä tukevia: ClaimResponse.adjudication tarkastus-toiminnolla, ClaimResponse.extension:authorizedProvider ja ClaimResponse.item.extension:communicatedDiagnosis, koska laajennukset, joita ne tarvitsevat, eivät ole sallittuja siellä omassa kontekstissaan PAS 2.2.1:ssä ja validatori hylkää vastauksen, joka sisältää ne; ja request.extension:DataAbsentReason, koska Perfuse aina tietää pyynnön. 278:t, jotka lähetetään käyttöjohtamisjärjestelmään (yllä), tarkistetaan PAS 2.2.1:n omien pyyntöesimerkkien, CMS:n julkaisemien esMD 278 -näytteiden ja 278-tarkistimen kautta, joka on kirjoitettu julkisista käsikirjoista, ja jokainen siirtotapa on tarkistettu CAQH:n yhteyden muodostamissääntöjen mukaisella UM-järjestelmällä (ks. varmistus); ei vielä oikeaa UM-järjestelmää tai välittäjää vastaan, eikä CORE-sertifioitu. Ei toteutettu: liitteet, jotka palautetaan CDex:llä.

Sääntötiedosto tarkistetaan CRD: n omia invariantteja vastaan, kun se ladataan: kyselylomake tarvitsee dokumentaation, palvelu, jota ei ole katettu, ei voi vaatia valtuutusta, satisfied kuuluu yhteen tapaukseen eikä sääntöön, ja kaikki ehdolliset asiat on annettava syy.

Ei varmistettu: vienti ja jäsenen vastaavuus toisen maksajan toteutukseen, mittarit maksajan julkaisemiin lukuihin ja CRD todellisen EHR: n CDS Hooks -asiakkaaseen.

16.11 Lähettää ennakkohyväksyntäpyynnöt maksajalle (palveluntarjoajille)

Kaikki edellä mainittu vastaa pyynnöksiin maksajana. Palveluntarjoajan puolella on toisin: EHR- tai DTR-sovellus luo Da Vinci PAS -pyyntöpaketin, ja jotakin on lähetettävä maksajalle, säilytettävä vastaus ja välitetty eteenpäin. pas -kohde tekee tämän.

name: prior-auth-out
dataType: raw
source:
  type: http
  http:
    listen: 127.0.0.1:8095
    path: /pas
destinations:
  - name: acme-health
    type: pas
    pas:
      payer: https://pas.acme-health.example/fhir
      bearer_token: ${ACME_PAS_TOKEN}     # or auth: { type: client_credentials, token_url, client_id, client_secret }
      results_to: pas-answers             # optional: a channel that takes each answer back to the EHR

Jokaisen viestin on oltava kokonainen PAS-pyyntöpaketti raakakanavalla. Perfuse lähettää sen muuttamattomana {payer}/Claim/$submit :lle: maksaja päättää korvauksesta potilaan, korvaus- ja tukevia resursseja paketissa ja korvaus uudelleenrakennettuna yhteenvetoon menettäisi ne. Tämän laitteen ulkopuolella maksajan osoitteen on oltava https.

Päätös on toimitettu pyyntö, olkoon se mitä tahansa. Hyväksyntä, hylkäys ja odottaminen kaikki merkitään ja yhtäkään niistä ei yritetä uudelleen, koska hylkäyksen uudelleenyritys toimittaa saman pyynnön kahdesti. Se, mikä epäonnistuu toimituksessa ja yritetään uudelleen, on maksaja, joka ei ole tehnyt päätöstä: virhetila, OperationOutcome (sen teksti on virhe) tai ClaimResponse, jonka tulos on error. Päätös luetaan kohde kohden PAS:n tarkastustoimien koodeista (X12 306: A1 hyväksytty, A2 osittain, A3 hylätty, A4 odottaa, A6 muutettu); vastaus, jossa ei ole koodia, luetaan "ei päätöskoodia" eikä sitä oteta hyväksymisenä. Hylkäys, jossa ei ole minkäänlaista syytä, hylätään, koska se ei täytä CMS-0057 -vaatimusta.

Maksajan vastaus on kohdekohtaisen vastauksen, joten Tarkastele vastausta voi arvioida sitä, ja results_to antaa sen toiselle kanavalle. Jokainen pyyntö on lueteltu CMS-0057, pyynnöt lähetetty maksajalle: kun se lähetettiin, potilas, palvelu, päätös ja maksajan viite (preAuthRef), jonka myöhempi tiedustelu nimeää. Luettelo säilytetään prior-auth.json -tiedostossa tietokannan vieressä (enintään 10 000 pyyntöä; vanhimmat päätetyt pyynnöt poistetaan ensin, pendattu pyyntö ei koskaan poistu); ja kunkin vuokralaisen näkyvät vain heidän omat pyynnöt.

Varmistettu HL7 Da Vinci PAS -maksajan viitekäyttöönottoon (docker-kuva hlseven/davinci-prior-auth ): pyyntö lähetetty toiminnassa olevan kanavan kautta pendataan siinä sen viitteen kanssa, ja vastaus näkyy näytöllä (ks. varmistus). Ei vielä kokeiltu tuotantomaksajaa vastaan. Ei rakennettu: pendentin pyynnön seuraaminen $inquire :lla tai maksajan myöhemmän vastauksen vastaanotto tilauksella; kanava voi tehdä molemmat tänään http - tai fhir -kohteen kanssa.

16.12 CMS -verkkoyhteydet

CMS Interoperability Framework (CMS Health Technology Ecosystem) pyytää terveydenhuollon tietoverkkoja itsearvioimaan 26 kriteeriä ja listataan CMS Aligned Networks -verkkoon; EHR: t, tarjoajat, maksajat ja sovellukset yhdistävät niihin. Kriteerit 13-16 ovat olleet voimassa 4. heinäkuuta 2026 lähtien: FHIR-rajapinnat US Core: n kanssa täydellisellä CapabilityStatementilla ja Bulk Data -ominaisuudella, asiakirjat ihmisen luettavina FHIR-liitteidenä, ajanvaraus- ja kohtaamisilmoitukset FHIR-tilauksella ja tietorekisterin sijainti.

Hallinnoi › CMS Aligned Network luetellaan jokainen kriteeri siitä, mitä Perfuse tarjoaa sille ja mihin tämä palvelin on kytketty, luettu siitä, mitä on kytketty täällä:

StatusMerkitys
Valmis täälläPerfuse tarjoaa sen ja se on päällä.
Valmis, aukkoSe on päällä, ja osa kriteeriä on sen ulkopuolella (nimi näkyy näytöllä).
Rakennettu, ei päälläPerfuse tarjoaa sen; näytöllä on asetus tai lippu, joka kytkee sen päälle.
TehtäväsiOrganisaation osuus: sopimus, sertifikaatti, julkaisu Kansalliseen tarjoajarekisteriin.
Ei rakennettuOhjelmisto tekisi sen, ja Perfuse ei tee.

Neljä voimassa olevaa kriteeriä, joita tämä palvelin tarvitsee:

KriteeriPerfusessaKytke päälle
13 FHIR -rajapinnat, US Core, Bulk DataFHIR -päätepiste sen CapabilityStatementilla ja $export-fhir, -fhir-bulk-export
14 Asiakirjat FHIR -liitteisinäDocumentReference Binaryllä ja IHE MHD XDS -rekisterin yli-fhir (MHD myös -xds)
15 Kohtaamis- ja tapaamisilmoituksetAihekohtaiset tilaukset (R5 Backport R4:lle) ADT- ja SIU -syötteistä-fhir-subscriptions
16 Tallennuspaikan sijaintiXDS.b -rekisteri, XCA muille yhteisöille, PIXm-xds, -xds-home-community

Näyttö on työlehti itsearviointiin, ei sertifioinnin: CMS tarkistaa verkkoja, joita epäillään ei täyttävän kriteerejä, ja kehyksen omat tekstit ovat viranomainen. Ei rakennettu tänään: avoimet laatusarakkeiden kyselyt (kriteeri 8), maksajan kysely kohtaamisdatan hakemiseksi (9), raporttikyselymittaukset Kansalliseen tarjoajarekisteriin (19), tarjoajien tarkistaminen kyseisessä hakemistossa (6), matkustajien mobiilien ajokorttien tai digitaalisten vakuutuskorttien lukeminen (3, 23) ja yleisen suostumuspolitiikan noudattaminen jokaisessa lukemisessa (5). IAL2-todennus on identiteetinpalvelun; Perfuse hyväksyy valitun identiteetin tokenit.

17 Turvallisuus

Perfuse käsittelee kliinisiä tietoja. Tämä luku kertoo, mitä se tekee niiden kanssa ja mitä se jättää tehtäväksi sinulle.

17.1 Siirtoturva

TLS on web-käyttöliittymässä määritetty -tls-cert ja -tls-key -valinnoilla. Ilman niitä käyttöliittymä on pelkkä HTTP, mikä on hyväksyttyvää silmukkaosoitteessa ensimmäistä katselua varten ja muualla - se sisältää tunnistetietoja ja viestin sisältöä, jotka molemmat ovat luettavissa langalla.

TLS-kanavien siirroilla on määriteltävä tls -lohko kunkin lähteen ja kunkin kohteen osalta. Saatavilla olevat asetukset ovat lähde - ja kohde -viittauksissa.

insecure_skip_verify hyväksyy minkä tahansa varmenne. Se on olemassa, koska sairaalajärjestelmät esittävät usein varmenteita, jotka eivät vahvista, ja yhteyden kieltäminen merkitsisi integraation kieltämistä. Se on nimetty näkyväksi, ja sen käyttäminen tarkoittaa, että yhteys on salattu, mutta ei todennettu — sinulla on suojaa passiivista kuuntelua vastaan, mutta ei väliintulija-palvelinta vastaan.

Varmistamaton TLS-yhteys ei ole sama kuin varmistettu yhteys, ja ero on syytä merkitä jonnekin, missä auditoijasi sen löytävät. Parempi korjaus on lähes aina hankkia etäpään varmenne ja luottaa siihen nimenomaisesti sen sijaan, että luotettaisiin kaikkeen.

17.2 Tunnistus ja roolit

Käyttäjät ovat tietokannassa. Jokaisella on yksi viidestä roolista, ja jokainen rooli sisältää kaiken edellisten roolien sisällön:

RooliVoivat
ValvontaNähdä, toimivatko asiat: kanavan tila, laskurit, virtauskartta, hälytykset, kojut, mittarit ja jonon syvyys. Ei viestien sisältöä, kanavatiedostoja tai jonotettuja viestejä.
KatselijaMyös lukea viestejä, kanavatiedostoja, jäljityksiä ja toimintalokia.
Toiminnan ylläpitäjäMyös uudelleenlähetys: uudelleenprosessoida viesti, toistaa kanava ja yritä uudelleen jonotettuja toimituksia.
MuokkaajaMyös luoda ja muuttaa kanavia ja suorittaa vertailuja.
YlläpitäjäMyös käynnistää ja pysäyttää kanavia, tyhjentää jonot ja hallinnoi henkilöitä, tunnuksia ja palvelimen asetuksia.

Kuudes rooli, Alusta, kuuluu sille, joka pyörittää jaettua palvelinta: se luo vuokralaisia ja asettaa heidän rajoituksensa, ja se ei omista kanavia.

Valvonta on tarkoitettu päivystäjälle tai toiminnan näytölle seinällä: kaikki tarvittava nähdä, onko syöte loppunut, ja mitään, mikä mainitsee potilaan nimen. Katselija voi lukea viestin sisältöä, joka on kliinistä tietoa; se on matalan etuoikeuden rooli *konfiguraatiolle*, ei yksityisyydelle. Toiminnanjohtaja erottaa epäonnistuneen toimituksen korjaamisen yöllä siitä, mitä syöte tekee: henkilö, joka uudelleen lähettää, ei tarvitse pystyä uudelleenkirjoittamaan kanavaa.

17.2.1 Toistuvat väärät salasanat

Väärät salasanat ja epäonnistuneet avainnimi-kirjautumiset lasketaan osoitteen mukaan, josta yhteys tulee, ja usean peräkkäisen jälkeen tämä osoite odottaa ennen kuin se voi yrittää uudelleen (vastaus on 429, Retry-After): tilit eivät lukitse nimeä, koska se antaisi kenelle tahansa mahdollisuuden lukita ylläpitäjä tarkoituksella.

Osoite on yhteyden oma, ei koskaan se, mitä pyyntö väittää X-Forwarded-For: ssä, jonka lähettäjä kirjoittaa. Kääntävän proxyn takana samalla koneella Perfuse käyttää viimeistä X-Forwarded-For-merkintää, proxyn lisäämää, joten kunkin asiakkaan lasketaan erikseen. Toisella koneella oleva proxy tavoittaa Perfusen yhdestä osoitteesta, ja kaikki sen asiakkaat jakavat yhden laskurin: rajoita kirjautumisia proxyn kautta.

17.2.2 Kanavaryhmät

Henkilö (tai API-tunniste) voidaan rajoittaa tiettyihin kanavaryhmiin: he näkevät ja toimivat vain niillä kanavilla, joiden group on yksi heidän ryhmistään. Tämä on sairaalaryhmän järjestely yhdellä palvelimella, jossa jokaisen laitoksen analyytikot huolehtivat omista syötteistään ja keskustiimi, jolla ei ole rajoituksia, huolehtii niistä kaikista. Rhapsody kutsuu tätä lukosta.

Rajoitus koskee kaikkia samanaikaisesti, koska se on sovellettavissa pyynnölle eikä muisteta kunkin näytön mukaan: kanavaluetteloa, kojua, virtauskarttaa, viestejä ja niiden hakua, laskelmia ja kaavioita, jonot, hälytykset, mittarit, todistukset, sopimukset ja koodauskäytön. Kanava, joka ei ole henkilön ryhmissä, ei ole olemassa heille; pyytäminen sen nimeä vastaa *ei löydy*, joten sen nimeä ei vahvisteta. Kanava, jolla ei ole ryhmää, nähdään vain henkilöillä, joilla ei ole rajoitusta.

Kanavan tallentaminen pitää sen henkilön ryhmissä: he eivät voi luoda kanavaa toiseen ryhmään tai siirtää sitä omasta ryhmästään. Mitä jokainen laitos jakaa - kooditaulukot, skriptikirjastot, etukäteen hyväksyttyjä päätöksiä - he voivat lukea, mutta eivät muuttaa. Palvelimen laajuiset luvut (etukäteen hyväksytty, tokenin käyttö, tunnelit) näytetään vain henkilöille, joilla ei ole rajoitusta, ja niin ovat mittarit ja hälytykset koko palvelimesta eikä kanavasta.

Rajoitettu hallinnoija on laitoksen oma hallinnoija. He hallinnoivat ihmisiä ja tokenia omista ryhmistään, käynnistävät ja lopettavat kanavansa ja tyhjentävät jononsa. Heidän lisäämänsä kollega saa heidän ryhmänsä, ellei he mainitse niitä, he eivät voi antaa ryhmää, jota he eivät omista, ja he eivät näe tai muuta ketään, jolla ei ole rajoitusta. Kaikki muu, minkä hallinnoija voi tehdä, muuttaa koko palvelinta - asetukset, kirjautuminen, uudelleenkäynnistys, hälytysäännöt, brändäys, laivasto, SMART-palvelin - ja se evätetään heiltä.

Ryhmät määritellään Käyttäjissä (ja tokenien kohdalla Tokeneissa), pilkulla erotettuna luettelona. Jokainen muutos kirjataan toimintalokiin ja tulee voimaan henkilön seuraavassa pyynnössä.

Eri rooli kussakin ryhmässä

Henkilö voi olla eri roolissa kussakin ryhmässään: lab=editor, adt Käyttäjät-osiossa muokkaa laboratorion kanavia ja on valittu rooli - esimerkiksi viewer - sairaaloiden ryhmissä. He näkevät molempien ryhmien kanavat jokaisella näytöllä. Tallentaminen, käynnistäminen tai uudelleenlähettäminen ryhmässä, jossa heidän roolinsa on liian alhainen, evätään heidän roolinsa perusteella; se ei tee näytön puuttuvaksi, koska he voivat nähdä sen. Heidän roolinsa näytön yläreunassa on vahvin, jonka heillä on, joka avaa näytöt, joita roolia käytetään, ja jokainen toiminto näillä näytöillä on edelleen rajoitettu ryhmiin, joissa heillä on se.

Vain ihmiset, jotka ovat rajoitettu kanavaryhmiin, voivat olla niissä. Joku, joka näkee jokaisen kanavan, on yksi rooli, koska "laboratorion kanavien muokkaaja" henkilölle, jolla ei ole rajoitusta, olisi muokkaaja kaikista, jotka eivät kuulu mihinkään ryhmään, ja palvelimen laajuisilla sivuilla. Laitoksen ylläpitäjä voi antaa roolin ryhmässä vain ryhmissä, joita he hallinnoivat, ja koskaan heidän oman roolinsa yläpuolella.

17.3 Kuka voi soittaa FHIR-päätepistettä

FHIR-päätepiste (serve -fhir) tarkistaa yhden kahdesta tunnistetyypistä:

Kun SMART on määritetty, vain SMART -tokenit hyväksytään, joten jokainen soittaja on sitoutunut niiden laajuuteen. API -tokenilla on rooli ja ei laajuutta: viewer -tokeni voi lukea jokaisen potilaan tiedot. Maksaja, joka käytti SMARTia rajoittaakseen jokaisen sovelluksen siihen, mitä sille on myönnetty, ei pitäisi olla pääsy, joka ei ole rajoitettu.

Jotkut sivustot tarvitsevat molempia - sisäisen korvausvirran, joka pitää API -tokenia ja ei ole SMART -asiakas, rinnalla sovelluksia, jotka kirjaavat sisään SMARTin kautta. Niille Asetukset → FHIR → Hyväksy Perfuse API -tokenit SMART -tokenien rinnalla (-fhir-api-tokens käynnistysajassa) sallii API -tokenit myös. Se on pois päältä oletuksena, se tulee voimaan seuraavassa pyynnössä kummassakin suunnassa, ja muutoksen tekeminen kirjataan auditilokiin. Tokeni voidaan erottaa muodosta: SMART -tokeni on allekirjoitettu JWT, ja API -tokeni ei koskaan ole, joten yhtä ei koskaan tarkisteta toisena. Missä voit, anna tällaiselle järjestelmälle SMART -taustapalveluasiakas, jolla on vain ne laajuudet, joita se tarvitsee.

17.3.1 FHIR-päätepiste, joka on avoinna muille

Julkinen testipalvelin antaa tunnistetietoja, jotka voivat kirjoittaa, koska aiemman valtuutuksen testaaminen tai tilaukset vaativat kirjoittamista. Kaksi rajoitusta estää yhden asiakkaan pilaa sen kaikille, molemmat Asetukset → FHIR -osiossa ja molemmat pois päältä oletuksena:

Sairaalan oma päätepiste ei tarvitse kumpaakaan.

17.4 Sairaalan oma päätepiste ei tarvitse kumpaakaan.

Käyttämällä Asetukset › Turvallisuus › Tekoälyagentit (MCP) (tai serve -mcp), Perfuse tarjoaa Model Context Protocolin osoitteessa /mcp, jotta tekoälyagentti, kuten Claude, ChatGPT tai IDE-avustaja, voi kysyä siitä, mitä tapahtuu. Oletuksena se on pois päältä, ja sen poistaminen lopettaa jokaisen agentin seuraavalla kutsulla.

Välikäsittäjä muodostaa yhteyden Hallinta › Käyttäjät › Konetunnisteet -API-tunnuksella kuin kantaja-tunnuksena, ei koskaan henkilön selainistunnussa (jota ei hyväksytä, joten välikäsittäjä ei koskaan toimi henkilön koko pääsyoikeuden kanssa). Asiakasasetus näyttää tältä:

{ "mcpServers": { "perfuse": { "type": "http", "url": "https://perfuse.example/mcp",
    "headers": { "Authorization": "Bearer <token>" } } } }
TyökaluRooliMitä se tekee
server_status, list_channels, queue, alertsmonitorOnko asiat toimivat, ilman viestin sisältöä
get_channel, search_messages, get_message, find_patient, fhir_searchkatselijaKanavat, viestit (sisältöineen), potilaan viestit eri muodoissa, FHIR-haku
retry_delivery, reprocess_messageoperaattori, ja mcp:writeYritä uudelleen jonossa oleva toimitus, lähetä viesti uudelleen kanavansa kautta
start_channel, stop_channelylläpitäjä, ja mcp:writeKäynnistä tai lopeta kanava

Jokainen työkalu vastaa samalla reitillä tai FHIR-haulla, jota henkilön näyttö käyttää, ja sitä kutsutaan agentin omalla tunnisteella, joten tunnisteiden rooli, kanavaryhmät ja vuokraaja päättävät, mitä se näkee, täsmälleen kuten ne tekevät konsoleissa; ja fhir_search hankkii tunnisteiden oman pääsyn FHIR-päätepisteessä (joka voi kieltää API-tunnisteet kokonaan; ks. yllä oleva FHIR-osio). Agentille tarjotaan vain työkalut, joita sen tunniste voi käyttää. Oletuksena on lukeminen: työkalu, joka muuttaa jotain, tarvitsee myös tunnisteiden mcp:write -laajuuden ("Anna tekoälyagentin toimia sen kanssa", kun tunniste voidaan myöntää), joten raportointiagentille myönnetty tunniste ei voida saada toimimaan ohjelmoinnin kautta. Valvontatunnisteen vastauksissa poistetaan viestin sisällöt, riippumatta siitä, mitä reitti palauttaa.

Jokainen kutsu on Toiminta-loossa mcp.tool-merkinnössä, jossa on tokenin nimi, työkalu, sen argumentit ja tulos (ok, refused, invalid, rate-limited tai HTTP-tilakoodi); mcp.connect merkitsee, mikä asiakas on yhdistetty. Jokainen token voi tehdä 60 työkalukutsua minuutissa (Työkalukutsut minuutissa yhdestä tokenista); ylittäessä kutsuun vastataan virheellä, jonka agentti voi lukea, eikä mitään tehdä. Pyynnöstä selainikkunasta toisesta alkuperästä kieltäydytään, mikä MCP pyytää palvelinta lopettamaan DNS-uudelleenmäärityksen. Siirto on MCP:n Streamable HTTP, johon vastataan JSON-muodossa ilman tapahtumavirrää; hyväksytään protokollaversiot 2025-06-18, 2025-03-26 ja 2024-11-05. Viestit ja FHIR-resurssit sisältävät potilastietoja: agentin vastaukset menevät sille mallille, jota se ajaa, joten anna tokeni agentille vain siinä tapauksessa, että malli on sallittu nähdä ne, ja anna sille alin rooli, joka tekee työn.

17.5 | --- | --- | --- |

serve -demo-account demo:PASSWORD luo jaetun tilin julkiselle esittelypalvelimelle, ja kirjautumissivu näyttää käyttäjänimen ja salasanan painikkeen, joka kirjautuu sisään niiden avulla. Tili on katselija, joten se voi tarkastella kaikkea ja muuttaa mitään. Toisin kuin mikä tahansa muu katselija, se voi myös avata järjestelmänvalvojien näytöt (käyttäjät, koneen tunnukset, asetukset, tietosuojelu, laivueen vertaiset), vain luku -muodossa: esittely arvioidaan sen näytöistä. Se lukee niitä katselijan kanavien tavoin, jokainen tunniste näytetään asetettuna tai ei, koskaan sen arvoa, ja jokainen muutos hylätään. Se voi myös painaa tarkistuksia, jotka eivät muuta mitään ja eivät pääse ulos palvelimesta: skriptin tarkistus ja kanavaeditorin validointi ja parsiminen. Se ei voi muuttaa salasanaansa tai lisätä avainparia, koska ensimmäinen vierailija, joka tekee sen, lukitsee kaikki muut sen jälkeen. Kunkin käynnin aikana se palautuu katselijaksi julkaistulla salasanalla. Salasanan on oltava vähintään 12 merkkiä pitkä, kuten muillakin. Käytä sitä vain testitietojen sisältävällä palvelimella: kuka tahansa, joka lukee kirjautumissivun, voi lukea jokaisen viestin palvelimella.

17.6 Tarkastus

Konfiguraatiomuutokset, kirjautumiset ja pääsy viestisisällön ovat tallennettu, jossa on mukana kuka, mitä ja milloin.

Tarkastusloki on samassa tietokannassa kuin viestit. Se on kätevää, mutta se on myös rajoitus: joku, joka voi muuttaa tietokantaa, voi muuttaa tarkastuslokin. Jos vaatimukset sisältävät väärentämisen esto, loki tarvitsee lähetyksen jonnekin, jossa se on vain lisättävissä, ja Perfusen oma loki on tapa tehdä se.

17.7 Salaisuudet konfiguraatiossa

Salasanat, salakoodit ja avaimet näkyvät kanavan konfiguraatiossa, mikä tarkoittaa, että ne ovat YAML-tiedostoissa.

Kaksi seurausta. Tiedostojen on oltava tiedostojärjestelmän käyttöoikeudet, jotka heijastavat niiden sisältöä, ja jos ne ovat versiohallinnassa — mikä on muuten suositeltavaa — repositio sisältää tunnistetiedot ja on käsiteltävä sen mukaisesti.

Kun arvo on salaisuus, käyttöliittymä näyttää sen salaisuutena ja API ei palauta sitä tallennuksen jälkeen. Se suojaa sitä siitä, että se luetaan jonkun olkapään yli tai vuotaa näyttökuvaan. Se ei suojaa tiedostoa.

17.8 Mitä on tietokannassa

Viestivarasto sisältää viestit sellaisenaan, mitä ne on vastaanotettu, mikä tarkoittaa kliinistä syötettä. Se on oltava salatulla tallennuksella, varmuuskopioitava kliinisen tiedon kanssa, joka merkitsee sen säilyttämistä, ja pääsy on ohjattava tiedostojärjestelmän tasolla sekä Perfuse-omien roolien kautta.

cleanup.periodDays rajoittaa, kuinka kauan niitä säilytetään. Katso viestivarasto jännitystä sen ja riittävän historian välillä, joka on tietoinen rytmistä hälytyksestä.

17.9 Tietosuojelu (GDPR ja UK GDPR)

Tietosuojan näyttö (Hallinnoi, ainoastaan hallinnoitsijoille) vastaa henkilön pyynnöille GDPR:n ja UK GDPR:n mukaisesti. Se ei tee päätöksiä valvontaviranomaisen puolesta: onko pyyntö hyväksyttävä ja onko poikkeus sovellettavissa, on valvontaviranomaisen päätös, joka tallennetaan pyynnön kanssa.

Mikä on tallennettu. Henkilö on nimetty tunnisteilla: system|value (NHS-numero, MRN sen myöntävällä viranomaisella) tai numero yksin. Potilasindeksin kanssa nämä laajenevat jokaisen rekisterin jokaiseen numeroon, joka on linkitetty samaan henkilöön, joten pyynnössä, joka mainitsee sairaalnummeron, löytyvät muissa rekistereissä olevat tiedot. Näe, mitä on tallennettu etsii kaikki tallennukset, jotka sisältävät potilastietoja:

KauppaLöydetty
Viestittunnistetietoindeksi (Asetukset → Tiedot → Indeksi potilastunnisteet); ilman sitä viestejä ei voida löytää tunnisteella
Toimitusjonolukiessaan jokaisen jonossa olevan viestin tunnistetiedot
FHIR-kauppaPotilasresursseja, joissa on tunniste, ja jokainen resursseja, jonka indeksoidut viittaukset osoittavat yhteen
Ennakkoluulotpyynnön potilaan tunnistetiedot
Potilasindeksitunniste, tai EUID

Mikä siihen ei ylety, siitä se sanoo: jäljet lähetetään kerääjälle (-trace-endpoint), audit-lokiin (se säilytetään: se on kirjaus kuka teki mitä, mukaan lukien tämä pyyntö), ja varmuuskopioihin.

Pyynnöt. Pyyntö tallennetaan pyynnön tyypin (pääsy, 15 artikla; siirrettävyys, 20 artikla; poistaminen, 17 artikla; rajoitus, 18 artikla), pyynnön lähettäjän, tunnisteiden ja huomautuksen (tunnistamistapa, laajennus ja syy) kanssa. Se on määräaikainen kuukauden kuluttua vastaanotosta (12(3) artikla); myöhässä oleva pyyntö näytetään punaisella.

Poista nyt poistaa kaiken löydetyt tiedot: viestit kokonaisuudessaan (tallenne, runko, toimitukset, tunnisteet, liitteet, joita ei käytetä muiden viestien kanssa), jonotut toimitukset (niitä ei lähetetä), FHIR-resurssit niiden historiallisine versioineen, aiemmat valtuutuspyynnöt ja niiden vastaukset, liitteet ja seurant-numerot, sekä henkilö potilasindeksistä jokaisine linkitetyine tietoineen ja historiallisine versioineen (yksi tapahtuma merkitsee, että poistaminen on tapahtunut, ja kuka on tehnyt sen).

Suljettu pyyntö säilyttää ainoastaan henkilön numeroiden viimeiset merkit: se säilyy vastauksen merkkinnänä ilman, että se on toinen kappale niistä. Jokainen vaihe on audit-lokissa numeroiden maskien kanssa.

Lailliset pidätykset. Pidätyksen nimi on henkilöllä tunnisteilla, sen syyn ja vapaaehtoisen päättymispäivämäärän kanssa. Kun se on voimassa, poistaminen hylätään suoraan, ja viestivaraston säilytysikkuna säästää henkilön viestit (tallenteet ja rungot) kunnes pidätyksestä luoputaan.

Varmuuskopiot ja poistamisloki. Ennen poistamista tehty varmuuskopio sisältää edelleen poistetut tiedot, kunnes se vanhenee. Jokainen poistaminen kirjataan lokitiedostoon: milloin, kuka, kuka hyväksyi sen, paljonko kussakin tallennuspaikassa poistettiin, ja henkilön tunnisteet suolattuina SHA-256-hašina eikä selkeästi. Varmuuskopion palauttamisen jälkeen Sovella poistamisia uudelleen hašaa palautettujen tallennusten tunnisteet kunkin kirjauskohdan suolan kanssa ja poistaa jokaisen henkilön, jonka lokitiedosto mainitsee. Lyhyet numerot voidaan löytää niiden hašien avulla kokeilemalla jokaista arvoa, joten lokitiedosto on itsessään henkilötietoja ja säilytetään tietokannan omalla suojauksella.

Säilytys. Näyttö listaa, kuinka kauan kunkin tietotyyppi säilytetään täällä ja mitä muutoksia se saa: viestitallenteet ja -rungot niiden säilytysikkunoiden mukaan, jonotusjonossa kunnes toimitetaan tai poistetaan, FHIR-tallennus, aiemmat valtuutuspyynnöt ja potilasindeksi kunnes ne poistetaan (kliiniset tiedot eivät poisteta aikataulun mukaan), audit-loki säilytetään.

Käsittelyrekisteri (30 artikla). Käsittelyrekisteri lataa Markdown- tai CSV-muodossa, mitä tämä palvelin tietää siitä: valvontaviranomainen, tietosuojavastaava ja missä tiedot säilytetään (Asetukset → Tiedot → Tietosuojelu), kunkin tietotyyppiin liittyvä säilytys, ja yksi käsittelytoiminto kunkin kanavan kohdalla, mitä se vastaanottaa, mistä se tulee, mihin kohteisiin se lähetetään, ja mihin isäntiin se lähetetään. Tarkoitukset, lailliset perusteet ja tietosuojan kohteet jätetään valvontaviranomaisen täyttämiksi, ja niistä kerrotaan. CSV-solu, joka alkaa =, +, - tai @ -merkillä, kirjoitetaan johtavalla apostrofin kanssa, jotta taulukkolaskentaohjelma ei suorita sitä.

Missä tiedot säilytetään. Missä tiedot säilytetään (Asetukset → Tiedot → Tietosuojelu) ilmoittaa sanoissa, joita valvoja voi tarkastaa, missä palvelin, sen tietokanta ja varmuuskopiot sijaitsevat; Tietosuojelu-näyttö ja käsittelyrekisteri näyttävät sen. Luonnos tietosuojasopimukseksi organisaatioille, joita BioDream isännöi, on docs/legal/dpa-template.md -tiedostossa; se on luonnos lakimiehelle, ei lakineuvontaa.

Rajapinta on /api/privacy (yhteenveto), /api/privacy/find, /api/privacy/requests (ja /{id}/approve, /{id}/export, /{id}/erase, /{id}/close), /api/privacy/holds, /api/privacy/reapply ja /api/privacy/register.

17.10 Vuokralaiset

Virtuaalipalvelin on eristysraja: kanavat, viestit, käyttäjät ja asetukset kuuluvat yhteen, eikä mitään ylitä sitä.

Tämä on olemassa palveluntarjoajalle, joka suorittaa useiden praktiikkojen syötteitä. Älä käytä sitä erottamaan osastoja yhden organisaation sisällä, jotka tarvitsevat toistensa liikenteen näkemistä: eristys on todellista, eikä ole minkäänlaista yleiskatsausta asiakkaan välillä. Sen sijaan käytä kanavaryhmiä (yllä), jotka jakavat yhden organisaation henkilöstöä, kun taas keskitiimi näkee kaiken.

17.10.1 Rajoitukset

Alustan operaattori asettaa kunkin asiakkaan rajoitukset Asiakkaissa, jotta yksi asiakas ei voi syrjäyttää muuta jaettua palvelimen osaa. Jätä raja tyhjäksi, jos sitä ei ole.

Yksikään niistä ei menetä viestiä. Ylittäessäsi siirtomäärän tai tallennustilaa, vastaanotettu viesti hylätään samalla tavalla kuin kiireinen vastaanottaja hylkäisi sen, ennen kuin mitään tallennetaan tai toimitetaan: MLLP ei saa vahvistusta (ei hylkäystä, jota jotkut lähettäjät pitävät "älä lähetä uudelleen"-merkkinä), HTTP saa 429 ja Retry-After-merkinnän, SOAP saa 503, DICOM saa uudelleenyritystilanteen, ja jono, bucket tai tiedosto jätetään siihen, mihin se oli. Lähettäjä lähettää uudelleen, kuten jokainen rajapintamoottori ja EHR tekee. Mitään jo tallennettua ei poisteta, jotta tilaa vapautuu. Korotettu raja astuu voimaan minuutin kuluessa, ja jokainen rajojen muutos tallennetaan toimintalokiin.

17.11 Testitiedot

Luodut viestit, jotka on kuvattu kohdassa testing, ovat osittain olemassa yksityisyydensuojana. Jonkin ongelman toistaminen muualla, esimerkin lähettäminen valmistajalle tai testiympäristön täyttäminen ovat kaikki asioita, jotka muuten tehdään oikeilla viesteillä.

Generaattorin tuotos ei sisällä potilastietoja rakenteen vuoksi eikä sensuroinnin vuoksi. Suosittelemme sitä käytettäväksi käsin poistettujen oikeiden viestien sijaan, joka on prosessi, joka voidaan tehdä epätäydellisesti ja yleensä tehdään.

17.12 Yksinkertainen kirjautuminen

Kolme mekanismia ja paikalliset tilit niiden rinnalla.

OpenID Connect (-oidc), hakemisto LDAP:n yli (-ldap) ja SAML 2.0 (-saml). Kukin niistä konfiguroidaan Hallinnoi → Kirjautuminen -näytöltä ja kirjoitetaan tiedostoon, jonka liput nimeävät, joten näyttö ja tiedosto ovat kaksi näkymää samasta asiasta eikä kaksi paikkaa, joita on pidettävä yhdenmukaisina.

Paikalliset tilit ovat aina käytettävissä eivätkä ne voida poistaa käytöstä. Se on tietoisesti tehty: paikallinen liitäntämoottori, jonka ainoa tapa sisään on identiteettipalveluntarjoaja, tulee saavuttamattomaksi juuri silloin, kun identiteettipalveluntarjoaja on saavuttamaton, eikä kliininen liitäntä ole hyvä paikka oppia siitä. Kirjautumisnäyttö kertoo, montako paikallista ylläpitäjää on ennen kuin se kehottaa sinua luottamaan muihin.

17.12.1 Mihin ryhmän määritys päättää

Kaikki kolme kartuttaa ryhmiä hakemistosta Perfuse-rooleihin, ja joku, joka on useamman kuin yhden ryhmän jäsen, saa etuoikeutetuin roolin. Se on ainoa turvallinen suunta, jossa se voidaan ratkaista — vaihtoehto on henkilö, joka menettää pääsyn, jota hän on oikeutettu saamaan, koska hän on myös alempiarvoisessa ryhmässä.

Mihin tahansa kuudesta roolista voidaan myöntää: seuranta, katselu, operaattori, muokkaaja, ylläpitäjä ja alusta.

Ryhmä voidaan myös rajoittaa joillekin kanavaryhmille toisessa ruudussa (channel_groups tiedostossa). Kun ryhmä mainitsee jotain, jokainen kirjautuminen asettaa henkilön kanavaryhmät niistä ryhmistä, jotka myöntävät heidän roolinsa: joku, joka kuuluu ryhmään, joka muokkaa laboratorion kanavia, ja toiseen ryhmään, joka näkee jokaisen kanavan, on laboratorion kanavien muokkaaja ja mitään muuta. Voimakkain rooli ei koskaan yhdistetä laajimpaan ulottuvuuteen, koska mikään ryhmä ei myönnä sitä. Ryhmä, jolla on tyhjä ruutu, antaa jokaisen kanavan. Kun mikään ryhmä ei mainitse mitään, kirjautuminen jättää kanavaryhmät sellaisiksi, kuin ylläpitäjä on asettanut Käyttäjissä.

Kun jokainen ryhmä, johon henkilö kuuluu, mainitsee kanavaryhmät, kunkin kanavaryhmän saa voimakkain rooli niistä ryhmistä, jotka mainitsevat sitä: Lab-Interfaces (muokkaaja, laboratorio) ja Clinical-IT (näkijä, laboratorio ja adt), henkilö muokkaa laboratorion kanavia ja näkee adt-kanavat, niin kuin ne olisivat asetettu käsin. Kun yksi heidän ryhmistään antaa jokaisen kanavan, ei ole listaa, joka pitäisi roolia kunkin ryhmän mukaan, ja yllä mainittu sääntö pätee.

roles:
  editor: [Lab-Interfaces]
  operator: [Night-Desk]
  viewer: [Clinical-IT]
  channel_groups:
    Lab-Interfaces: [lab, pathology]
    Night-Desk: [adt]

Tuo on OpenID Connect- ja SAML-tiedosto. Hakemiston tiedosto kartoittaa kunkin ryhmän yhteen rooliin (roles: {Lab-Interfaces: editor}), ja channel_groups on roles-kentän vieressä.

Karttamuoto, joka ei anna kenellekään mitään, hylätään sen sijaan, että se tallennettaisiin. Konfiguraatio, joka todentaa ihmisiä ja estää heidän pääsynsä, näyttää ulkoisesti samalta kuin rikkinäinen tuote: pyyntö ja vastaus kulkevat läpi, ja kaikki evätetään ilman selitystä, miksi.

Tilin luominen ensimmäisellä kirjautumiskerralla on oletuksena pois päältä. Kun se on pois, joku on olemassa Perfusessa ennen kuin he voivat kirjautua sisään, joten hakemisto päättää, kuka he ovat, ja Perfuse päättää, kuka on sallittu.

17.12.2 SAML, nimenomaan

Osat, jotka on hyvä tietää ennen kuin konfiguroit sitä:

17.12.3 Kunkin palveluntarjoajan lähettämät tiedot

Ryhmäattribuutti on se, missä kirjautumiset menevät pieleen, ja kolme yleisintä palveluntarjoajaa nimeävät sen eri tavoin.

PalveluntarjoajaYleensä lähettääHuomautukset
KeycloakgroupsVaatii ryhmän jäsenyyden määrityksen asiakkaaseen.
Entra IDclaim-URI, joka päättyy /claims/groupsLähettää ryhmän objekti-IDs, ellei sovellusta ole määritetty lähettämään nimiä. Määritä IDs tai muuta palveluntarjoajaa.
Oktasovelluksen määrittelyn mukainen arvoYleensä groups, jonka suodatin päättää, mitkä lähetetään.
ADFSclaim-URIAllekirjoittaa Vastauksen sen sijaan, että Allekirjoittaisi Vakuutuksen, mikä Perfuse hyväksyy.

Claim-URI voidaan syöttää sen viimeisen segmentin kautta: kirjoittamalla groups löytyy http://schemas.microsoft.com/ws/2008/06/identity/claims/groups. Nimi, joka päättyy vain sanaan, ei vastaa — excluded_groups ei ole groups.

Ryhmän jäsenyys, joka saapuu yhtenä pilkuin erotettuna arvona, kohdellaan yhtenä ryhmän nimenä ja ei vastaa mitään. Tämä on oikea tulkinta standardista, ja pilkun käyttäminen ryhmän erottimena merkitsisi, että ryhmä, joka laillisesti sisältää yhden, muuttuu hiljaisesti kahteen. Jos palveluntarjoajasi lähettää sen, muuta sitä palveluntarjoajassa.

Testaa kirjautumisnäytöllä tarkistaa kaikki, mitä voidaan tarkistaa ilman henkilöä: asetukset, varmenne ja se, voidaanko kirjautumispyyntö luoda. Se sanoo suoraan, ettei se voi todistaa, että joku voi kirjautua sisään, koska siihen tarvitaan todellinen vakuutus todellisesta henkilöstä, ja ainoa tapa saada se on antaa heidän yrittää.

17.13 Tunnistepalvelun tarjoamat tilit: SCIM

Valitsemalla -scim (Asetukset → Kirjaudu sisään → Automaattiset tilit), identiteettipalveluntarjoaja, kuten Okta, Microsoft Entra ID tai Google Workspace, luo, päivittää ja poistaa Perfuse-tilit itse osoitteessa /scim/v2/Users, joten henkilö, joka poistuu organisaatiosta, menettää pääsyn, kun hänen hakemistotilinsä on poistettu, eikä kun joku muista. Tarjoaja todentaa API-tunnuksella, joka sisältää admin-roolin, luodaan Käyttäjät → Konetunnisteet-kohdassa ja lähetetään bearer-tunnuksena.

17.14 Mitä Perfuse ei tee

Se ei salaa tietokantaa levossa. Käytä tiedostojärjestelmän tai asemaverkkotallennuksen salausta.

Se ei hallitse omia varmenteitaan tai uusia niitä. Osoita se tiedostoihin ja hallitse näitä tiedostoja jo olemassa olevilla työkaluilla.

SAML on verifioitu kahden riippumattoman tarjoajan kanssa, joilla on todellinen selainkirjautuminen, todellinen väittämä ja todellinen istunto: Keycloak 26 ja Microsoft Entra. Kaksi asiaa on enemmän kuin kaksi kertaa yksi, koska nämä kaksi eroavat tavalla, joka osoittautui kuormittavaksi — Keycloak kirjoittaa väittämänsä nimirajauksilla ja Entra kirjoittaa samat alueet ilman niitä, ja yksi vika, joka tässä alueella on ollut, on ollut etuliitteen käsittelyssä.

Aloita lukemalla palveluntarjoajan metatietoja. Asetukset, sitten Kirjaudu sisään, sitten SAML-välilehti: anna metatietojen URL-osoite tai liitä asiakirja, ja kirjautumisosoite ja allekirjoitusvarmenne täytetään automaattisesti. Jokainen SAML-palveluntarjoaja julkaisee yhden näistä — Okta, Entra, AWS IAM Identity Center, Keycloak, ADFS — ja se on ero konfiguroinnin ja kopioidun konfiguraation välillä. Tekeminen käsin tarkoittaa varmenne etsimistä XML-tiedostosta, rivien poistamista base64:stä ja käärimistä PEM-otsikkeisiin, jossa yksittäinen virheellinen välilyönti tuottaa allekirjoitusvirheen, joka ei kerro mitään muodosta.

Mitä takaisin tulee, kuvaillaan kuin dumppaamalla: kunkin varmenne aihe, vanhenemispäivämäärä ja SHA-256-sormenjälki, jotta voit tarkistaa sen palveluntarjoajan oman hallintapaneelin näytön kanssa. Vanhentunut varmenne kutsutaan vanhentuneeksi eikä jätetä vertailtavaksi päivämääräksi. Mitään ei tallenneta lukemalla — soveltaminen lomakkeeseen on erillinen napsautus, koska asiakirja, jonka joku liittää, ei ole vielä päätös siitä, mitä luottaa.

Metatietojen URL-osoite haetaan vain https:llä, ja osoite tarkistetaan samalla käytännöllä, joka ohjaa kanavakohteita, joten tätä ei voida käyttää palvelimen lukemiseen pilviviestintätunnuksista. Uudelleenohjauksia ei seurata, koska sallittu osoite, joka uudelleenohjaa estettyyn, kulkee suoraan ohi tämän tarkistuksen.

Jos konfiguroit Entraa, viisi asiaa eivät vastaa esimerkkejä. Se ei lähetä sähköpostiväittämää lainkaan. Sen NameID on läpinäkymätön tunniste eikä osoite. Se ei lähetä ryhmäväittämää, ellei sovellus ole nimenomaisesti konfiguroitu lähettämään sitä, joten roolikartta, joka on kirjoitettu ryhmien perusteella, hylkää jokaisen kirjautumisen. Kun ryhmät lähetetään, ne ovat objekti-GUID:t eikä nimiä, ellei vuokralaisen tila synkronoida paikallisesta Active Directorysta. Ja sen väittämän nimet elävät schemas.microsoft.com/identity -alihakemistossa, missä suurin osa asiakirjoista näytää schemas.xmlsoap.org. Perfuse käsittelee kaikki viisi; ne on lueteltu, koska neljä ensimmäistä näyttäytyvät muutoin virheiltä Perfusessa, kun ne ovat Entraa olemassa.

Ero ei ole teoreettinen tässä. Ensimmäinen aito Keycloak-väittämä epäonnistui suoraan, koska allekirjoituksen kattama kanoninen muoto laskettiin nimirajauksia pudottamalla. Mikään todellinen tunnistepalvelu ei olisi voinut allekirjoittaa ketään, ja paketin omat viisi kanonisen muodon testit menivät läpi koko ajan — kunkin heistä allekirjoitettiin ja vahvistettiin samalla koodilla, joten ne osoittivat vain, että se oli samaa mieltä itsensä kanssa. Jos olet ensimmäinen, joka osoittaa toisen tarjoajan tähän, odota löytäväsi jotain, ja palvelimen lokitila nimeää vaiheen, joka epäonnistui.

18 Toiminnot

18.1 Käyttöönotto

Yksi binääri ja kaksi polkua: kanavatiedostojen hakemisto ja tietokantatiedosto. Sovelluspalvelinta, erillistä web-tasoa tai viestinvälittäjää ei vaadita.

perfuse serve -channels ./channels -db ./perfuse.db -addr 0.0.0.0:8443 \
  -tls-cert ./cert.pem -tls-key ./key.pem

Suorita se isännän palvelunvalvontatyökalulla — systemd, launchd, konttien suorittamistyökalu. Se odottaa uudelleenkäynnistystä, jos se lopettaa.

18.2 Mihin data voi mennä (datan sijainti)

serve -residency (Asetukset → Data → Mihin dataa saa lähettää) määrittää pilvipalvelun alueet, joille tämän palvelimen dataa voidaan lähettää tai lukea: alueet (eea, uk, ch) ja aluekoodit (eu-central-1, uksouth, europe-west2), pilkuin eroteltuina. eea on AWS-, Azure- ja Google Cloud -pilvipalvelujen alueet Euroopan talousalueella (Frankfurt, Irlanti, Pariisi, Tukholma, Milano, Espanja; Alankomaat, Saksa, Ranska, Ruotsi, Norja, Italia, Puola, Espanja; Belgia, Alankomaat, Saksa, Italia, Ranska, Suomi, Espanja, Puola), uk niistä Yhdistyneessä Kuningaskunnassa, ch niistä Sveitsissä.

Kun se on asetettu, kanava kieltäydytään, kun se tallennetaan ja kun se ladataan, jos liitännäisnimiää alueen ulkopuolelta: S3-, SQS- tai SNS-lähteen tai kohteen region (tai sen endpoint, kun se on AWS-isäntänimi), tai minkä tahansa kohteen, jonka osoite on AWS-isäntänimi, joka sisältää alueen (sqs.us-east-1.amazonaws.com, API Gateway -URL). Palvelin kieltäytyy käynnistymästä, jos seuraaja tai hälytyswebhook on toisessa alueessa. Liitännäinen, joka osoittaa isäntään, joka ei nimeä aluetta (sairaalan oma järjestelmä, MinIO paikallisverkossa), ei arvioida: tietojen käsittelyn rekisteri tietosuojasivulla listaa jokaisen isäntäkohteen, johon kunkin kanavan käsittely on lähetetty, jotta valvoja voi tarkistaa. Koontinäyttö ja tietosuojasivu kertovat, mihin data voi mennä.

Isäntäpalvelu EU:ssa ja UK:ssa. deploy/hosted sisältää OpenTofu (tai Terraform) yhden isäntäpalvelimen kunkin organisaation käyttöön Frankfurtissa, Irlannissa tai Lontoossa: palvelin, sen PostgreSQL-tietokanta ja varmenteet, varmuuskopio-astiasto, lokit ja tukisessioiden tiedot, kaikki salattuina alueen avaimella, eikä mitään replikoida toiseen alueeseen, tuki vain Session Managerin kautta, ja Perfuse suoritetaan -residency-valinnalla. Sen README kertoo, mitä se rakentaa, mitä se ei kata, mitä on verifioitu (validoitu ja suunniteltu oikean tilin perusteella; ei vielä sovellettu) ja mitä se maksaa jokaisessa alueessa luettelon mukaan.

18.3 Konfiguraatio tiedostoina

Kanavat ovat tiedostoja, mikä tarkoittaa, että ne voidaan tallentaa versiohallintaan, tarkastella ennen käyttöönottoa ja vertailla tapahtuman jälkeen.

Tiedostot luetaan uudelleen ilman uudelleenkäynnistystä. Tiedosto, joka ei parseudu, raportoidaan ja aiemmin ladattu versio jatkaa suorittamista, joten syntaksivirhe ei voi ottaa toimivan syötteen ilmalta.

Kanava, jota on muokattu verkkokäyttöliittymässä, kirjoitetaan takaisin tiedostoon. Jos nämä tiedostot ovat versiohallinnassa, odota muutosten tekemisestä tehtyjä committeja, ja älä muokkaa tiedostoa käsin, kun joku on sitä auki rakentajassa.

18.4 Varmuuskopio

Kaksi asiaa, joita on varmistettava, ja niillä on erilaiset ominaisuudet.

Kanavakansio on pieni, se muuttuu harvoin, ja se on se, mitä tarvitset palvelun uudelleenrakentamiseen. Varmuuskopioi se konfiguraationa; versiohallinta on yleensä riittävä.

Tietokanta sisältää viestit, käyttäjät ja tapahtumahistorian. Se on suuri, se muuttuu jatkuvasti, ja se sisältää kliinisiä tietoja — joten se vaatii varmuuskopioinnin kliinisinä tiedoina, johon sisältyy myös säilytysaika ja salaaminen. Sen menettäminen ei pysäytä palvelua, mutta se menettää kyvyn tutkia mitä tahansa, mikä on jo tapahtunut, ja historian, josta rytmioppi riippuu.

18.5 Käynnistyskäyttäytyminen

Käynnistettäessä kanavat ladataan ja lähteet alkavat kuunnella. Jonotetut toimitukset jatkuvat.

Asia, joka täytyy ymmärtää, on mitä tapahtuu lentävään työhön. Oletusarvoisessa on_delivery vahvistuksessa viesti, jota ei ole vielä vahvistettu, ei vahvisteta, joten lähettäjä lähettää sen uudelleen — mikä on oikea tulos. on_receipt -vahvistuksessa viesti, joka on vahvistettu, mutta ei vielä toimitettu, on jonossa, ja se jatkuu; jos jono on poistettu käytöstä, se katoaa. Katso viestivirta.

18.6 Päivittäminen

Korvaa binääri ja käynnistä uudelleen. Tietokantaskeema siirretään eteenpäin automaattisesti käynnistyksen yhteydessä.

Siirrot ovat vain eteenpäin. Ei ole alaspäin siirtoa, joten edellisen binäärisen jälkeen tapahtuneen skeeman siirtäminen edellyttää edellistä tietokantaa. Ota kopiointi ennen päivittämistä — tämä on ainoa toiminnallinen varotoimi, josta on syytä olla kurinalainen.

18.7 Valvonta

Hälytykset Perfusen sisällä on käsitelty kohdassa alerting ja se kertoo, kun syöte on loppunut.

Ulkopuolelta, valvo prosessia, levyä, jolla tietokanta on, ja vastaako verkkokäyttöliittymä. Tietokanta kasvaa, ja täysi levy pysäyttää viestin tallennuksen, mikä on vikamuoto, jolla ei ole muuta varoitusta.

18.7.1 SNMP

Välineille, jotka tukevat SNMP:ää (Nagios, Zabbix, PRTG, SolarWinds, LibreNMS), Perfuse ajaa vain-luku SNMPv2c-väylän ja lähetää ansan, kun hälytys laukeaa tai ratkeaa. Aseta se Asetukset → Valvonta → SNMP:n kautta tai lipuilla:

perfuse serve -snmp-listen :161 -snmp-community 'long-random-community' -snmp-allow 10.0.5.0/24 \
  -snmp-traps nms.example.org,10.0.5.9:1162

18.7.2 Inventointi jokaisesta liittymästä

-inventory interfaces.md (Asetukset → Valvonta → Inventointi) kirjoittaa Markdown-dokumentin, jossa luetellaan jokainen kanava - sen muoto, onko se käynnissä, mitä se vastaanottaa ja mihin se lähettää - ja seuraavat kunkin kanavan omat kuvaukset, ja kirjoittaa sen uudelleen joka -inventory-every (oletuksena päivä). Se on tarkoitettu liitettäväksi kanavatiedostojen viereen tai annettavaksi tarkastelijalle, ja luettavaksi ilman sovelluksen suorittamista.

18.8 Kapasiteetti

Perfusen läpäisykattoa ei ole mitattu oikealla laitteistolla oikean liikenteen alla, ja tämä käsikirja ei tulosta numeroa, jota se ei voi tukea.

Mitä voidaan sanoa: arkkitehtuuri on yksi goroutine-yhteys kohti, jolla on kohdekohtaiset jonot, joten läpäisy kasvaa kohteiden mukaan eikä ole sarjavoitu yhden työntekijän kautta; viestin tallennus on SQLite-kirjoitus viesti kohden, mikä tekee levyn todennäköisimmäksi ensimmäiseksi rajoitukseksi; ja viestivarasto kasvaa lineaarisesti liikenteen mukaan, joten säilytysaika on asetus, joka määrää pitkän aikavälin levyn käytön.

Jos mitataan suuren syötteen kokoamista varten, mitata se omalla liikenteellä käyttäen generoituja testikorpuksia, kuten kuvattu testauksessa. Se on rehellinen vastaus, ja se on myös parempi vastaus kuin joku toisen laitteiston luku.

18.9 Missä tämä asennus jumittui

Toiminta sisältää paneelin, joka on näkyvissä ylläpitäjille, ja joka näyttää, mitä Perfuse on kieltäytynyt tekemästä — ryhmitelty viestin mukaan, useimmin ensin — ja kuinka pitkällä asennus on edennyt toimivan kanavan luomisessa.

Se on olemassa, koska jokainen muu väite siitä, onko tämä ohjelmisto helppokäyttöinen, tulee ohjelmiston kehittäjiltä. Kieltäytyminen ei ole: joku halusi jotain, palvelin sanoi ei, eikä kumpikaan osapuoli arvannut. Se on ainoa todiste tuotteessa, joka ei tule BioDream LLC:ltä.

Imu nimittää askelen, jota ei ole vielä tapahtunut, eikä jätä aikaleimoja vertailtavaksi. Tilaa, jota kannattaa seurata, on viestit saapuvat, mutta yhtäkään ei ole toimitettu määränpäähän — kanava voi ottaa liikenteen vastaan useiden viikkojen ajan ja toimittaa sitä yhtäkään, ja muilta näytöiltä se näyttää toimivan.

Mitään kirjoitettua ei tallenneta. Taulu sisältää pyynnön reitin, jossa tunnistimet on korvattu {id}:llä, tilan ja palvelimen oman lauseen. Validointiviesti nimeää kentän ja säännön, joka on hyödyllinen osa; arvo, joka rikkoi sääntöä, on usein potilastietoa, ja taulu niistä olisi huonompi vastuu kuin kitka, jonka se mitatti.

Kahden tarkoituksellisen poiston vuoksi. 5xx on virhe tässä ohjelmistossa ja kirjataan jo valmiiksi virheeksi — sekoittaminen kahteen aiheuttaisi, että tapaukset, joissa joku ei voinut selvittää, mitä kirjoittaa, peittäisivät tapaukset, joissa mitään kirjoitettua ei auttanut. Vanhentunut istunto tuottaa 401-sarjan, joka ei kerro mitään käytettävyydestä ja hukuttaisi jokaisen löydön, joka kertoo.

Raportin lukeminen leikkaa taulun viimeisimpiin 5000 riviin. Kieltäytyminen on 4xx-vastaus, joten se kasvaa hitaasti, ja lukeminen on luonnollinen hetki siivota: ei ajastinta eikä mitään, mikä suoritettaisiin, kun kukaan ei katsele.

GET /api/friction palauttaa saman asian kaikille, jotka haluavat lukea sen JSON-muodossa.

18.10 Lokit

Perfuse kirjaa lokit standarditulosteeseen, jonne valvoja tai konttien suoritusaika kerää sen.

Viestotasoinen yksityiskohta menee viestivarastoon lokin sijaan tarkoituksella. Yksi lokirivi per viesti kiireisellä syötteellä on melua, joka peittää rivit, jotka ovat tärkeitä, ja varasto on haettavissa tavoilla, joita lokitiedosto ei ole.

Loki sisältää, mitä varasto ei voi: käynnistys- ja sammutus-, konfiguraatiolataustulokset, kanavatilamuutokset ja virheet, jotka eivät ole attribuutteja tietyn viestin osalta.

18.11 Kahden instanssin suorittaminen

Kaksi tai useampi palvelin voi toimia yhtenä ryhmänä: kun yksi, joka suorittaa syötteen, lopettaa, toinen ottaa sen haltuunsa muutamassa sekunnissa, ja lähettäjän seuraava yritys saavuttaa sen. Ne jakavat yhden PostgreSQL-tietokannan sen sijaan, että kunkin palvelimen olisi oma SQLite-tiedosto, ja ne sopivat keskenään sen kautta, kuka suorittaa mitä.

perfuse serve -db 'postgres://perfuse:SECRET@db.hospital.internal/perfuse?sslmode=verify-full' \
  -cluster active-passive -node-name perfuse-01 -node-address https://perfuse-01.hospital.internal:8443 \
  -data /var/lib/perfuse

Käynnistä kunkin palvelimen samalla tavalla omalla nimellään ja osoitteellaan. Tietokanta-tili tarvitsee luoda taulukkoja ja kerran citext-laajennus (tai järjestelmänvalvoja suorittaa CREATE EXTENSION citext ensin). Kunkin palvelimen omat tiedostot ovat -data: sen lokit, sen solmun tunniste ja sen määritysten kopiot.

Kahden tavan jakaa työ.

Kuka suorittaa mitä, ja ei koskaan kaksi. Jokainen työ on vuokra tietokannassa, joka uusitaan joka viides -cluster-lease: n (15 s oletuksena). Palvelin, joka ei voi uusia sitä (se kaatui, sen verkkoyhteys epäonnistui, tietokanta on yhteyden ulottumattomissa), lopettaa työn itse, kun sen oma kello sanoo, että vuokra on melkein valmis, kolmannen vuokran osan verran. Toinen palvelin ottaa vuokran vasta, kun sen oma kello on katsonut vuokran laskuria seisseen kokonaisen vuokran ajan. Kelloja ei verrata toisiinsa, joten palvelimien kellot ja tietokannan kellot eivät tarvitse olla samaa mieltä; ne tarvitsevat vain toimia noin samalla nopeudella, mikä jokainen kello tekee. Vanhan haltijan lopettamisen ja uuden haltijan aloittamisen välillä on lyhyt aukko, jolloin kukaan ei kuuntele, minkä lähettäjä näkee yhteyden epäonnistumisena ja yrittää uudelleen; ei koskaan ole hetkeä, jolloin kaksi kuuntelee yhdellä syötteellä tai kaksi työntekijää tyhjentää yhtä jonoa.

Palvelin, joka sulkeutuu siististi, tai järjestelmänvalvoja, joka valitsee Siirry alas johtajalta, luovuttaa heti sen sijaan, että odottaa vuokran umpeenmenoa.

Mikä on jaettu jokaisen palvelimen kesken. Viestit, toimitusjono, tilit ja istunnot, audit-loki, FHIR-kauppa, terminologiataulukot ja potilasindeksi ovat tietokannassa, joten kumpi tahansa palvelin, joka ajaa kanavaa, löytää jonon, jonka edellinen jätti. Kanavatiedostot, asetustiedosto, hälytysäännöt, yksittäiset kirjautumistiedostot, logo, Direct-varmenteet ja tallennetut näkymät pidetään samana jokaisella palvelimella tietokannan kautta: kunkin palvelimen omalla levyllä on oma kopiansa, ja muutos missä tahansa palvelimessa (konsolissa, käsin, git pull-kautta) tavoittaa muut palvelimet kahdessa sekunnissa, ja kanava, joka on muutettu toisella palvelimella, käynnistyy uudelleen uudella tiedostollaan. Saman tiedoston muutos kahdella palvelimella samanaikaisesti säilyttää version, joka tavoitti tietokannan ensin, ja toisen version NAME.conflict-SERVER-nimen alla. Asetukset, jotka koskevat vain käynnistystä (viestitietokanta, portit, joille konsoli kuuntelee), ovat voimassa kunkin palvelimen seuraavassa käynnistyksessä, ja lokitila kertoo niistä. Mitä tahansa, mikä nimeää jotakin yhdellä koneella, pysyy kyseisen palvelimen komentorivillä ja poissa jaetusta tiedostosta: varmenne ja avain (-tls-cert, -tls-key), SNMP-kuunteluoite ja palvelimen nimi jäljityksissä. Asetukset näyttävät ne asetuksina kunkin palvelimen mukaan.

Käynnistäminen ja lopettaminen. Kanavan käynnistäminen tai lopettaminen millä tahansa palvelimella koskee kokonaista klusteria: palvelin, joka suorittaa kanavan, käynnistää tai lopettaa sen yhden sekunnin kuluessa, ja vastaus kertoo, mikä palvelin se on.

Latauspalvelin edessä. Syötteen osoitteen on oltava se, joka saavuttaa sen palvelimen, joka ajaa sitä. Osoita lähettäjä virtuaali-osoitteeseen (latauspalvelin, liukuväli-IP, DNS-nimi lyhyellä TTL:llä) ja anna latauspalvelimen tarkistaa /readyz?channel=NAME, joka vastaa 200:lla vain palvelimella, joka ajaa kyseistä kanavaa, ja 503:lla muilla. Konsolille /readyz on 200 jokaisella elävällä palvelimella; /readyz?role=leader vain johtajalla.

AWS-verkkopalkkasääteilijällä käytä kohdekryhmää kunkin syötteen kanssa HTTPS-terveystarkistuksella osoitteessa /readyz?channel=NAME, 5 sekunnin väliajoin ja kynnyksellä 2, ja käytä vyöhykkeiden välistä kuormituksen tasapainotusta. Kun se on pois päältä, lataussääteilijän solmu vyöhykkeessä, jossa ei ole palvelinta, joka suorittaa syötettä, näkee vain epäterveellisiä kohteita, lähettää niille kaikille silti, ja lähettäjä, joka ratkaisi kyseiseen solmuun, odottaa, kunnes syöte palaa vyöhykkeeseensä (95 sekuntia testissä). Aseta rekisteröintidelay 0:ksi, koska palvelin, joka lopettaa syötteen suorittamisen, ei voi tyhjentää mitään.

Mitä on testattu. Kaksi palvelinta PostgreSQL 16:lla, lähettäjä, joka lähettää 300 viestiä, uudelleenlähettää, kunnes vastataan, ja palvelin, joka suorittaa syötteen, tapettiin SIGKILL:llä kahdesti (ensin, sitten toisen jälkeen, kun ensimmäinen tuli takaisin). Jokainen vahvistettu viesti saapui vastaanottajalle, kummassakin muodossa, jota yritettiin: toimitettiin ennen vahvistusta, ja jonossa jaetussa kaupassa, kun vastaanottaja kieltäytyi (185 vahvistettua viestiä odotti jonossa tapauksessa; selviytyjä toimitti ne kaikki). Vaihto kesti 3-4 sekuntia 3 sekunnin vuokrauksella. Moninkertainen on mahdollinen ja nähtiin kerran 600:ssa: viesti, jonka kuoleva palvelin toimitti ja ei voinut vahvistaa, jonka lähettäjä uudelleenlähetti. Koordinaattorin omat testit kattavat kaatumisen, palvelimen, joka on leikattu tietokannasta, kun se suorittaa, siirtymisen, levittämisen ja jaetun konfiguraation ristiriidoilla. Ne suoritetaan CI:ssä PostgreSQL:llä kilpailun havainnitsijalla, koko sarjan kanssa.

Sama tehtiin sitten AWS:llä: kaksi Linux-palvelinta (ARM) ja yksi Windows Server 2022 kolmessa saatavuusvyöhykkeessä, Amazon RDS PostgreSQL 16 yli TLS:in, varmenne tarkistettuna (sslmode=verify-full), sisäinen verkkotasauspalvelin edessä, ja lähettäjät uudelleenlähettävät, kunnes vastataan:

TestiViestitVahvistettu, mutta hävinnytMoninkertaisetPisin aika, jonka lähettäjä odotti
Aktiivinen-passiivinen, palvelin, joka ajaa syötteen, tapettiin kahdesti (Linux, sitten Windows), vastaanottaja kieltäytyi väliin2 0000015 s
Linux-johtaja leikattu tietokannasta (palomuuri), prosessi jätettiin käyntiin3 0000116 s
Windows-johtaja leikattu tietokannasta3 0000020 s
Johtaja tapettiin, kun yhden palvelimen kello oli 2 minuuttia edellä ja toisen 90 sekuntia myöhässä2 0000018 s
Aktiivinen-aktiivinen, neljä syötettä kolmella palvelimella, yksi tapettiin ja palautettiin6 0000224 s

Oletuksena 15 sekunnin vuokrauksella palvelin, joka on leikattu tietokannasta, lopettaa syötteen 10 sekuntia sen jälkeen, kun se on uusittu viimeksi, ja seuraava palvelin käynnistää sen 6-8 sekuntia sen jälkeen: ei koskaan molemmat samanaikaisesti. Kellonajan epätarkkuus ei muuttanut mitään, koska kellonaikaa ei verrata toiseen.

Ei vielä. Klusteri palvelee yhtä organisaatiota: -cluster -multi-tenant -vaihtoehto on evätty. Kuuntelijat siirtyvät kanavansa mukaan, joten tasauspalvelin on sivuston tarjoama.

Palvelin yksinään toimii edelleen samalla tavalla kuin aina, SQLite:llä, ilman klusteria.

18.12 Useampi kuin yksi palvelin

Sivustolla, jolla on kaksi instanssia, on kysymys, jota yksikin konsoli ei voi vastata: onko kaikki käynnissä? Mirth veloittaa vastauksesta. Tämä on laivaston näkymä.

Yksi instanssi on nimetty paikaksi, jonne katsotaan. Se kysyy muilta ja näyttää jokaisen kanavan jokaisella palvelimella yhdessä taulukossa, jossa on yhteenveto kaikista.

18.12.1 Vertaisten lisääminen

Asetukset → Laivue, tai PUT /api/fleet/peers. Peerin on oltava nimi, URL-osoite ja peerin itsensä myöntämä tunniste

Nimi on vaadittu ja se ei ole URL, koska URL ei ole mitään, minkä kukaan tunnistaa kolme aikoihin aamulla.

Token on luotava vastapuolella, Käyttäjien alla, ja sen on oltava katselijan laajuinen. Vastapuolen lisääminen ilman sitä on evätty, ja sen sijaan annetaan ohjeet, eikä sitä hyväksytä ja se ei epäonnistu myöhemmin hiljaisesti jokaisella kyselyllä. Toisen instanssin terveyden lukeminen on pienin etuoikeus, ja se on ainoa, minkä laivaston näkymä tarvitsee.

18.12.2 Peerin hallinta, joka on pois päältä

allow_control sallii kyseisen vastapuolen kanavien käynnistämisen ja lopettamisen täältä. Se on oletuksena pois päältä, ja jokainen käyttö on kirjattu nimellä.

Kaksi etuoikeutta on tietoisesti erillisiä. Toisen palvelimen terveyden lukeminen on vähäpätöistä; sen kanavien lopettaminen siirtymisen aikana ei ole, eikä jälkimmäistä saa ikinä liittää hiljaisesti ensimmäiseen.

18.12.3 Mikä raportissa sanotaan

Jokainen palvelin ilmoittaa kanavien kokonaismäärän, kuinka monta niistä on käynnissä, pysäytetty tai virheellisiä, jonon syvyyden ja vanhimman odottavan viestin iän, kuinka monta hälytystä on aktiivisia, ja onko se on tyhjentymässä sammuttamista varten.

Rullausumman laskurit palvelimia kolmella tavalla: saavutettavissa, saavuttamattomissa ja määrittämättömissä. Kolmas kattaa vertaiset, joiden terveydestä kukaan ei tiedä — eivät vielä kysyneet, kieltäytyvät tunnisteesta tai suorittavat version, jota tämä ei voi lukea. Se pidetään erillään saavuttamattomista, koska "me emme voi sanoa" ei ole "se on alas", ja näiden yhdistäminen on se, miten laivueen sivu alkaa valehdella.

Saman vuoksi rullausumma sisältää tunnettuja: niin monta kappaletta, joista kanava- ja jonotilastot oli todella luettu. Kaksitoista kanavaa, jotka suoritetaan laivueen yli, tarkoittavat jotain muuta, kun kaksi viidestä palvelimesta ei vastannut, ja yhteensä ei voi sanoa sitä.

Saavuttamaton vertainen kertoo syyn, josta operaattori voi toimia. Hylätty yhteys ilmoitetaan isäntänä, joka on ylös, mutta jolla ei ole mitään kuuntelemassa kyseisessä portissa, mikä on eri ongelma kuin isäntä, joka ei vastaa lainkaan.

18.12.4 Kellon viive

Rullausumma ilmoittaa suurimman eron palvelimien kellonaikojen välillä. Se on arvonsa verkossa: korreloimalla tapahtumaa kahden instanssin välillä, joiden kellot ovat eri aikaa neljä minuuttia, tuottaa tapahtumien sarjan, jota ei ole tapahtunut.

18.12.5 Mikä peer oppii sinusta

Määrät ja nopeudet. Raportti, jonka yksi instanssi antaa toiselle, ei sisällä viestitunnisteita, kanavatasoista yksityiskohtia eikä potilastietoja millään tavoin.

Se estää laivueen näkymän olemasta kliinisen datan keskittäminen: aggregoiva instanssi oppii, kuinka monta kanavaa on käynnissä, ja mitään siitä, mitä niiden kautta virtaa. Jos haluat viestit, avaat kyseisen palvelimen oman konsolin, jossa audit-loki merkitsee, että teit sen.

18.12.6 Peer, joka osoittaa itseään

Hylätty. Instanssi, joka kysyy omaa osoitettaan omassa HTTP-pinossa, näkyy kahdesti omassa laivueen näkymässä ja kaksinkertaistaa jokaisen kanavansa.

18.12.7 TLS sisäverkoissa

insecure_skip_verify hyväksyy vertaisen varmenneen ilman sen todentamista. Se on olemassa, koska sairaalan infrastruktuuri toimii yksityisillä varmenneviranomaisilla, ja kieltäytyminen toimimasta kokonaan ajaisi ihmisiä yksinkertaisen HTTP:n käyttöön, mikä on huonompi. Se on nimetty siten, että sitä ei voida sekoittaa hyvään ajatukseen.

19 Komentorivi

Kaikki, mitä Perfuse tekee käynnissä olevaan järjestelmään, on saatavilla web-käyttöliittymästä, ja se on tietoinen suunnittelupäätös: ominaisuus, joka tarvitsee terminaalia, kohdellaan virheenä eikä suunnittelupäätöksenä. Komennot täällä ovat työlle, joka tapahtuu *järjestelmän ympärillä* — ennen kuin se on olemassa, kun päättelyssäsi, voitko luottaa siihen, ja kun sinun on annettava jotain toiselle.

Useista niistä ei koskaan kosketa palvelinta lainkaan. perfuse explain, perfuse profile, perfuse deident ja perfuse translate lukevat tiedostoja ja kirjoittavat tiedostoja, joten ne ovat hyödyllisiä kannettavassa tietokoneessa laitteistoa vastaan, joka edelleen toimii kokonaan jossain muussa.

Suorita mikä tahansa komento -h-valitsimella sen lipuille. Tämä luku kertoo, mihin kunkin tarkoitus on.

Liput, jotka näytetään täällä, ovat havainnollistavia, eivät kattavia. -h on generoitu koodista eikä se voi vanhentua; lippujen luettelo, joka on kopioitu proosaan, voi.

19.1 Kanavien suorittaminen

19.1.1 perfuse serve

Suorittaa web-liittymän ja API:n, ja oletuksena myös kanavat. Tämä on komento, jonka asennus käyttää.

Jokainen valinta, jonka se hyväksyy, on lueteltu Palvelinvalinnat -osiossa, joka on generoitu ohjelmasta. Se kieltäytyy palvelemasta selkeää HTTP:ä muille kuin loopback-osoitteille, ellei -insecure-valintaa anneta. Tämä ei ole mukautuvaa kohteliaisuutta: kliininen liikenne ja istuntotunniste salaamattomassa lähiverkkoyhteydessä on ilmoitettava tapahtuma, ja lippu on olemassa, jotta kyseessä on joku tekemä päätös eikä periytyvä oletusarvo. Katso turvallisuus.

19.1.2 perfuse run

Suorittaa kanavia YAML-tiedostosta ilman web-liittymää ja tietokantaa. Käytännöllinen kontissa, joka pitäisi tehdä vain yksi asia, ja käytännöllinen, kun haluat nähdä kanavan käyttäytymisen ilman mitään muuta suorittamista.

19.1.3 perfuse check

Tarkistaa kanavamäärittelyt ja tulostaa, mitä ne tekevät, ilman niiden suorittamista. Jälkimmäinen on pointti: kanava, joka latautuu, ei välttämättä ole kanava, jota halusit, ja ymmärrettävän summaryn lukeminen siitä, mitä tiedosto tekee, löytää virheen, jonka validointi ei voi nähdä.

Lopettaa epänollaan virheen sattuessa, joten se kuuluu mihin tahansa tarkastuksiin, jotka tarkistavat konfiguraatiotasi ennen kuin ne pääsevät palvelimelle. -quiet tulostaa mitään onnistumisen sattuessa, tätä varten.

-allow-metadata-egress sallii kohteiden osoittamisen pilvipalvelun metatietojen osoitteisiin. Nämä osoitteet sisältävät koneen omat tunnistetiedot, joten kanava, joka voidaan saada lähettämään sinne, on tunnistetietojen vuoto; tarkistus kieltäytyy niistä, ellei toisin valita.

19.1.4 perfuse test

Suorittaa testit, jotka on kirjoitettu kanavamäärittelyjen vastaisesti. Testi lähettää viestin kanavan todellisen suodattimen, todellisten muunnosten ja todellisten skriptien kautta, todellisessa järjestyksessä, vain verkko on korvattu — joten mitä täällä menee läpi, se on kanavan toiminta.

Testit sijaitsevat *_test.yaml tai *.test.yaml -tiedostossa kanavien vieressä. Katso testaus.

19.2 Siirtäminen toisesta moottorista

Nämä kolme ovat ne, jotka suoritetaan ensin, ennen kuin mitään päätetään. Katso siirtäminen.

19.2.1 perfuse explain

Lukee Mirth-, Open Integration Engine- ja BridgeLink-vientejä — kanava, kanavaryhmä tai koko palvelimen varmuuskopio — ja kuvaa, mitä kunkin kanava tekee ja mitä estäisi siirtymisen. Se ei muuta mitään ja ei tarvitse Perfuse-asennusta, mikä tekee siitä edullisimman mahdollisen ensimmäisen askeleen: osoita se omalle viennille ja lue, mitä se palauttaa.

-strict lopettaa epänollaan, jos mitään estetään, joten se voidaan käyttää putken portilla. -json lähettää samat löydökset koneelle.

19.2.2 perfuse translate

Muuttaa Mirth-, Open Integration Engine- ja BridgeLink-vientejä Perfuse-kanavatiedostojen muotoon: yksi kanava, kanavaryhmä, kooditemplaatin vienti tai koko palvelimen varmuuskopio.

perfuse translate -o ./channels server-backup.xml

Kooditempaikkakirjastot kirjoitetaan lib/ -kansioon kanavien vieressä, ja kunkin kanavan Mirthilla oli kirjasto, joka sisältyy siihen. Katso siirtäminen.

Mitään ei hävitetä hiljaisesti. Jokainen osa kanavasta joko käännetään, siirretään skriptinä, joka suoritetaan muuttumattomana, tai ilmoitetaan vaativan ihmisen. Kolmas kategoria on rehellinen — kääntäjä, joka tuottaa puhdas näköisen tiedoston jokaiselle syötteelle, piilottaisi päätökset, joita tarvitset eniten.

19.2.3 perfuse compare

Suorittaa saman liikenteen kahden moottorin läpi ja raportoi, missä ne eroavat, ryhmitelty kenttä kerrallaan.

Tämä on komento, joka vastaa kysymykseen "miksi minun pitäisi luottaa tähän potilastietojen kanssa", ja se vastaa siihen keräämällä näyttöä sen sijaan, että tehtäisiin väite täällä. Se on suositeltu viimeinen vaihe ennen siirtymistä, ja suositeltu ensimmäinen vaihe minkä tahansa keskustelun aloittamiseen siitä, onko Perfuse valmis.

19.3 Ymmärtäminen syötettä

19.3.1 Perfuse-profiili

Lukee viestejä ja raportoi, mitä niissä todella on: mitkä kentät ovat aina täytetty, mitkä eivät koskaan ole, koodatun kentän todelliset arvojoukot, toistomäärät ja mitkä Z-segmentit ilmestyvät.

Arvoja raportoidaan vain kentille, joiden arvot muodostavat pienen koodijoukon, joten todellisen liikenteen profiili ei muutu potilastietojen täyttämäksi tiedostoksi.

Profiilin tallentaminen ja vertaaminen myöhemmin siihen on tapa, jolla selvität, että lähettäjä muutti jotain:

Perfuse-profiili -tallenna edellinen-kuu.json korpus/ Perfuse-profiili -vastaa edellinen-kuu.json uusi/

19.3.2 Perfuse-sopimus

Muuttaa tuon ajattelun tulosta voimaansaattavaksi. Sopimus kertoo, miltä syötteiden on oltava, jotta sinä päivänä, kun se muuttuu, sinä ilmoitetaan siitä, eikä sinun tarvitse kuulla siitä viikkoja myöhemmin vastaanottajalta, joka kaatui — viestit ovat edelleen voimassa olevia HL7-viestejä, kun kenttä katoaa, joten muu ei huomaa.

Perfuse-sopimus edistä -o adt.sopimus.yaml korpus/ Perfuse-sopimus tarkista adt.sopimus.yaml tänään/

promote luo aloituspisteen, ei vastausta. Lue se ja poista suurin osa siitä: jokainen rivi merkitsee, mitä on mitattu tai päätetty, mikä kertoo, mitkä rivit on säilytettävä.

19.4 Viestien tuottaminen

19.4.1 Perfuse tuottaa

Tuottaa synteettisiä HL7 v2 -viestejä. Kaikki on keksitty — selvästi kuvitteelliset nimet, peräkkäiset tunnistimet, keksityt osoitteet — joten tuloste on turvallista lähettää, liittää viestiin ja liittää tikettiin.

Se voi lähettää suoraan kanavaan kirjoittamisen sijaan, mikä on nopein tapa todistaa, että kuuntelija toimii:

Perfuse tuottaa -n 100 -lähettä 127.0.0.1:6661

19.4.2 Perfuse de-identifioi

Lukee todellisia viestejä ja kirjoittaa korpuksen, joka säilyttää niiden rakenteen, koodit ja väliajat, ja mitään, mikä tunnistaa potilaan. Tämä on ero siinä, voitko lähettää jollekulle jäljennöksen ja et.

Se ei ole sama työkalu kuin perfuse generate, ja ero on merkittävä. Generoidut viestit ovat keksittyjä ja siten turvallisia, mutta epärealistisia; de-identifioitu aineisto on *johdettu todellisesta liikenteestä*, joten se toistaa niitä omituisuuksia, jotka todella rikkoavat rajapintoja.

Kaksi ominaisuutta, joita kannattaa ymmärtää ennen sen käyttämistä:

-keep-local-segments välittää Z-segmentit muuttumattomina ja on vaarallinen. Z-segmentit ovat tarkalleen siellä, missä sivustot laittavat nimet, muistiinpanot ja vapaan tekstin, joten niiden säilyttäminen tekee työkalun tarkoituksen turhaksi. Se on olemassa, koska struktuurinen ongelma on joskus *Z-segmentissä*, ja silloin tarvitset aineiston, jota et saa jakaa.

19.5 Viestien siirtäminen käsin

19.5.1 Perfuse kuuntele

Hyväksyy HL7 v2 MLLP:n yli ja vahvistaa sen. Vastaanottaja, joka on olemassa niin kauan kuin sinun tarvitsee, todistaaksesi, että lähettäjä voi tavoittaa tämän koneen lainkaan.

19.5.2 Perfuse lähetys

Lähettää HL7 v2 -viestit MLLP: n kautta tiedostoista.

MLLP: llä ei ole todennusta eikä salausta, ei Perfusessa eikä missään muualla. Molemmat nämä komennot ovat alttiita tälle, ja niin on jokainen MLLP-lähde ja -kohde: pääsy on rajoitettu verkkotason tai se ei ole rajoitettu.

19.6 FHIR

19.6.1 Perfuse FHIR

Muuntaa HL7 v2: n FHIR: ksi, validoi FHIR: n tai palvelee sitä subkomennon mukaan.

Validointialikomento on hyödyllinen ominaisuutena: se kertoo, onko resurssi, jonka joku on lähettänyt sinulle, US Core -profiilin mukainen, joka on profiili, jota amerikkalainen sääntely on kirjoitettu vastaan. Pystyä vastaamaan siihen ilman moottorin omaksumista on pointti.

19.6.2 perfuse x12

Muuntaa X12 (tai muun rajatun EDI): n Mirth Connectin ja Open Integration Engine -kirjoittaman XML: n, ja takaisin: perfuse x12 xml FILE ja perfuse x12 from-xml FILE, vakio syöte ilman tiedostoa. Tuloste on se, mitä OIE 4.6 kirjoittaa, bitti bittien, joten se voidaan verrata siihen, mitä Mirth-palvelin tuotti tai syötti järjestelmään, joka on rakennettu sitä vastaan. Kanava tekee saman x12.arrives_as: xml :n ja kohdekohtaisen x12_as: xml :n kanssa; ks. X12.

19.6.3 Perfuse sof

Suorittaa SQL-kyselyn FHIR ViewDefinition yli FHIR-tiedostojen (NDJSON massaladatun, Bundle tai JSON-joukko; - stdin): -view FILE (vaadittu), -format csv|ndjson|json|parquet (csv oletuksena), -header=false ja -o FILE (vaadittu Parquet-tiedostolle). Katso SQL on FHIR-näkymät.

19.6.4 Perfuse mittaus

Arvioi laadun mittausta FHIRPath-kriteerien avulla FHIR-tiedostojen yli (NDJSON massavirheen, Bundle- tai JSON-taulukot; - merkki standarditulosteen sijaan) ja kirjoittaa MeasureReportin. Liput:

Katso digitaaliset laadun mittaukset.

19.6.5 FHIR-liput Perfuse-palvelimella

LipukeVaikutus
-fhirTarjoa FHIR-päätepiste osoitteessa /fhir. Oletuksena päällä.
-fhir-versionJulkaistu versio. Oletuksena R4.
-fhir-read-onlyKieltäydy kirjoittamasta.
-fhir-api-tokensSMART-konfiguraation kanssa, hyväksy Perfuse API -tokenit SMART-tokenien lisäksi (oletuksena pois; myös Asetukset → FHIR).
-fhir-bulk-exportOta käyttöön $export. Oletuksena pois.
-fhir-subscriptionsOta käyttöön aiheen tilaukset: tapaamis- ja vastaanottoilmoitukset FHIR-asiakasohjelmien valitsemille päätepisteille. Oletuksena pois; vaatii R4:n ja kirjoitettavan päätepisteen.
-fhir-subscriptions-allow-httpSalli tilauksien toimittaminen selkeän http:n kautta. Vain testivastaanottimelle, ei koskaan potilastietojen verkossa.
-fhir-patient-directory-searchSalli tokenin, joka on rajoitettu yhteen potilaaseen, etsiä hakemistoa (ammattihenkilöt, organisaatiot, sijainnit), sen piiriin. Oletuksena pois.
-fhir-declaresOpastaa tätä palvelinta julistamaan sen ominaisuuslauseessa, pilkuilla eroteltu: opaan CapabilityStatement-osoite tai Type=profile-osoite. Lausuma asiakkaille ja testauskokeille; se ei muuta mitään, mitä varasto hyväksyy.

Varasto pitää asiakirjoja sekä resursseja: asiakirja, kokoelma tai viestipaketti Bundle, joka on asetettu /fhir/Bundle/{id}:iin, säilytetään kokonaisuutena, luetaan takaisin jokaisen sisäänkirjautumisen kanssa julkaistussa versiossa ja löydetään type, identifier, timestamp ja composition avulla. Transaktio, joka on asetettu sinne, säilytetään tallenteena eikä sovelleta; POST /fhir:iin soveltaa yhden.

Vastaukset ovat JSON-muodossa, ellei asiakas pyydä XML:ää (Accept: application/fhir+xml tai _format=xml). Perfuse lukee vain JSON:ia: XML-muodossa lähetetty runko saa 415. Asiakirja-bundle, joka lähetetään POST-pyynnöllä /fhir-sivulle, säilytetään, kun palvelin pitää, tunnisteella, potilaan ja kohtaamisen, jonka koostus nimeää, ja se hylätään 422-virheellä muutoin. Binääri, joka luetaan Accept-arvon ollessa sen oma sisältötyyppi, vastaa sisällön itsensä kanssa.

19.7 Asetukset ja toiminta

19.7.1 Perfuse alku

Luo hakemistorakenteen, esimerkki-kanavan ja palvelumääritelmän käyttöjärjestelmälle, jolla se suoritetaan. Mitään olemassa olevaa ei korvata, ellei -force-valintaa ole annettu.

Perfuse alku -hakemisto /opt/perfuse -palvelu systemd

19.7.2 Perfuse-palvelu

Rekisteröi Perfusen Windows-palveluna, poistaa sen tai raportoi, onko se asennettu ja käynnissä. Vain Windows; Linuxissa vastaava on yksikkötiedosto, jonka perfuse init voi kirjoittaa puolestasi. Katso operations.

19.7.3 Perfuse-merkki

Myöntää koneille tarkoitetut tunnistetiedot, ei ihmisille. Merkki ei vanhene eikä se ole vaikuttunut kenenkään kirjautumisesta ulos, mikä on se, mitä palvelimen naapuriin kysyvälle palvelimelle tarvitaan ja mikä on tarkoituksella selainistunnossa.

Perfuse-merkki luo -tietokanta perfuse.db -etiketti laivasto-sivustolta -rooli katselija Perfuse-merkki lista -tietokanta perfuse.db Perfuse-merkki peruuta -tietokanta perfuse.db -etiketti laivasto-sivustolta

Vain tiiviste tallennetaan, joten tokeni näytetään kerran, kun se luodaan, eikä sitä voida palauttaa myöhemmin. Varastettu tietokanta ei siis tuota käytettävissä olevaa tokenia. Anna tokenille alin rooli, joka tekee työn: laivueen näkymä tarvitsee viewer, ja mitään, joka lukee vain, ei pidä pitää mitään enempää.

-fhir-groups riverside-attributed,riverside-north rajoittaa tokenin näihin FHIR-ryhmiin CMS-0057 Provider Access -vientiä varten: FHIR-päätepisteessä se voi lukea nämä ryhmät ja viedä ne, ja mitään muuta. Katso CMS-0057 maksajille.

19.7.4 Perfuse athena

Tulostaa Amazon Athenan CREATE EXTERNAL TABLE -kyselyn S3-arkistolle, joka on kirjoitettu format: ndjson -muodossa ja joka käyttää ositusta dt=YYYY-MM-DD -osaa avaimesta, jotta mitään ryntäystä ei tarvitse suorittaa, kun päiviä lisätään.

Perfuse athena -bucket sairaala-arkisto -destination arkisto

Tulostetaan sen sijaan, että suoritettaisiin, koska taulun luominen vaatii Athenan ja Gluen oikeudet, joita tämä ohjelma ei pitäisi omistaa.

19.7.5 Perfuse sbom

Luettelee kaiken, mikä on linkitetty binääriin, luettu itse rakennuksesta eikä go.mod -tiedostosta — joten se kuvaa binääriä, joka on edessä, eikä sitä, mitä joku on kerran pyytänyt.

-json lähettää CycloneDX:n ja -spdx lähettää SPDX-merkkiarvon, joka on yleensä se, mitä hankinta- tai tietoturvakatselu todella pyytää. Selainkoodi, joka on upotettu binääriin, on mukana, koska katselija, joka vertaa binääriä varoituksiin, tarvitsee tietää, että se sisältää React-sovelluksen.

19.7.6 Perfuse versio

Tulostaa version ja commitin, josta se on rakennettu. Arvoinen mainita lipussa: "nykyinen" ei ole versio, ja kaksi konetta, jotka asennettiin viikko toisensa jälkeen, eivät usein suorita samaa rakennusta.

20 Palvelinvalinnat

Jokainen valinta, jonka perfuse serve ottaa, generoitu itse ohjelmasta, joten tämä luetteloa ei voi nimetä valintaa, jota ei ole olemassa, tai jättää yhtä pois. Useimmat ovat myös asetus verkkokäyttöliittymässä, nimetty viimeisessä sarakkeessa: arvo, joka on tallennettu siellä, voittaa lippua seuraavassa käynnissä, ja lippu on edelleen tapa asettaa se palvelun määritelmästä.

Salaisuuksia ei koskaan ole lipuksia. Valinta, joka tarvitsee salasanan tai tunnuksen, nimeää ympäristömuuttujan, joka pitää sitä.

20.1 Kaikki valinnat

OptionTakesDefaultWhat it doesIn the console
-addrstring127.0.0.1:8080, or 127.0.0.1:8443 with -tls-certaddress to serve the interface on—
-alert-severitystringwarningminimum severity to send to the webhook: warning or criticalSettings › Alerts › Delivery: Only send alerts at least this serious
-alert-webhookstring—POST alerts to this URL as JSON. Works with Slack, Teams, Mattermost, Alertmanager or anything that accepts a webhook. The payload carries channel names, counts and thresholds; never message contentSettings › Alerts › Delivery: Send alerts to this address
-alertsstring—YAML file of alert rules. Default: alerts.yaml beside the database, written when the rules are first saved in the console; until then a conservative default set is used—
-allow-metadata-egresson/off—permit destinations pointed at cloud instance metadata addresses, which hold this machine's credentialsSettings › Security › What may leave: Allow destinations at cloud instance metadata addresses
-cds-clientsstring—the EHRs trusted to call the CDS services with signed JWTs (issuer and jwks_url)Settings › Payers › Prior authorization: EHRs trusted to call the CDS services
-channelsstring./channelsdirectory holding channel files—
-clusterstring—share the work with other servers on the same PostgreSQL -db: active-passive (one runs everything, another takes over when it stops) or active-active (channels spread over all)—
-cluster-leaseduration15show long a crashed server holds its work before another takes it over; renewed five times as often—
-crd-advisor-castring—a PEM file of certificate authorities to trust for -crd-advisor-url beside the system's (Vaglio's is its DATA/tls/ca.crt)Settings › Payers › Decision service: Certificate authorities to trust for the advice service
-crd-advisor-token-envstring—name of an environment variable holding a bearer token for -crd-advisor-url (the token itself is never a flag)Settings › Payers › Decision service: Environment variable holding the advice service's token
-crd-advisor-urlstring—with -crd-rules, ask the decision service at this URL (such as Vaglio's /api/pas/advise) what a prior authorization request for each order needing one would be told as the record stands, shown as one more CRD card; the prefetched record is POSTed to it. No answer, or any failure, leaves the cards as they are without itSettings › Payers › Decision service: Advice before submitting (CRD)
-crd-rulesstring—a Da Vinci CRD rules file: serve coverage requirements over CDS Hooks at /cds-servicesSettings › Payers › Prior authorization: Coverage rules file (Da Vinci CRD)
-dashboardsstring—a file mapping directory groups and roles to the dashboard each opens onSettings › Monitoring › Dashboards: Which dashboard each group opens on (file)
-datastring—directory for this server's own files (settings, alerts, sign-in configuration, the log): default beside -db when it is a file, the current directory when it is a PostgreSQL URL—
-davinci-versionstring2.2the Da Vinci CRD, DTR and PAS release answered when neither a request nor its client's registration says: 2.2 (CRD 2.2.1, DTR 2.2.0, PAS 2.2.1) or 2.1 (2.1.0)—
-dbstring./perfuse.dbdatabase for users, messages and stored resources: a file, or a postgres:// URL for servers that share one store (a cluster)—
-demo-accountstring—for a public demonstration server: username:password of a shared viewer account shown on the sign-in page—
-dicomweb-archivestring—keep imaging objects in this directory and serve them over DICOMweb (QIDO-RS, WADO-RS, WADO-URI, STOW-RS) at /dicomwebSettings › Data › Imaging archive: Keep images in this folder and serve them over DICOMweb
-dicomweb-corsstring—comma-separated browser origins, such as an OHIF viewer's, allowed to call /dicomwebSettings › Data › Imaging archive: Browser origins allowed to call it
-drain-forduration—after SIGTERM, report not-ready for this long before shutting down (for rolling deploys)Settings › Engine › Shutdown: Wait for in-flight messages on shutdown
-ecr-agencystring—play a public health agency for testing eCR: answer case reports at $process-message with a Reportability Response, using the agency YAML file given (name, phone, address, endpoint; optional rctc, reply)Settings › Public health › Case reporting: Act as a test public health agency
-ecr-responseson/off—accept eCR Reportability Responses at the FHIR endpoint's $process-message, storing each as DocumentReference/<id> derived from the eICR it answersSettings › Public health › Case reporting: Receive Reportability Responses
-engineon/offtruerun the channel engine in this process, so the interface can start, stop and monitor channels—
-epa-payer-idstring—this payer's identifier on the prescribing network, the From of every RTPB and ePA response (default: the formulary's payer id)Settings › Payers › Drug formulary: Payer ID on the prescribing network
-epa-reply-channelstring—route ePA decisions made after the request was answered (a reviewer's, an appeal's) to this channel, which delivers them to the prescriber's networkSettings › Payers › Drug formulary: Channel that sends later ePA decisions
-fhiron/offtrueserve a FHIR endpoint at /fhirSettings › FHIR › The FHIR server: Serve a FHIR endpoint at /fhir
-fhir-api-tokenson/off—with SMART configured, accept Perfuse API tokens on the FHIR endpoint as well (unscoped; the console's FHIR settings can switch it)Settings › FHIR › Access: Accept Perfuse API tokens beside SMART tokens
-fhir-bulk-exporton/off—enable $export, which produces a file holding every record the FHIR endpoint servesSettings › FHIR › Bulk data: Bulk Data export ($export)
-fhir-declaresstring—guides this FHIR server declares in its capability statement, comma-separated: a CapabilityStatement address, or Type=profile addressSettings › FHIR › Capability statement: Guides this server declares
-fhir-max-resourcesint—for a public server: refuse new FHIR resources once this many are held (0: no limit)Settings › FHIR › Access: Most resources held
-fhir-member-match-without-consenton/off—let $member-match answer without an active Consent; the Payer-to-Payer API is opt-in, so only for testingSettings › Payers › CMS-0057-F: Answer $member-match without the member's consent
-fhir-openon/off—serve the FHIR endpoint with no authentication at all, exposing every stored recordSettings › FHIR › Access: Let anyone read the FHIR endpoint without signing in
-fhir-patient-directory-searchon/off—let a token limited to one patient search the directory (practitioners, organisations, locations) within its scopesSettings › FHIR › Access: Let a patient's app search the directory
-fhir-payer-apison/off—enable the CMS-0057 payer operations: $member-match (Payer-to-Payer) and Group $davinci-data-export (Provider Access); the Group exports also need -fhir-bulk-exportSettings › Payers › CMS-0057-F: The CMS-0057-F payer APIs
-fhir-read-onlyon/off—refuse writes to the FHIR endpointSettings › FHIR › Access: Refuse writes to the FHIR endpoint
-fhir-subscriptionson/off—enable topic-based subscriptions, which send encounter and appointment notifications to URLs FHIR clients chooseSettings › FHIR › Notifications: FHIR subscriptions (encounter and appointment notifications)
-fhir-subscriptions-allow-httpon/off—let subscriptions deliver to plain-http endpoints; for a test receiver, never for patient data on a networkSettings › FHIR › Notifications: Allow subscriptions to notify plain-HTTP addresses
-fhir-versionstring4.0.1FHIR release to serve: R4, R4B or R5Settings › FHIR › The FHIR server: FHIR version clients see
-fhir-writes-per-minuteint—for a public server: writes one client address may make to the FHIR endpoint a minute (0: no limit)Settings › FHIR › Access: Writes a minute from one client
-fleet-labelstring—how this instance names itself in a fleet view (default: hostname)Settings › Fleet › This server: Name for this server
-formularystring—publish this drug formulary over the Da Vinci US Drug Formulary API at /formulary/fhir and answer NCPDP Real-Time Prescription Benefit and SCRIPT electronic prior authorization from itSettings › Payers › Drug formulary: Drug formulary file
-icd11-client-idstring—a WHO ICD API client: ICD-11 codes not imported are looked up thereSettings › Data › Code systems: WHO ICD API client ID
-icd11-client-secretstring—the WHO ICD API client's secretSettings › Data › Code systems: WHO ICD API client secret
-icd11-releasestring2025-01the ICD-11 MMS release the WHO ICD API is asked aboutSettings › Data › Code systems: ICD-11 release to ask for
-icd11-urlstring—the ICD API's address when it is not the WHO's: the WHO's ICD-API container on your network needs no clientSettings › Data › Code systems: ICD API address
-index-identityon/offtrueindex patient identifiers from message contents so a message can be found by MRN, name or accession in any format; has no effect when -store-payloads is offSettings › Data › What is kept: Index patient identifiers
-insecureon/off—serve over plain HTTP on a non-loopback address (not recommended)—
-inventorystring—write a Markdown inventory of every interface to this file, and keep it currentSettings › Monitoring › Inventory: Write an interface inventory to
-inventory-everyduration24h0m0show often to rewrite the interface inventorySettings › Monitoring › Inventory: Rewrite the inventory every
-json-logson/off—emit structured JSON logsSettings › Monitoring › Logging: Write logs as JSON
-ldapstring—YAML file configuring directory (LDAP) sign-in (default: ldap.yaml beside the database, once saved in the console)—
-log-filestring—append the log, and the first administrator's one-time password, to this file (mode 0600) instead of the console. A Windows service has no console, so there it defaults to perfuse.log beside the database—
-mcpon/off—serve the Model Context Protocol at /mcp, so AI agents with an API token can read status, messages, the queue, alerts and the FHIR store with that token's own accessSettings › Security › AI agents (MCP): Let AI agents connect over MCP
-measure-reporterstringPerfusethe reporting organisation's name on MeasureReports from $evaluate-measure when the request names no reporter—
-metrics-openon/off—serve /metrics to anybody who can reach the port. Only safe where that port is genuinely private: metric labels name your channels, and on a multi-tenant server they name every tenant'sSettings › Security › Metrics: Serve /metrics without a token
-metrics-tokenstring—credential the Prometheus scrape endpoint requires. Give the scraper the same value in bearer_token_file. Without this, only a signed-in operator can read /metricsSettings › Security › Metrics: Token a metrics scraper presents
-mpion/off—keep a patient index (master patient index) in mpi.db beside the database: patient records from every system linked into one enterprise identifier per person, fed by mpi destinations and the PIX v3 identity feed, answering Patient/$match, PIXm, PIX v3 (/pixv3) and PDQ v3 (/pdqv3)Settings › Data › Patient index: Keep a patient index
-multi-tenanton/off—keep each tenant's channels in their own subdirectory of -channels, so one server can run integration for several organisations without them being able to see each other—
-node-addressstring—this server's console URL as the other servers and a load balancer reach it—
-node-namestring—this server's name in the cluster (default: an id kept in -data)—
-oidcstring—YAML file configuring OpenID Connect sign-in (default: oidc.yaml beside the database, once saved in the console)—
-pason/off—serve Da Vinci PAS 2.2.1 and 2.1.0 (Claim/$submit, $inquire, $decide) on the FHIR endpoint; decisions come from -crd-rules, and what no rule decides is pended for a reviewer. With -fhir-subscriptions, the PAS topic delivers each pended request's resultSettings › Payers › Prior authorization: Da Vinci PAS prior authorization server
-pas-278-castring—a PEM file of certificate authorities to trust for the UM system beside the system'sSettings › Payers › Utilization management link: Certificate authorities to trust for the UM system
-pas-278-certstring—a PEM client certificate for X.509 mutual TLS with the UM system (CORE's authentication)Settings › Payers › Utilization management link: Client certificate file
-pas-278-core-receiverstring—the CORE envelope's ReceiverID, as the UM system's connectivity guide gives it (default: -pas-278-receiver)Settings › Payers › Utilization management link: CORE envelope ReceiverID
-pas-278-core-rule-versionstring—what to write in the CORE envelope's CORERuleVersion when the UM system's guide asks for something other than the version itself (CMS esMD's sample says v2.2.0)Settings › Payers › Utilization management link: CORERuleVersion written in the envelope
-pas-278-core-senderstring—the CORE envelope's SenderID, as the UM system's connectivity guide gives it (default: -pas-278-sender)Settings › Payers › Utilization management link: CORE envelope SenderID
-pas-278-core-versionstring2.2.0the CAQH CORE Connectivity Rule the UM system runs, for core-soap and core-mime: 2.2.0 (payload in the envelope) or C4.0.0 (payload as an MTOM attachment; SOAP only)Settings › Payers › Utilization management link: CAQH CORE Connectivity Rule
-pas-278-keystring—the private key (PEM) for -pas-278-certSettings › Payers › Utilization management link: Client certificate key file
-pas-278-oauth-client-idstring—the OAuth client ID for -pas-278-oauth-token-urlSettings › Payers › Utilization management link: OAuth client ID
-pas-278-oauth-scopestring—the scope asked for with the OAuth token, when the UM system wants oneSettings › Payers › Utilization management link: OAuth scope
-pas-278-oauth-secret-envstring—name of an environment variable holding the OAuth client secret (the secret itself is never a flag)Settings › Payers › Utilization management link: Environment variable holding the OAuth client secret
-pas-278-oauth-token-urlstring—an OAuth 2.0 token endpoint: a token got with the client-credentials grant is sent as a bearer token (CORE vC4.0.0's authorization)Settings › Payers › Utilization management link: OAuth token endpoint
-pas-278-password-envstring—name of an environment variable holding the password for -pas-278-user (the password itself is never a flag)Settings › Payers › Utilization management link: Environment variable holding the password
-pas-278-payer-idstring—the UMO's payer ID (NM1*X3) when the request's insurer carries no identifierSettings › Payers › Utilization management link: Payer ID for the 278s
-pas-278-productionon/off—mark the 278s sent as production (ISA15 P) rather than testSettings › Payers › Utilization management link: Mark the 278s as production
-pas-278-receiverstring—ISA08/GS03 receiver ID on the 278s sent to the UM systemSettings › Payers › Utilization management link: Receiver ID on the 278s
-pas-278-senderstringPERFUSEISA06/GS02 sender ID on the 278s sent to the UM systemSettings › Payers › Utilization management link: Sender ID on the 278s
-pas-278-sftpstring—host:port of the UM system's SFTP server, for -pas-278-transport sftpSettings › Payers › Utilization management link: SFTP server
-pas-278-sftp-everyduration1m0show often the SFTP inbound folder is readSettings › Payers › Utilization management link: Read the SFTP inbound folder every
-pas-278-sftp-inboundstring—the SFTP folder the UM system's 278 responses, 999s and TA1s are collected fromSettings › Payers › Utilization management link: SFTP inbound folder
-pas-278-sftp-keystring—an OpenSSH private key file for the SFTP user, instead of a passwordSettings › Payers › Utilization management link: SFTP key file
-pas-278-sftp-known-hostsstring—an OpenSSH known_hosts file holding the SFTP server's key; required, so requests never go to whoever answersSettings › Payers › Utilization management link: SFTP known_hosts file
-pas-278-sftp-outboundstring—the SFTP folder the 278 requests (and the 999s for the answers) are put inSettings › Payers › Utilization management link: SFTP outbound folder
-pas-278-sftp-password-envstring—name of an environment variable holding the SFTP password (the password itself is never a flag)Settings › Payers › Utilization management link: Environment variable holding the SFTP password
-pas-278-sftp-userstring—the SFTP user nameSettings › Payers › Utilization management link: SFTP user
-pas-278-token-envstring—name of an environment variable holding a bearer token for the UM system (the token itself is never a flag)Settings › Payers › Utilization management link: Environment variable holding the token
-pas-278-transportstringx12how the 278s reach the UM system: x12 (POSTed as application/edi-x12), core-soap (a CAQH CORE SOAP envelope), core-mime (CAQH CORE HTTP MIME multipart), or sftp (batch files over -pas-278-sftp, answers collected from its inbound folder)Settings › Payers › Utilization management link: How the 278s travel
-pas-278-urlstring—forward every PAS request to the payer's utilization management system as an X12 278 request sent to this URL (by -pas-278-transport), and answer with its 278 response; later 278 responses go to Claim/$decide-278Settings › Payers › Utilization management link: Send PAS requests on to the UM system at
-pas-278-userstring—user name for the UM system: CORE's UserName (WS-Security UsernameToken in SOAP), or HTTP Basic for x12Settings › Payers › Utilization management link: User name
-pas-decider-castring—a PEM file of certificate authorities to trust for -pas-decider-url beside the system's, such as the payer's own authority or the decision service's (Vaglio's is its DATA/tls/ca.crt)Settings › Payers › Decision service: Certificate authorities to trust for the decision service
-pas-decider-token-envstring—name of an environment variable holding a bearer token for -pas-decider-url (the token itself is never a flag)Settings › Payers › Decision service: Environment variable holding the decision service's token
-pas-decider-urlstring—ask the decision service at this URL (such as Vaglio) to decide each PAS item on the request's clinical evidence, when -crd-rules leave it to a reviewer; the PAS request Bundle is POSTed to it. Cannot be combined with -pas-278-urlSettings › Payers › Decision service: Decision service URL
-passkey-allowed-modelsstring—comma-separated authenticator AAGUIDs that may enrol; requires -passkey-attestation-roots—
-passkey-attestation-rootsstring—a PEM file of authenticator vendor certificates; passkey attestation is verified against these—
-passkey-domainstring—the bare domain passkeys are registered for, such as perfuse.example.org. No scheme, no port, no path. Setting it turns passkeys on; leaving it empty leaves them offSettings › Sign-in › Passkeys: Domain passkeys are bound to
-passkey-namestringPerfusethe name an authenticator shows a person when they register a passkeySettings › Sign-in › Passkeys: Name shown on the device
-passkey-originsstring—comma-separated origins the console is reached at, with scheme and port: https://perfuse.example.org. Defaults to https:// plus the domainSettings › Sign-in › Passkeys: Other origins passkeys are accepted from
-peersstring—YAML file listing other Perfuse instances to show in a fleet viewSettings › Fleet › Fleet: Other Perfuse servers to show (file)
-public-urlstring—the https address patients' phones and other organisations reach this server at, for the SMART Health Links it hosts (default: the listen address)Settings › FHIR › The FHIR server: Address others reach this server at
-rctcstring—eCR trigger codes for the case report preview: a FHIR ValueSet or Bundle of them, such as the eRSDSettings › Public health › Case reporting: Trigger codes file (RCTC or eRSD)
-residencystring—cloud regions this server's data may go to or come from: areas (eea, uk, ch) and region codes (eu-central-1), comma-separated; channels with connectors elsewhere are refusedSettings › Data › Data protection: Where data may go (cloud regions)
-retention-daysint30how long to keep recorded messages; 0 keeps them for ever, which will eventually fill the diskSettings › Data › How long it is kept: Delete records after
-samlstring—YAML file configuring SAML 2.0 sign-in (default: saml.yaml beside the database, once saved in the console)—
-scimon/off—accept SCIM 2.0 provisioning from an identity provider at /scim/v2. Okta, Entra ID and Google Workspace use it to create accounts and, more importantly, to disable them when somebody leavesSettings › Sign-in › Automatic accounts: Let the identity provider manage accounts
-scim-default-rolestringviewerrole for an account the identity provider does not describe. Defaults downward on purpose: an account whose role could not be determined should be able to read and nothing else—
-settingsstring—settings file the web interface may edit (default: perfuse-settings.yaml beside the database)—
-shl-allow-httpon/off—let a received SMART Health Link point at plain HTTP; for testing onlySettings › Public health › Health links: Allow SMART Health Links over plain HTTP
-signing-certstring—certificate for signing documents (defaults to -tls-cert)Settings › Security › Document signing: Certificate for signing documents
-signing-keystring—key for signing documents (defaults to -tls-key)Settings › Security › Document signing: Key for signing documents
-smart-audiencestring—the audience a SMART token must be issued for, normally the FHIR base URLSettings › SMART › Authorization: Audience tokens must name
-smart-authorizestring—the authorization endpoint to advertise to SMART appsSettings › SMART › Authorization: Authorization endpoint
-smart-backend-serviceson/off—advertise that the SMART authorization server issues backend-services (client_credentials, signed JWT) tokensSettings › SMART › Built-in server: Backend Services (system-to-system tokens)
-smart-clientsstring—run Perfuse's own SMART authorization server at /auth for the apps registered in this YAML fileSettings › SMART › Built-in server: Registered apps file (turns on the built-in server)
-smart-issuerstring—accept SMART on FHIR access tokens from this authorization serverSettings › SMART › Authorization: Accept SMART access tokens from this authorization server
-smart-jwksstring—where to fetch the SMART issuer's signing keys, when not from its published metadata (split DNS, a private address)Settings › SMART › Authorization: Key set file
-smart-jwks-uristring—the authorization server's public key set URL, advertised to SMART apps (needed to claim OpenID Connect sign-in)Settings › SMART › Authorization: Key set address
-smart-keystringsmart-signing.keythe built-in authorization server's RSA signing key (PEM, mode 0600), created if missingSettings › SMART › Built-in server: Signing key file
-smart-oidcstring—with -smart-users, let people sign in at this OpenID Connect provider (YAML: issuer, client_id, client_secret_file or client_secret_env, label); each is linked by oidc_subjectSettings › SMART › Built-in server: Sign people in through the OpenID Connect provider
-smart-tokenstring—the token endpoint to advertise to SMART appsSettings › SMART › Authorization: Token endpoint
-smart-usersstring—with -smart-clients, the people who may sign in to authorize apps (YAML: username, password_hash, fhir_user)Settings › SMART › Built-in server: People who sign in to authorize apps (file)
-snmp-allowstring—comma-separated networks or addresses the SNMP agent answers, such as 10.0.5.0/24; required with -snmp-listenSettings › Monitoring › SNMP: Networks that may ask
-snmp-base-oidstring1.3.6.1.4.1.8072.9999.9999.16, Net-SNMP's experimental spacewhere Perfuse's values sit, under your enterprise numberSettings › Monitoring › SNMP: Base OID
-snmp-communitystring—the SNMPv2c community (a password sent in clear: at least 6 characters, not public or private)Settings › Monitoring › SNMP: SNMP community
-snmp-contactstring—sysContact the SNMP agent reportsSettings › Monitoring › SNMP: Contact (sysContact)
-snmp-listenstring—answer SNMPv2c GET/GETNEXT/GETBULK on this UDP address, such as :161 (off when empty). Read-only: channel states, counts and queue depthsSettings › Monitoring › SNMP: Answer SNMP on this address
-snmp-locationstring—sysLocation the SNMP agent reportsSettings › Monitoring › SNMP: Location (sysLocation)
-snmp-trapsstring—comma-separated managers (host or host:port, default port 162) that receive an SNMPv2 trap when an alert fires or resolvesSettings › Monitoring › SNMP: Send traps to
-store-messageson/offtruerecord every message handled, which is what makes the message browser workSettings › Data › What is kept: Keep a record of each message
-store-payloadson/offtruestore message contents as well as their outcomes; turn this off where PHI must not be held at restSettings › Data › What is kept: Keep message contents
-tls-certstring—TLS certificate fileSettings › Security › Encryption: TLS certificate file
-tls-keystring—TLS private key fileSettings › Security › Encryption: TLS private key file
-trace-endpointstring—OTLP/HTTP base URL to export message traces to, for example http://localhost:4318Settings › Monitoring › Tracing: Send traces to
-trace-instancestring—name for this instance in traces; defaults to the hostname, which is what distinguishes replicasSettings › Monitoring › Tracing: This instance's name in traces
-trace-samplefloat1fraction of traces to record, 0 to 1—
-tsa-urlstring—RFC 3161 time-stamping authority for DSDR signatures on claims attachmentsSettings › Security › Document signing: Time-stamping authority
-vpnstring—partner VPN tunnels to report on the Connections dashboard (YAML: AWS Site-to-Site VPN, Azure VPN Gateway or strongSwan, and both sides' settings); see examples/vpn.yamlSettings › Monitoring › Connections: VPN tunnels to watch (file)
-watch-accesson/offtruewatch traffic and reads of patient data for what a breach looks like (bursts, night traffic, new destinations, bulk reads) and raise alerts—
-xdsstring—keep clinical documents here as an IHE XDS.b registry and repository with this repository uniqueId (an OID), answering ITI-41, ITI-42, ITI-18 and ITI-43 at /xds/repository and /xds/registrySettings › Data › Document sharing (IHE XDS): Keep documents here as an XDS registry and repository
-xds-home-communitystring—this community's home community id (urn:oid:...), so /xca/gateway answers XCA ITI-38 and ITI-39 for itSettings › Data › Document sharing (IHE XDS): Home community id, for XCA

21 Kanavaviite

Jokainen avain, joka voidaan esittää kanavatiedoston ylimmällä tasolla. Nämä poimitaan lähdekohteesta, joten tämä luku ei voi kuvata valintaa, jota ei ole olemassa, tai jättää yhtä pois.

21.1 Kanava

Kanava on yksi konfiguroidtu viestivirta: jonne viestit saapuvat, valinnainen suodatin ja yksi tai useampi paikka, jonne ne menevät.

Määritelty Channel-nimisenä internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
nametekstikyllä—
descriptiontekstiei—
grouptekstiei—
attachmentsLiitteet (lohko, jätä pois, jos ei käytössä)ei—
delimitedRajattu (lohko, jätä pois, jos ei käytössä)ei—
tablesluettelo teksteistäei—
contractContractRef (lohko, jätä pois, jos ei käytössä)ei—
enabledtosi tai epätosi (lohko, jätä pois, jos ei käytössä)ei—
dataTypeDataTypeeihl7
hl7v3HL7v3Options (lohko, jätä pois, jos ei käytössä)ei—
x12X12Options (lohko, jätä pois, jos ei käytössä)ei—
ncpdpNCPDPOptions (lohko, jätä pois, jos ei käytössä)ei—
edifactEDIFACTOptions (lohko, jätä pois, jos ei käytössä)ei—
scriptScriptOptions (lohko, jätä pois, jos ei käytössä)ei—
dicomDICOMOptions (lohko, jätä pois, jos ei käytössä)ei—
sourceLähdekyllä—
filtertekstiei—
transformationsluettelo transform.Stepei—
scriptsScriptit (lohko, jätä pois, jos ei käytössä)ei—
shadowVarjokuva (lohko, jätä pois, jos ei käytössä)ei—
destinationsluettelo Destinationkyllä—

21.1.1 nimi

Nimi tunnistaa kanavan lokit ja mittaukset.

Vaadittu ja yksilöivä.

21.1.2 ryhmä

Ryhmä on se, mihin tämä kanava kuuluu, järjestelmän kanavien luettelointia varten, joka on kasvanut liian pitkäksi.

Kosmeettinen viidellä kanavalla ja rakenteellinen kahdellasadalla: sivuston kanavat jakautuvat järjestelmien mukaan, joille ne puhuvat, tai tiimin mukaan, joka omistaa ne, ja tasainen luettelo kahdensadan nimen kanssa on käyttökelvoton, riippumatta siitä, kuinka hyvä muu käyttöliittymä on.

Yksinkertainen merkkijono ryhmäobjektin sijaan, jolla on oma tiedostonsa, koska ryhmällä ei ole käyttäytymistä. Hetkeä, jolloin se saa tiedoston, se hankkii asetukset, ja asetukset ryhmässä tarkoittavat, että kanavan käyttäytyminen riippuu jostakin, jota ei ole kirjoitettu kanavaan - mikä on ominaisuus, joka tekee Mirth-konfiguraation vaikeaksi ymmärtää.

21.1.3 liitteet

Liitteet siirtää suuret kuormat viestin ulkopuolelle ja palauttaa ne ennen toimittamista.

Valinnainen kunkin kanavan osalta: suora ADT-viestien syöte ei tarvitse mitään poimittavaa ja ei pitäisi maksaa laitteiston käytöstä.

21.1.4 rajattu

Rajattu konfiguroi rajatun kanavan.

Vain merkityksellinen, kun tietotyyppi on rajattu.

21.1.5 taulukot

Taulukot nimittävät jaettuja käännöstaulukoita, joihin viittataan nimellä.

Jaettu, koska verotus on suurelta osin uudelleenjohdettu käännös, jonka joku on jo johtanut: sivuston sukupuolikoodeja ja potilasluokkia käännetään identtisesti jokaisessa kanavassa, joka koskettaa niitä, ja taulukko kanavassa on taulukko, jota vain kyseinen kanava voi käyttää.

21.1.6 käytössä

Käytössä oletusarvo on tosi.

Poistettu kanava on ladattu ja validoituu, mutta ei käynnistetä, joten tiedosto, joka on tilapäisesti pois, on edelleen tarkistettu CI: n avulla.

21.1.7 datatyyppi

Datatyyppi on kanavan vastaanottamien viestien muoto.

Oletuksena on hl7, joten jokainen ennen tämän olemassaoloa kirjoitettu kanava toimii edelleen.

21.1.8 x12

X12 sisältää asetukset, jotka ovat merkityksellisiä vain X12-kanavalla.

Muiden kanavatyypien asettaminen ei ole sallittua, vaan se hylätään sen sijaan, että se ohitettaisiin.

21.1.9 skripti

Skripti määrittää NCPDP SCRIPT -kanavan.

Sen vaiheet sijaitsevat täällä sen sijaan, että ne olisivat ylätason muunnoksissa, samasta syystä kuin jokaisen muun non-v2-muodon: vaiheiden tyypit eroavat muodosta riippuen, joten yksi avain voisi tarkoittaa eri asioita riippuen datatyypistä.

21.1.10 dicom

Kuvantaminen määrittää DICOM-kanavan nimettyjä muunnosvaiheita.

Nimetty Kuvantaminen sen sijaan, että DICOM, koska lähde ja kohde jo ovat DICOM-kenttiä ja kolme kenttää samalla nimellä eri tasoilla on tapa, jolla joku asettaa väärän kentän. YAML-avain on dicom, joka on se, minkä henkilö, joka kirjoittaa tiedoston, odottaa, ja Go-nimi on se, joka estää virheen kutsusivulla.

21.1.11 suodatin

Suodatin on lauseke, joka on voimassa, jotta viesti voidaan välittää.

Viesti, joka ei vastaa suodatinta, on edelleen vahvistettu: lähettäjä ei ole tehnyt mitään väärää, me vain emme ole kiinnostuneita.

21.1.12 muunnokset

Muunnokset ovat deklaratiivisia muutoksia, jotka sovelletaan hyväksyttyihin viesteihin, järjestyksessä, ennen kuin skripti suoritetaan.

Tämä on kerros, joka on tarkoitettu kantamaan tavallinen työ: jokainen vaihe on validoitava, kun tiedosto ladataan, se näkyy diffissä ja se voidaan tarkastella henkilöltä, joka ei lue JavaScriptiä.

21.1.13 skriptit

Skriptit sisältävät JavaScript-koodin tapauksille, joita deklaratiiviset vaiheet eivät voi ilmaista, ja se on se, mihin Mirth-kanavan omat skriptit päätyvät muuttumattomina.

Kanava, jolla on skripti, on merkitty sellaisena käyttöliittymässä, koska sen käyttäytyminen ei voida määrittää lukemalla konfiguraatiota.

21.1.14 varjokanava

Varjokanava suorittaa kanavan ehdotettua versiota rinnakkain ja raportoi, missä ne eroavat.

Mitään, mitä se tekee, ei voi tavoittaa vastaanottajaa.

22 Lähdeviite

Jokainen tapa, jolla kanava voi vastaanottaa viestejä, ja jokainen avain, jonka kunkin kanava hyväksyy. Kanavalla on tarkalleen yksi lähde.

22.1 AMQP Lähde

AMQP Lähde vastaanottaa jonosta tai tilauksesta.

Viesti hyväksytään vasta, kun kanava on käsitellyt sen. Se, jota ei voitu käsitellä, vapautetaan epäonnistuneena toimituksena, jotta välittäjä toimittaa sen uudelleen ja - Service Busissa, jonon enimmäistoimitusmäärän ylittävässä tapauksessa - merkitsee sen kuolleeksi.

Määritelty AMQPSource-na internal/config:ssa.

AvainTyyppiVaadittuOletus
prefetchkokonaislukuei10
reconnectkestoaika, esim. 30s tai 5mei5s

22.1.1 prefetch

Prefetch on se, montako viestiä välittäjä voi lähettää eteenpäin.

Oletusarvo on 10. Ne käsitellään kuitenkin yksi kerrallaan, järjestyksessä.

22.1.2 reconnect

Reconnect on odotusaika yhteyden menetettyä.

Defaults to 5s.

22.2 AS2 Lähde

AS2 Lähde vastaanottaa AS2 (RFC 4130): EDI lähetetään HTTP:n yli, allekirjoitetaan ja salataan S/MIME:llä, ja vastataan kuittauksella (MDN), joka sisältää saapuneen sisällön tiiviste.

Kanavan käsiteltävä kuorma on X12 ja EDIFACT.

Määritelty AS2Source-na internal/config:ssa.

AvainTyyppiVaadittuOletus
listentekstikyllä—
pathtekstiei—
tlstlsconf.Settings (lohkko, jätä tyhjäksi jättämiseksi pois)ei—
idtekstikyllä—
cert_filetekstikyllä—
key_filetekstikyllä—
partnersluettelo AS2Partneristakyllä—
max_message_sizekokonaislukuei—
duplicate_windowkestoaika, esim. 30s tai 5mei—

22.2.1 polku

Polku on URL-polku, johon kumppanit lähettävät.

Default /as2.

22.2.2 tls

TLS tarjoaa HTTPS:n.

Useimmat kumppanit vaativat sitä sopimuksessaan S/MIME:n lisäksi.

22.2.3 id

ID on meidän AS2-tunniste, jonka kumppanit lähettävät AS2-To:ssa.

Viesti mihin tahansa muuhun kieltäytyy.

22.2.4 kumppanit

Kumppanit ovat ne, jotka voivat lähettää tänne.

Viesti kenenkään muun lähettäjältä hylätään.

22.2.5 duplicate_window

DuplicateWindow on ajanjakso, jonka aikana kumppanin Message-ID muistetaan, jotta viesti, joka lähetetään uudelleen (kumppani ei saanut meidän vastaanottoa ja yritti uudelleen), vastaanotetaan ja ei välitetä kahteen kertaan (RFC 4130, jakso 7.5).

Default 30 days.

22.3 Azure Blob -lähde

AzureBlobSource poimii blobit säiliön etuliitteestä.

Määritelty AzureBlobSource -kohtaa internal/config.

AvainTyyppiVaadittuOletus
prefixtekstikyllä—
suffixtekstiei—
after_readtekstiei—
move_totekstieiprosessoidut/
error_prefixtekstieivirhe/
poll_intervalkestoaika, esim. 30s tai 5mei30s
max_object_sizekokonaislukuei16 MiB
framedtosi tai epätosiei—

22.3.1 siirrä

Siirrä on mihin käsitelty blob siirretään.

Oletusarvo on prosessoidut/.

22.3.2 virhe_etuliite

VirheEtuliite on mihin blob, jota ei voida käsitellä, siirretään, jotta se ei estä muuta toimintaa.

Oletusarvo on virhe/.

22.3.3 tarkastusväli

Tarkastusväli listauksien välillä.

Defaults to 30s.

22.3.4 maksimikokoa

Maksimikokoa kieltää isomman blobin, joka jätetään paikoilleen.

Oletusarvo on 16 MiB.

22.4 Välittäjälähde

BrokerSource lukee viestejä viestinvälittäjästä.

Mirthin JMS-lukija, jota voidaan käyttää STOMP-protokollaa, koska JMS on Java-rajapinta eikä protokolla. Katso internal/stomp, miksi STOMP ja ei OpenWire.

Määritelty BrokerSource -kohtaa internal/config.

AvainTyyppiVaadittuOletus
addrtekstikyllä—
destinationtekstikyllä—
logintekstiei—
passcodetekstiei—
hosttekstieiosoitteen isäntä
selectortekstiei—
subscription_idtekstieikanavan nimi
heartbeatkestoaika, esim. 30s tai 5meikolmekymmentä sekuntia
reconnectkestoaika, esim. 30s tai 5meiviisi sekuntia
timeoutkestoaika, esim. 30s tai 5meikolmekymmentä sekuntia
tlstlsconf.Settings (lohkko, jätä tyhjäksi jättämiseksi pois)ei—

22.4.1 osoite

Addr on is välittäjän isäntä ja portti.

Pakollinen. 61613 on yleensä käytetty STOMP-portti.

22.4.2 kohde

Kohde on jono tai aihe, josta luetaan.

Required.

Välittäjät kirjoittavat nämä eri tavoin - /queue/nimi ActiveMQ: ssä, paljas nimi RabbitMQ: ssä - joten se välitetään muuttumattomana sen sijaan, että se koostettaisiin täällä. Arvauksen tekeminen merkitsisi työskentelyä yhden välittäjän kanssa ja hiljaisesti lukemista toisella.

22.4.3 kirjautuminen

Kirjautuminen ja salasana tunnistavat.

Useimmat välittäjät kieltävät anonyymin yhteyden.

22.4.4 salasana

Kirjautuminen ja salasana tunnistavat.

Useimmat välittäjät kieltävät anonyymin yhteyden.

22.4.5 isäntä

Isäntä on virtuaalinen isäntä.

Oletusarvoisesti osoitteen isäntä.

22.4.6 valitsin

Valitsin suodattaa viestejä välittäjässä.

JMS-valitsin, joka välitetään muuttumattomana sen sijaan, että se tulkitstaan. Suodatus välittäjässä sen sijaan, että täällä, tarkoittaa, että viestit, joita tämä kanava ei halua, eivät koskaan ylittäkö verkkoa - mikä jaetussa jonossa on ero lukea sata viestiä päivässä ja sata tuhatta.

22.4.7 tilaus_id

TilausID nimeää tilauksen.

Oletusarvoisesti kanavan nimi.

Nimetty sen sijaan, että generoitu, koska kestävä tilaus tunnetaan sen avulla: generoitu luo uuden tilauksen jokaisella käynnistyksellä ja jättää vanhat tilaukset kasaamaan viestejä, joita kukaan ei lue.

22.4.8 syke

Syke pitää yhteyden elossa.

Oletusarvoisesti kolmekymmentä sekuntia.

Päällä oletuksena täällä, toisin kuin asiakkaan oman oletusarvon, koska lähde pitää yhden yhteyden auki viikkoja. Ilman sykettä yhteys palomuurin kautta, joka on hiljaisesti pudottanut reitin, näyttää täältä täydelliseltä ja viestit vain loppuvat saapumasta, eikä mitään kirjata.

22.4.9 reconnect

Uudelleenmuodostus on se, kuinka kauan odottaa ennen uudelleenmuodostusta epäonnistumisen jälkeen.

Oletusarvoisesti viisi sekuntia.

22.4.10 aikakatkaisu

Yhteyden muodostamisen aikarajoitukset.

Oletusarvoisesti kolmekymmentä sekuntia.

22.5 DICOM-kyselylähdde

DICOMQuerySource kysyy arkistoa C-FIND:llä ja lähettää viestin jokaisesta uudesta tutkimuksesta.

Mirthilla ei ole vastaavaa liitintä. Sen DICOM-tuki on kuuntelija ja lähettäjä - se voi vastaanottaa arkistosta pushattuja kuvia ja lähettää ne eteenpäin, ja se on kaikki. Arkistoon kysymistä, mitä se sisältää, on pyydetty heidän foorumeillaan vuodesta 2015 lähtien.

Se, mikä tekee siitä arvokkaan, ei ole kysely, vaan automaatio: ennakkoaja, joka suoritetaan kolmen aikaan aamulla, tarkistus, joka huomaa arkiston puuttuvan tutkimuksen, jonka RIS sanoo olevan olemassa, työlista, joka on rakennettu siitä, mitä on todella skannattu sen sijaan, mitä on tilattu. Nämä ovat tehtäviä, joita sivustot tällä hetkellä tekevät aikataulutetulla skriptillä moottorin ulkopuolella, mikä tarkoittaa, että ne ovat sille näkymättömiä - ei uudelleenyrityksiä, ei hälytyksiä, ei viestihistoriaa.

Määritelty DICOMQuerySource -kohtaa internal/config.

AvainTyyppiVaadittuOletus
addresstekstikyllä—
called_aetekstikyllä—
calling_aetekstiei—
leveltekstieiTUTKIMUS
patient_roottosi tai epätosiei—
matchteksti-teksti-karttaei—
returnluettelo tekstejäei—
intervalkestoaika, esim. 30s tai 5mkyllä—
windowkestoaika, esim. 30s tai 5mei—
overlapkestoaika, esim. 30s tai 5meiyksi tunti
limitkokonaislukuei500
timeoutkestoaika, esim. 30s tai 5meikaksi minuuttia
tlstlsconf.Settings (lohkko, jätä tyhjäksi jättämiseksi pois)ei—
emit_on_first_polltosi tai epätosieiepätosi

22.5.1 osoite

Osoite on arkiston isäntä ja portti.

Required.

Nimetty vastaamaan DICOM-kohdetta lyhentämisen sijaan. Nämä kaksi olivat "osoite" ja "addr" iltapäiväksi, mikä on sellainen epäjohdonmukaisuus, jonka joku käsin kirjoittava kanavatiedosto tekee väärin kerran ja sitten epäilee koko tiedostomuotoa.

22.5.2 kutsuttu_ae

KutsuttuAE on arkiston AE-otsikko.

Vaadittu käytännössä: useimmat arkistot kieltäytyvät yhdistymisestä, joka on osoitettu muuhun kuin arkistoon, ja tämä kieltäytyminen luetaan poisjääntinä eikä konfiguraation virheenä.

22.5.3 kutsuva_ae

KutsuvaAE on AE-otsikko, jonka Perfuse esittää.

Arkistot käyttävät yleensä sitä pääsytarkasteluun.

22.5.4 taso

Taso on kyselyn taso: POTILAS, TUTKIMUS, SARJA tai KUVA.

Oletuksena TUTKIMUS.

TUTKIMUS on oletusarvo, koska se on se, mitä melkein jokainen hyödyllinen kysely haluaa, ja koska vaihtoehdot yllättävät ihmisiä: KUVA-tason kysely suurelle CT:lle palauttaa yhden vastauksen jokaista viillettä kohden, mikä on satoja tutkimuksia kohden.

22.5.5 vastaa

Vastaa ovat kyselyavaimet.

Arvo suodattaa; tyhjä arvo pyytää kentän palauttamista.

Avaimet on nimetty eikä niitä ole numeroitu - "PotilasID" eikä "0010,0020" - koska kanavatiedosto luetaan ihmisille, ja taginumero konfiguraatiotiedostossa on hakemisto, jonka jokainen lukija on suorittanut.

22.5.6 palauta

Paluuarvot ovat kentät, jotka haetaan ilman niiden suodattamista.

Eroon Matchista tyhjällä arvolla, vaikka ne koodataan identtisesti, koska tarkoitus eroaa ja lukija voi nähdä, mitkä avaimet kaventavat hakua ja mitkä kerätään.

22.5.7 väli

Väli on, kuinka usein haetaan tietoja.

Required.

22.5.8 ikkuna

Ikkuna on, kuinka pitkälle taaksepäin kunkin haun katsotaan, tutkimuspäivämääränä.

Nolla poistaa päivämääräsuodatuksen kokonaan.

Ikkuna on se, mikä pitää tämän rajattuna. Ilman sitä jokainen haku kysyy arkistolta kaiken, mitä se on koskaan pitänyt, ja sitten hylkää sen, mitä se on aiemmin nähnyt - mikä toimii testiarkistossa ja on epäsopiva vastaan oikeaa arkistoa, joka pitää miljoonia tutkimuksia.

22.5.9 leikkaus

Leikkaus uudelleenhaa tämän verran jo haetun ajanjaksosta.

Oletusarvo on yksi tunti.

Välttämätön ei varovainen. Tutkimus voidaan rekisteröidä edellisen päivän päivämäärällä, meidän kellomme ja arkiston kellon ei tarvitse olla samaa mieltä, ja haun raja, joka linjaa täsmälleen saapumisen kanssa, menettää sen. Leikkaus uudelleenhaa, ja jo nähty tarkistus estää duplikaatin - joten leikkaamisen kustannus on hieman suurempi kysely ja ei-leikkaamisen kustannus on hiljaisesti väärä tutkimus.

22.5.10 raja

Raja asettaa yhden haun vastaavien määrän.

Defaults to 500.

Raja ei ole raja, koska virheellinen vastaavuusavain muuttaa tämän "anna minulle kaikki", ja ensimmäinen oire siitä vastaan oikeaa arkistoa on arkiston ylläpitäjän kysyminen, kuka on hakemassa sitä.

22.5.11 aikakatkaisu

Aikakatkaisu rajoittaa yhden haun.

Oletusarvo on kaksi minuuttia.

22.5.12 emit_on_first_poll

EmitOnFirstPoll lähettää viestit kaikista ensimmäisen haun löytämistä.

Oletusarvo on epätosi.

Epätosi on merkittävä. Osoittaminen tätä arkistoon, joka jo pitää miljoona tutkimusta, ja sen lähettäminen viesti kullekin niistä, ei ole hyödyllinen ensimmäinen suoritus, ja se on virhe, joka huomataan alavirrassa eikä täällä. Ensimmäinen haku merkitsee, mitä on olemassa, ja ei lähettä mitään; toinen haku alkaen raportoi, mitä on uutta.

22.6 DICOM-lähde

DICOM-lähde vastaanottaa kuvantamistiedostoja C-STORE-palveluluokan tarjoajana.

Se, mihin sairaala osoittaa laitteen tai kuvantamisjärjestelmän. Mirth kutsuu tätä DICOM-kuuntelijaksi, ja se tekee vain C-STORE-toiminnon, joten tämä on tasapuolisuutta eikä alijoukkoa.

Määritelty DICOMSource-nimisenä internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
listentekstikyllä—
ae_titletekstiei—
allowed_calling_aetekstiluetteloei—
sop_classestekstiluetteloei—
transfer_syntaxestekstiluetteloei—
max_object_byteskokonaislukuei—
idle_timeoutkestoaika, esim. 30s tai 5mei—
tlstlsconf.Settings (lohkot, jätä tyhjäksi poistamiseksi)ei—

22.6.1 kuuntele

Kuuntele on osoite, jota palvelin kuuntelee.

Vaadittu. 104 on rekisteröity DICOM-portti; 11112 on yleinen vaihtoehto, kun etuoikeutetun portin sitominen ei ole mahdollista.

22.6.2 ae_title

AETitle on se nimi, jolla tämä päätepiste kutsuu itseään.

Vahvasti suositeltu, vaikka ei välttämätöntä, ja varoitetaan poissaolosta. Sivuston ainoa päätepisteen pääsykontrolli on usein AE-nimi, joten päätepiste, joka hyväksyy minkä tahansa nimen, hyväksyy kaiken, minkä saa tavoittaa.

22.6.3 allowed_calling_ae

AllowedCallingAE luettelee sallitut AE-nimet, jotka voivat muodostaa yhteyden.

Tyhjä luettelo hyväksyy minkä tahansa soittajan.

Tämä on DICOMin todellinen pääsykontrolli. PACS on yleensä konfiguroitu hyväksymään yksi nimetty soittaja ja hylkäämään kaikki muut, ja tässä päässä ei ollut vastaavaa: haettu nimi tarkistettiin - joka on se nimi, jonka soittaja valitsee, joten kuka tahansa voi lähettää sen oikein - kun taas soittajan nimi kirjattiin lokitiedostoon ja muutoin jätettiin huomiotta.

Tyhjä luettelo hyväksyy edelleen kaiken, koska modality, jota kukaan ei ole luetellut, on normaali tila ensimmäisessä asennuksessa, ja oletusarvoisesti estäminen rikkoisi jokaisen käyttöönoton ensimmäisenä päivänä. Sen sijaan varoitetaan, ja varoitus mainitsee nimet, jotka ovat yhdistyneet, jotta joku voi täyttää tämän tiedon siitä, mitä on todella saapunut.

22.6.4 sop_classes

SOPClasses rajoittaa hyväksyttyjä objektien tyyppejä.

Tyhjä luettelo hyväksyy minkä tahansa.

Tyhjä on järkevä oletusarvo tässä, koska tämä moottori välittää objekteja sen sijaan, että tulkitsee niitä, joten tutkimattoman luokan hylkääminen hylkäisi vain validit kuvat ilman hyötyä.

22.6.5 transfer_syntaxes

TransferSyntaxes rajoittaa hyväksyttyjä koodauksia, järjestyksessä.

Tyhjä luettelo hyväksyy pakkaamattomat kolme.

22.6.6 max_object_bytes

MaxObjectBytes asettaa ylärajan yhden vastaanotetun objektin koolle.

Nolla asettaa oletusarvon.

22.6.7 idle_timeout

IdleTimeout sulkee yhteyden, joka on mennyt hiljaiseksi.

Nolla tarkoittaa ei koskaan, mikä on yleensä oikein - modaliteetti pitää yhteyden auki tutkimusten välillä.

22.6.8 tls

TLS salaa saapuvat yhteydet ja voi vaatia asiakasvarmenteen.

On syytä mainita selvästi: Mirth tarvitsee maksullisen SSL Manager -laajennuksen tähän, ja yhteisöforkit eivät voi toimittaa sitä ollenkaan. DICOM sisältää potilasnimet metatietoihinsa, joten tämä on yksi paikoista, joissa olla uudelleenkirjoitus forksin sijaan on todellinen etu tyylin sijaan.

22.7 DICO Mweb Lähde

DICOMwebSource hyväksyy STOW-RS-pyynnöt.

Määritelty DICOMwebSource-na internal/config: ssä.

AvainTyyppiVaadittuOletus
listentekstikyllä—
pathtekstiei/dicom-web
tokentekstiei—
usernametekstiei—
passwordtekstiei—
max_object_byteskokonaislukuei—
tlstlsconf.Settings (lohkko, jätä tyhjäksi jättämiseksi pois)ei—

22.7.1 kuuntele

Kuuntele on osoite, jota palvelin kuuntelee.

Required.

22.7.2 polku

Polku on palvelun juuri.

Objektit hyväksytään Polku/tutkimukset ja Polku/tutkimukset/{uid}: ssä. Oletusarvo on /dicom-web, jota Orthanc ja dcm4chee käyttävät, joten lähettäjä, joka on määritetty jompaakumpaa varten, tarvitsee vain isäntänimi muutettuna.

22.7.3 token

Token, kun se on asetettu, vaaditaan bearer-merkkinä.

Käyttäjänimi ja salasana vaativat HTTP-perusautentikointia.

22.7.4 käyttäjänimi

Token, kun se on asetettu, vaaditaan bearer-merkkinä.

Käyttäjänimi ja salasana vaativat HTTP-perusautentikointia.

22.7.5 salasana

Token, kun se on asetettu, vaaditaan bearer-merkkinä.

Käyttäjänimi ja salasana vaativat HTTP-perusautentikointia.

22.8 Tietokantalähde

DatabaseSource lukee rivit tietokannasta ja muuttaa kunkin niistä viestiksi.

Tämä on tapa, jolla monet sairaalaliitännäiset tosiasiallisesti alkavat. Osastojärjestelmällä ei ole HL7-kapasiteettia, joten joku kirjoittaa rivit väliaikaiseen taulukkoon ja liitäntämootorin kysely.

Se on myös yleisin tapa, jolla Mirth-kanava jumittuu, ja syy on lähes aina sama: rivi, jota ei voida prosessoida, luetaan, epäonnistuu ja luetaan uudelleen ikuisesti, koska mitään ei ole merkitty. Kanava näyttää elävältä. Jonossa näyttää olevan tyhjä. Mitään ei liiku, ja jokainen viesti huonon rivin takana odottaa rivia, joka ei koskaan onnistu.

Suurin osa suunnittelusta tässä on siitä.

Määritelty DatabaseSource-na internal/config: ssä.

AvainTyyppiVaadittuOletus
drivertekstikyllä—
dsntekstikyllä—
querytekstikyllä—
after_querytekstiei—
key_columntekstiei—
templatetekstiei—
columntekstiei—
poll_intervalkestoaika, esim. 30s tai 5mei—
batch_sizekokonaislukuei100
max_attemptskokonaislukuei3
query_timeoutkestoaika, esim. 30s tai 5mei30s

22.8.1 ajuri

Ajuri nimeää tietokannan.

See SupportedDrivers.

22.8.2 dsn

DSN on yhteysmerkkijono.

Suosittelemme ympäristömuuttujan viittausta kirjaimellisen arvon sijaan, koska tämä sisältää yleensä salasanan ja kanavat on tarkoitettu olevan Gitissä.

22.8.3 kysely

Kysely valitsee rivit, jotka odottavat lähetystä.

Required.

Se on oltava SELECT-kysely. Äänetön kirjoitus, joka suoritetaan aikataulun mukaan, ei jätä jälkeensä mitään muistiinpanoja siitä, mitä se muutti.

22.8.4 after_query

AfterQuery merkitsee rivin käsitellyksi ja suorittaa sen rivin avaimen kanssa.

Strongly recommended.

Ilman tätä jokainen kysely lukee uudelleen jokaisen rivin, joka kysely edelleen vastaa, joten itse kyselyyn on löydettävä tapa poistaa käsitellyt rivit. Jos kumpaakaan ei ole totta, kanava lähettää samat rivit loputtomiin, mikä on duplikaattimyrsky eikä tukos, ja se on perusteltavasti huonompi.

22.8.5 avain_sarake

AvainSarake tunnistaa rivin AfterQuery:lle, karanteenille ja duplikaattien poistamiselle.

Vaaditaan, kun AfterQuery on asetettu.

22.8.6 malli

Malli rakentaa viestin rivistä.

Joko tämä tai Sarake on vaadittu.

Sarakkeen viittaukset käyttävät ${sarakkeen_nimeä}. Puuttuvat sarakkeet ovat virhe loadauksessa eikä tyhjä merkkijono kliinisessä viestissä.

22.8.7 erä_koko

EräKoko asettaa ylärajan rivien määrälle kyselyssä.

Defaults to 100.

Rajoitettu, koska rajoittamaton ensimmäinen kysely taulukkoon, jota joku on täyttänyt vuoden ajan, lukee koko sen muistiin ja lähettää sen, mikä on tapa, jolla migratio tulvii live-vastaanottajaa.

22.8.8 max_yritykset

MaxYritykset on montako kertaa yksittäinen rivi saa epäonnistua ennen kuin se karanteenissa ja kysely siirtyy eteenpäin.

Defaults to 3.

Tämä on asetus, joka estää tukkeutumisen. Ikuiset uudelleenyritykset eivät ole kestävyyttä; se on yksi huono rivi, joka pysäyttää sairaalavirran.

22.8.9 kysely_aikakatkaisu

KyselyAikakatkaisu asettaa yksittäisen kyselyn ylärajan.

Defaults to 30s.

22.9 Suora Lähde

SuoraLähde vastaanottaa Suoran postin, jonka HISP toimittaa: SMTP-kuuntelija tämän osoitteen postille.

Jokainen viesti salakirjoitetaan, sen allekirjoitus tarkistetaan ankkureita ja allekirjoittajaa vastaan From, ja sen sisältö välitetään eteenpäin: XDM-paketin asiakirjat, muutoin jokainen liite, muutoin teksti.

Määritelty DirectSource-nimisenä internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
listentekstiei—
tls_certtekstiei—
tls_keytekstiei—
max_byteskokonaislukuei—
smtp_hosttekstiei—
usernametekstiei—
passwordtekstiei—
imapDirectIMAP (lohkko, jätä tyhjäksi jättää pois)ei—
xdrDirectXDR (lohkko, jätä tyhjäksi jättää pois)ei—

22.9.1 smtp_host

SMTPHost, Username ja Password ovat HISP:n lähetysserveri, jota käytetään lähettämään "käsitelty" toimitusilmoitus (MDN) lähettäjälle, kun viesti on otettu vastaan.

Ilman sitä ei lähetetä ilmoitusta.

22.9.2 käyttäjänimi

SMTPHost, Username ja Password ovat HISP:n lähetysserveri, jota käytetään lähettämään "käsitelty" toimitusilmoitus (MDN) lähettäjälle, kun viesti on otettu vastaan.

Ilman sitä ei lähetetä ilmoitusta.

22.9.3 salasana

SMTPHost, Username ja Password ovat HISP:n lähetysserveri, jota käytetään lähettämään "käsitelty" toimitusilmoitus (MDN) lähettäjälle, kun viesti on otettu vastaan.

Ilman sitä ei lähetetä ilmoitusta.

22.10 Sähköpostilähde

EmailSource lukee sähköposteja postilaatikosta ja muuttaa liitteet, rungot tai koko viestin viesteiksi.

Määritelty EmailSource-nimisenä internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
protocoltekstiei—
hosttekstikyllä—
portkokonaislukuei—
securitytekstiei—
tlstlsconf.Settings (lohkko, jätä tyhjäksi jättääksesi pois)ei—
usernametekstikyllä—
passwordtekstiei—
oauthEmailOAuth (lohkko, jätä tyhjäksi jättääksesi pois)ei—
mailboxtekstiei—
taketekstiei—
attachment_namestekstien luetteloei—
allowed_senderstekstien luetteloei—
after_readtekstiei—
move_totekstiei—
error_foldertekstiei—
poll_intervalkestoaika, esim. 30s tai 5mei—
max_message_sizekokonaislukuei—

22.10.1 salasana

Salasana voi olla ${ENV}; Gmailissa sovellussalasana.

Jätetään huomiotta oauth:n kanssa.

22.10.2 attachment_names

AttachmentNames rajoittaa, mitkä liitteet otetaan, tiedostonimen kuviopohjaisesti (*.hl7).

Tyhjä ottaa kaikki liitteet.

22.10.3 allowed_senders

AllowedSenders rajoittaa, kenen sähköposteja luetaan: osoitteet ja verkkotunnukset.

From-otsikko voidaan väärentää, joten tämä pitää pois onnettomuudet ja satunnaiset sähköpostit, ei kuitenkaan hyökkääjiä.

22.10.4 siirrä

MoveTo on kansio, johon käsitelty posti siirretään; oletuksena Käsitelty.

Luodaan, jos puuttuu.

22.11 FTP-lähde

FTPSource kerää tiedostoja FTP- tai FTPS-palvelimelta.

Miksi FTP on edelleen täällä

Se on kolmekymmentä vuotta suositellun korvaamisensa jälkeen, ja monissa sairaalajärjestelmissä se on edelleen käytössä: laitteissa, joiden ohjelmisto ei koskaan päivitetä, laskutusjärjestelmissä, joiden valmistaja veloittaa muutoksesta. Sen kieltäytyminen puhumasta kieltää näiden järjestelmien käytön, se tarkoittaa, että integraatiomoottoria ei voida käyttää.

FTPS on oletus. Se on sama protokolla kuin TLS, useimmat selviytyneet palvelimet tukevat sitä, ja se on paljon helpompi keskustelu turvallisuustiimin kanssa kuin pelkkä FTP.

Määritelty FTPSource-nimisenä internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
hosttekstikyllä—
usertekstiei—
passwordtekstiei—
securityftpconn.Securityeiexplicit
insecure_skip_verifytrue tai falseei—
roottekstiei—
timeoutkestoaika, esim. 30s tai 5meikolmekymmentä sekuntia

22.11.1 isäntä

Isäntä on palvelin, jossa on valinnainen portti.

Oletusarvoisesti portti 21.

22.11.2 käyttäjä

Käyttäjä ja salasana tunnistavat.

Molemmat voidaan jättää tyhjäksi anonyymille palvelimelle.

Anonyymi FTP on edelleen tapa, jolla jotkut julkiset viitevirrat julkaistaan, joten tyhjä käyttäjä on legitimi konfiguraatio eikä se hylätä. Palvelimella, joka odottaa tunnistetietoja, niiden puuttuminen aiheuttaa kirjautumisvirheen yhteyden muodostuksen aikana, mikä ilmoitetaan kanavaa vastaan eikä se yritetä uudelleen hiljaisesti.

22.11.3 salasana

Käyttäjä ja salasana tunnistavat.

Molemmat voidaan jättää tyhjäksi anonyymille palvelimelle.

Anonyymi FTP on edelleen tapa, jolla jotkut julkiset viitevirrat julkaistaan, joten tyhjä käyttäjä on legitimi konfiguraatio eikä se hylätä. Palvelimella, joka odottaa tunnistetietoja, niiden puuttuminen aiheuttaa kirjautumisvirheen yhteyden muodostuksen aikana, mikä ilmoitetaan kanavaa vastaan eikä se yritetä uudelleen hiljaisesti.

22.11.4 turvallisuus

Turvallisuus on explicit, implicit tai ei mitään.

Oletuksena on explicit, joka on FTPS, jossa on AUTH TLS -neuvottelu normaalilla portilla. "Ei mitään" on tavallinen FTP, ja se on pyydettävä nimenomaisesti.

22.11.5 juuri

Juuri on hakemisto, josta kaikki polut ovat suhteellisia, ja se on rajoitus, jota vastaan sisältöä valvotaan.

Palvelimella ei ole käsitystä siitä: FTP-palvelin hyväksyy iloisesti ../.. -polun. Siksi tämä estää move_to -toiminnon kirjoittamasta minne tahansa, mihin tili pääsee.

22.11.6 aikakatkaisu

Aikakatkaisu rajoittaa yhtä toimintoa, ei koko kyselyä.

Oletusarvoisesti kolmekymmentä sekuntia.

Toiminto kerrallaan, koska kysely, joka lukee hakemiston ja noutaa kaksikymmentä tiedostoa, suorittaa kaksikymmentä yhtä toimintoa, ja yksi budjetti kaikille niistä keskeyttäisi täysin terveen suuren tiedoston siirron.

22.12 Tiedoston lähde

FileSource lukee tiedostoja hakemistosta, johon palvelin pääsee.

Ensimmäinen yhdistin, jota sivusto yrittää

Analyysi kirjoittaa tuloksensa kansioon. Laskutusjärjestelmä pudottaa erän yöaikaan. Radiologia vie raportteja hakemistoon, jonka joku on liittänyt vuosia sitten. Mikään näistä ei liity protokollaan, ja integraatiomoottori, joka ei voi lukea kansioa, epäonnistuu arvioinnissa ensimmäisen iltapäivän aikana.

Määritelty FileSource -kohteena internal/config -tiedostossa.

AvainTyyppiVaadittuOletus
roottekstikyllä—
follow_symlinkstrue tai falseei—

22.12.1 juuri

Juuri rajoittaa kaikkia polkuja, joita tämä lähde koskettaa.

Required.

Eroon Dir:stä, jotta move_to ja error_dir voivat olla suhteellisia ja silti olla rajoitettuja. Vain Dir, error_dir "../failed" olisi ulkona mitään, minkä lähde oli saanut, ja sen kieltäminen olisi mielivaltainen, koska ei olisi mitään, minkä perusteella se voitiin kieltää.

22.13 GCS-lähde

GCSSource poimii objekteja bucket-etuliitteen mukaan, kuten s3- ja azure_blob-lähteet.

Määritelty GCSSource-nimisenä internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
prefixtekstikyllä—
suffixtekstiei—
after_readtekstiei—
move_totekstieiprosessoidut/
error_prefixtekstieivirhe/
poll_intervalkestoaika, esim. 30s tai 5mei30s
max_object_sizekokonaislukuei16 MiB
framedtosi tai epätosiei—

22.13.1 siirrä

MoveTo on paikka, jonne käsitelty kohde menee, kun after_read on siirto.

Oletusarvo on prosessoidut/.

22.13.2 virhe_etuliite

ErrorPrefix on paikka, jonne menee kohde, jota ei voitu käsitellä.

Oletusarvo on virhe/.

22.13.3 tarkastusväli

PollInterval on se, kuinka usein etuliite luetteloidaan.

Defaults to 30s.

22.13.4 maksimikokoa

MaxObjectSize jättää suuremmat kohteet paikoilleen.

Oletusarvo on 16 MiB.

22.14 HTTP-lähde

HTTP-lähde hyväksyy viestejä HTTP:n kautta.

Kuuntelija ei ole poller, vaan jokin lähettää viestin ja saa vahvistuksen takaisin, mikä on tapa, jolla moderni sairaala integroituu, kun MLLP ei ole sille saatavilla.

Määritelty HTTPSource-nimisenä internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
listentekstikyllä—
pathtekstiei"/"
tlstlsconf.Settings (lohkko, jätä tyhjäksi jättämiseksi pois)ei—
tokentekstiei—
max_message_sizekokonaislukuei—
read_timeoutkestoaika, esim. 30s tai 5mei—
ackAckei—

22.14.1 kuuntele

Kuuntele on osoite, jota palvelin kuuntelee.

Required.

22.14.2 polku

Polku on URL-polku, jolla viestit hyväksytään.

Defaults to "/".

22.14.3 token

Token, kun se on asetettu, vaaditaan Authorization: Bearer-otsikossa.

Ei ole oletusta eikä anonyymin tilan vaihdinta: sairaalan verkkoon liittyvä HTTP-päätepiste ilman todennusta on päätös, joka on näkyvissä tiedostossa, joten tyhjän jättäminen aiheuttaa varoituksen latauksen yhteydessä.

22.14.4 max_viestikoko

MaxViestikoko rajoittaa saapuvan viestin koon.

Nolla asettaa oletusarvon.

22.15 IBMMQ-lähde

IBMMQ-lähde lukee jonon.

Määritelty IBMMQSource-nimisenä internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
poll_intervalkestoaika, esim. 30s tai 5mei2s

22.15.1 tarkastusväli

Kyselyväli on odotusaika, kun jono on tyhjä tai kun viesti, jota ei voitu käsitellä, on käsitelty.

Defaults to 2s.

22.16 JavaScript-lähde

JavaScript-lähde määrittää lähteen, joka suorittaa skriptin ajastimella ja syöttää palautetut viestit kanavaan.

Tämä on Mirthin "JavaScript Reader" -vastine.

Skripti suoritetaan goja-VM:ssä, jossa on sama hiekkalaatikko kuin muunnosskripteissä: viestiä (msg) ei ole vielä saatavilla, mutta globalMap, configurationMap, logger ja DateUtil ovat läsnä. Skriptin on palautettava merkkijono (yksi viesti) tai merkkijonojen taulukko (useita viestejä). Palauttamalla mitään tai tyhjä taulukko tarkoittaa, että kysely tuotti ei viestejä, mikä on normaalia.

Määritelty JavaScriptSource-nimisenä internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
scripttekstikyllä—
poll_intervalkestoaika, esim. 30s tai 5mei—
timeoutkestoaika, esim. 30s tai 5mei—

22.16.1 tarkastusväli

Tarkasteluväli on, kuinka usein komentosarja suoritetaan.

Nolla merkitsee viisi sekuntia.

22.16.2 aikakatkaisu

Aikakatkaisu rajoittaa yksittäisen komentosarjan suorituksen.

Nolla merkitsee kolmekymmentä sekuntia.

22.17 Kafka-lähde

Kafka-lähde lukee viestejä Kafka-aiheesta.

Määritelty KafkaSource-nimellä internal/config-kansiossa.

AvainTyyppiVaadittuOletus
brokerstekstien luettelokyllä—
topicstekstien luettelokyllä—
grouptekstikyllä—
from_beginningtrue tai falseei—
commit_after_deliverytrue tai false (lohkko, jätä tyhjäksi jättää pois)ei—
max_message_sizekokonaislukueikanavan raja
session_timeoutkestoaika, esim. 30s tai 5mei45 sekuntia
timeoutkestoaika, esim. 30s tai 5mei30 sekuntia
saslKafkaSASL (lohkko, jätä tyhjäksi jättää pois)ei—
tlstlsconf.Settings (lohkko, jätä tyhjäksi jättää pois)ei—

22.17.1 välittäjät

Välittäjät on käynnistyspalvelimen luettelo.

Required.

Luettelo yhden sijaan, koska yksi käynnistysvälittäjä on yksittäinen virheen aiheuttaja käynnistyksen aikana: klusteri selviää sen menettämisestä ja tämä kanava ei.

22.17.2 aiheet

Aiheet ovat aiheet, joita luetaan.

Vähintään yksi vaaditaan.

22.17.3 ryhmä

Ryhmä on kuluttajaryhmä.

Required.

Nimetty sen sijaan, että se olisi generoitu, ja vaadittu sen sijaan, että se olisi oletusarvo, koska se on se, joka muistaa, kuinka pitkälle tämä kanava on lukenut. Generoitu ryhmä aloittaisi alusta - tai lopusta, menettäen kaiken - jokaisen käynnistyksen yhteydessä, ja se jättäisi vanhan ryhmän taakse pitämään sitoutuneita offseteja, joita kukaan ei lue. Vaatimus tekee henkilön nimeämään asian, joka on pysyttävä samana käynnistyksen yli.

22.17.4 alusta

Alusta lukee aiheen alusta, kun ryhmällä ei ole sitoutunutta offsetia.

Pois oletuksena, jotta uusi kanava, joka osoittaa aiheeseen, jossa on kaksi vuoden historian, ei toista kahta vuotta potilastapahtumia live-järjestelmään sen käynnistyksen päivänä. Ensimmäinen henkilö, joka osuu siihen, tekisi sen tuotannossa, koska se on siellä, missä aiheella on historia.

22.17.5 vahvista_toimituksen_jälkeen

VahvistaToimituksenJälkeen sitouttaa offsetin vain kun viesti on käsitelty.

Päällä oletuksena, ja syy on koko ero viestin menettämisessä ja sen näkemisessä kahdesti. Sitouttaminen lukemisen jälkeen tarkoittaa, että kaatuminen sitouttamisen ja toimituksen välillä menettää viestin hiljaisesti, ja mitään ei missään kirjata, että se on olemassa. Sitouttaminen jälkeen tarkoittaa, että kaatuminen samassa ikkunassa toimittaa sen uudelleen, mikä on näkyvää ja mihin HL7-vastaanottimet on rakennettu - kaksoiskappale A08 on häiriö ja puuttuva laboratoriotulos on potilasturvallisuuden tapahtuma.

22.17.6 max_viestikoko

Maksimiviestikoko rajoittaa yhden tallennuksen.

Oletuksena kanavan raja.

22.17.7 istunto_ajastus

Istunto_ajastus määrittää, kuinka kauan ryhmäkoordinaattori odottaa, ennen kuin oletetaan, että kuluttaja on poistunut ja sen osiot määrätään uudelleen.

Oletusarvo on 45 sekuntia.

22.17.8 aikakatkaisu

Yhteyden muodostamisen ja metatietojen pyytämisen aikarajoitukset.

Oletusarvoisesti kolmekymmentä sekuntia.

22.18 MQTT-lähde

MQTT-lähde tilaa aiheen suodattimen.

Määritelty MQTTSource-nimellä internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
topictekstikyllä—
reconnectkestoaika, esim. 30s tai 5mei5s

22.18.1 reconnect

Uudelleen_yhdistä on odotusaika yhteyden menetettyä tai viestin käsittelyssä tapahtuneen virheen jälkeen.

Defaults to 5s.

22.19 Pub Sub -lähde

PubSub-lähde hakee viestejä Pub/Sub-tilauksesta.

Määritelty PubSubSource-nimellä internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
subscriptiontekstikyllä—
max_messageskokonaislukuei10
reconnectkestoaika, esim. 30s tai 5mei5s

22.19.1 max_viestit

Max_viestit määrittää, montako viestiä haetaan kerran.

Ne käsitellään edelleen yksitellen, järjestyksessä. Oletusarvo on 10.

22.19.2 reconnect

Uudelleen_yhdistä on odotusaika virheen jälkeen.

Defaults to 5s.

22.20 S3-lähde

S3-lähde noutaa objekteja bucketista.

Määritelty S3Source-nimellä internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
buckettekstikyllä—
path_styletrue tai falseei—
prefixtekstiei—
suffixtekstiei—
after_readtekstiei—
move_totekstieiprosessoidut/
error_prefixtekstieivirhe/
poll_intervalkestoaika, esim. 30s tai 5mei30s
max_object_sizekokonaislukuei16 MiB
framedtrue tai falseei—

22.20.1 etuliite

Etuliite rajoittaa, mitä objekteja luetaan, esim. saapuneet/.

Tyhjä lukee koko bucketin, mikä on kielletty after_read: move, ellei move_to ole sen ulkopuolella - muuten siirretyt objektit luetaan uudelleen.

22.20.2 luettu_jälkeen

AfterRead on siirrä (oletus) tai poista.

Ei ole jätä: bucketissa ei ole tiedostoa, jonka poller voisi muistaa nähneensä uudelleenkäynnistyksen yli, joten objektien jättäminen tarkoittaa, että ne luetaan uudelleen jokaisella Perfuse-käynnistyksellä.

22.20.3 siirrä

MoveTo on etuliite, johon käsitelty objekti siirtyy.

Oletusarvo on prosessoidut/.

22.20.4 virhe_etuliite

ErrorPrefix on paikka, johon siirtyy objekti, jota ei voitu käsitellä, jotta yksi virheellinen tiedosto ei estä muita.

Oletusarvo on virhe/.

22.20.5 tarkastusväli

Tarkastusväli listauksien välillä.

Defaults to 30s.

22.20.6 maksimikokoa

MaxObjectSize hylkää kaiken suuremman.

Oletusarvo on 16 MiB.

22.20.7 kehytetty

Framed lukee useita MLLP-kehytettyjä viestejä yhdestä objektiista.

Muuten objekti on yksi viesti.

22.21 SFTP-lähde

SFTP-lähde kerää viestejä SFTP-palvelimen hakemistosta.

Erittäin yleinen ja harvoin puhuttu. Laboratorio- tai radiologijärjestelmä kirjoittaa tiedoston joka muutaman minuutin välein, SFTP-palvelin pitää siitä huolta, ja joku on tullut noutamaan sen. Puolet niistä syötteistä, joita kuvaillaan "me lähettämme sinulle HL7", on tätä.

Osio, jota kannattaa huomioida, ei ole siirto. Se on, että kirjoitettava tiedosto ja valmis tiedosto näyttävät samalta SFTP:n kautta, joten liian innokas kysely kerää puolen viestin. Se tuottaa katkaistun, mutta usein parsittavan HL7-viestin, joka on huonoin mahdollinen tulos: se hyväksytään, vahvistetaan, tallennetaan ja toimitetaan, ja puuttuva puoli ei mainita enää.

Määritelty SFTPSource-nimellä internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
hosttekstikyllä22
usertekstikyllä—
passwordtekstiei—
key_filetekstiei—
key_passphrasetekstiei—
known_hosts_filetekstiei—
insecure_skip_host_key_checktrue tai falseei—
dirtekstikyllä—
patterntekstieikaikki
poll_intervalkestoaika, esim. 30s tai 5mei—
after_readtekstiei—
move_totekstiei—
error_dirtekstiei—
stable_forkestoaika, esim. 30s tai 5mei5s
framedtrue tai falseei—
max_file_sizekokonaislukuei64MB
timeoutkestoaika, esim. 30s tai 5mei60s

22.21.1 isäntä

Isäntä on palvelin, jossa on valinnainen portti.

Defaults to 22.

22.21.2 salasana

Salasana todentaa salasanalla.

Prefer KeyFile.

22.21.3 avain_tiedosto

AvainTiedosto on yksityinen avain.

Parempi valinta, ja se, mitä sairaalan turvallisuustiimit pyytävät.

22.21.4 tunnetut_isännät_tiedosto

TunnetutIsännätTiedosto vahvistaa palvelimen identiteetin.

Vaadittu, ellei TurvatonOhitaIsäntäAvainTarkistus ole asetettu. Ilman sitä ei ole mitään, joka erottaisi oikean palvelimen mistä tahansa, joka vastaa kyseisellä osoitteella, ja tunnistetiedot toimitetaan ennen kuin kukaan huomaa.

22.21.5 turvaton_ohita_isäntäavain_tarkistus

TurvatonOhitaIsäntäAvainTarkistus hyväksyy minkä tahansa isäntäavaimen.

Olemassa, koska täydellinen kieltäytyminen lähettää ihmiset shell-komentosarjaan, jossa on StrictHostKeyChecking=no, joka on huonompi kaikin tavoin, myös auditoinnin kannalta. Se varoittaa äänekkäästi, ja se ei ole koskaan oletus.

22.21.6 malli

Malli valitsee tiedostot glob-menetelmällä.

Oletuksena valitaan kaikki.

22.21.7 siirrä

MoveTo on etäinen hakemisto, johon tiedostot siirretään lukemisen jälkeen.

Vaaditaan, kun AfterRead on "move".

22.21.8 vakaata

StableFor määrittää, kuinka kauan tiedoston koko ja muokkausaika on oltava muuttumattomia ennen kuin se luetaan.

Defaults to 5s.

Tämä asetus estää puolivälissä olevan viestin keräämisen. Nolla tarkoittaa, että luetaan mitä on, mikä toimii oikein, kunnes tiedosto on tarpeeksi suuri tai verkkoyhteys on tarpeeksi hidas, jotta kirjoittaminen kestää pidempään kuin kysely.

22.21.9 kehytetty

Framed kertoo, että tiedosto sisältää MLLP-kehytettyjä viestejä.

Kun arvo on false, tiedosto jaetaan MSH-rajauksilla.

22.21.10 max_tiedostokoko

MaxFileSize hylkää tiedoston, joka on suurempi kuin tämä määrä tavuja.

Oletuksena 64 Mt.

22.21.11 aikakatkaisu

Aikakatkaisu rajoittaa yksittäisen yhteyden.

Defaults to 60s.

22.22 SMB-lähde

SMBSource kerää tiedostoja Windows-tiedostojakoon.

Määritelty SMBSource-nimellä internal/config-kohdassa.

AvainTyyppiVaadittuOletus
hosttekstikyllä—
sharetekstikyllä—
usertekstiei—
passwordtekstiei—
domaintekstiei—
roottekstiei—
timeoutkestoaika, esim. 30s tai 5mei30 sekuntia

22.22.1 isäntä

Isäntä on palvelin, jossa on valinnainen portti.

Oletetaan portti 445.

22.22.2 jakoa

Jakoa on jakonimi vain: "data" kohteessa \\\server\data.

Polku tässä kohdassa hylätään sen sijaan, että se leikataan.

22.22.3 käyttäjä

Käyttäjä ja salasana ovat Windows-tunnukset.

Vaaditaan käytännössä.

Jakoa, johon voidaan päästä ilman tunnuksia, on harvinaista riittävästi verkkotunnusalueella, joten tyhjä käyttäjä tässä kohdassa on paljon todennäköisemmin virhe kuin vierastilijakoa - mutta se hyväksytään, koska sen hylkääminen estäisi yhden järjestelyn, jossa se on oikein. Kun tili kuuluu verkkotunnusalueeseen, aseta Domain-kohta myös: verkkotunnustilin todennus ilman sitä epäonnistuu tavalla, joka näyttää väärältä salasanalta.

22.22.4 salasana

Käyttäjä ja salasana ovat Windows-tunnukset.

Vaaditaan käytännössä.

Jakoa, johon voidaan päästä ilman tunnuksia, on harvinaista riittävästi verkkotunnusalueella, joten tyhjä käyttäjä tässä kohdassa on paljon todennäköisemmin virhe kuin vierastilijakoa - mutta se hyväksytään, koska sen hylkääminen estäisi yhden järjestelyn, jossa se on oikein. Kun tili kuuluu verkkotunnusalueeseen, aseta Domain-kohta myös: verkkotunnustilin todennus ilman sitä epäonnistuu tavalla, joka näyttää väärältä salasanalta.

22.22.5 domain

Domain on Windowsin verkkotunnus tai työryhmä.

Tyhjä on yleensä oikein paikalliselle tilille.

22.22.6 aikakatkaisu

Aikakatkaisu rajoittaa yhtä operaatiota.

Oletusarvoisesti kolmekymmentä sekuntia.

On arvoa nostaa, kun jaetaan resursseja eri sivujen välillä. SMB-operaatio etäpalvelimella on hitaampi kuin sama operaatio paikallisesti, joten oletusarvo, joka on säädetty lähiverkkoon, tuottaa aikakatkaisuja, jotka näyttävät jakamattomalta.

22.23 SOAP-lähde

SOAP-lähde hyväksyy viestit, jotka on pakattu SOAP-koteloon.

Vastine SOAP-kohteelle ja harvinaisemmalle suunnalle: useimmat sairaalan integraatiot ovat Perfusen soittamia palveluja eikä niiden kutsujia. Se on olemassa, koska Mirthin Web Service Listener on olemassa, ja sivuston lähettävä järjestelmä puhuu vain SOAP:ia eikä voi siirtyä ilman tätä.

Tarkoituksella ei yleinen web-palvelurunko. Se hyväksyy kotelon, ottaa viestin siitä ja vastaa kotelolla. Siinä ei ole WS-Security, MTOM, WS-Addressing eikä generoituja sidoksia - samat puutteet kuin kohteessa, samasta syystä: WS-Securityn puoliväliratkaisu on huonompi kuin ei mitään.

Määritelty SOAPSource-nimellä internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
listentekstikyllä—
profiletekstiei—
pathtekstiei"/"
versiontekstiei1
elementtekstiei—
base64true tai falseei—
response_elementtekstiei"AckResponse"
response_namespacetekstiei—
wsdltekstiei—
tlstlsconf.Settings (lohkko, jätä tyhjäksi jättää pois)ei—
tokentekstiei—
usernametekstiei—
passwordtekstiei—
max_message_sizekokonaislukuei—
read_timeoutkestoaika, esim. 30s tai 5mei—
ackAckei—
fault_on_naktrue tai falseei—

22.23.1 kuuntele

Kuuntele on osoite, jota palvelin kuuntelee.

Required.

22.23.2 profiili

Profiilinimi on standardipalvelun nimi, jonka tämä päätepiste toteuttaa.

Tyhjä hyväksyy minkä tahansa kotelon, kuten alla on määritelty.

"cdc-iis" vastaa immunisaatiorekisterin tavoin, CDC-rajapinnalla (urn:cdc:iisb:2011): connectivityTest heijastetaan, submitSingleMessage:n hl7Message on viesti ja kanavan vahvistus palautetaan takaisin, WSDL palveltu ?wsdl-osoitteessa ja käyttäjänimi ja salasana, kun ne on asetettu, tarkistetaan kehon (missä WSDL asettaa ne) eikä HTTP-autentikointia vastaan.

22.23.3 polku

Polku on URL-polku, jolla kotelot hyväksytään.

Defaults to "/".

22.23.4 versio

Versio on SOAP-versio, johon vastataan, "1.1" tai "1.2".

Defaults to 1.1.

Pyynnöt hyväksytään kummassakin versiossa, koska lähettäjä, joka tekee tämän väärin, on yleinen ja sen hylkääminen opettaa ketään mitään. Asetus ohjaa vastausta, jossa väärä versio tarkoittaa, että lähettäjä ei voi lukea vastausta.

22.23.5 elementti

Elementti on SOAP-ruumiin sisällä oleva elementti, joka sisältää viestin.

Tyhjä tarkoittaa koko runko-tekstiä.

Nimetty sen sijaan, että se arvataan, koska runko voi sisältää useita elementtejä - viestin lisäksi lähettäjän tunniste ja aikaleima - ja koko rungon ottaminen antaisi moottorille XML-fragmentin, jota se odottaa HL7:ää.

22.23.6 base64

Base64 purkaa elementin sisällön ennen kuin se käsitellään viestinä.

Yleinen todellisissa palveluissa, koska HL7 sisältää rivivaihtoja ja soittajat, jotka eivät ole ajatelleet sitä, lopputuloksena on XML, joka vahingoittaa niitä. Jos sisältö purkaa base64:ksi, mutta ei ollut tarkoitus olla sellainen, tuloksena ei ole viesti, ja moottori sanoo sen - josta johtuu, että tämä on eksplisiittinen eikä haistettu.

22.23.7 vastaus_elementti

ResponseElement nimeää elementin, joka käärii vahvistuksen vastauksessa.

Oletusarvo on "AckResponse".

22.23.8 wsdl

WSDL on tiedosto, joka palvelee kuuntelupolulla ?wsdl:llä.

Tyhjä tarkoittaa, että mitään ei palvele.

Tiedosto sen sijaan, että se olisi jotain generoitu. Generoitu WSDL kuvasi, mitä tämä päätepiste hyväksyy, mikä on lähes aina se, mitä lähettävä järjestelmä on rakennettu vastaan - ja WSDL, joka on lähes oikein, maksaa enemmän aikaa kuin ei WSDL ollenkaan, koska se näyttää auktoriteetilta.

22.23.9 käyttäjänimi

Käyttäjänimi ja Salasana, kun ne on asetettu, vaativat HTTP-perusautentikointia.

Tarjotaan tokenin rinnalla, koska SOAP-kutsujat odottavat yleisesti perusautentikointia, ja sivuston, jonka lähettävä järjestelmä ei voida muuttaa, tarvitsee valinnan, jota se jo on.

22.23.10 salasana

Käyttäjänimi ja Salasana, kun ne on asetettu, vaativat HTTP-perusautentikointia.

Tarjotaan tokenin rinnalla, koska SOAP-kutsujat odottavat yleisesti perusautentikointia, ja sivuston, jonka lähettävä järjestelmä ei voida muuttaa, tarvitsee valinnan, jota se jo on.

22.23.11 max_viestikoko

MaxViestikoko rajoittaa saapuvan viestin koon.

Nolla asettaa oletusarvon.

22.23.12 fault_on_nak

FaultOnNak vastaa negatiivista vahvistusta SOAP-virheellä sen sijaan, että se olisi normaali vastaus, joka sisältää NAK:n.

Pois oletuksena, mikä on oikea oletus ja sen arvoisa selittää. HL7:llä on jo tapa sanoa "Vastaanotin tämän ja hylkäsin sen", ja se on NAK - onnistunut vaihto, joka ilmoittaa hylätyn viestin. Muuttaa sama asia kuljetusvirheksi kertoo lähettäjälle, että sen pyyntö oli virheellinen, mikä ei ollut, ja monet asiakkaat vastaavat yrittämällä uudelleen ikuisesti.

Se on olemassa, koska jotkut kutsujat tarkastelevat vain HTTP-tilakoodia ja kohtelisivat muuten hylkäyksen onnistumisena.

22.24 SQS-lähde

SQSSource lukee viestejä SQS-jonosta.

Viesti poistetaan vasta, kun kanava on käsitellyt sen - toimittanut, suodattanut tai epäonnistunut tavalla, jota kanava merkitsee. Siihen asti se pysyy jonossa, näkymättömänä näkyvyysajan, ja tulee takaisin, jos Perfuse lopettaa. Joten viestiä ei koskaan häviä; hinta on, että yksi voi saapua kahdesti, mikä SQS itsessään jo sallii.

Määritelty SQSSource-na internal/config:issa.

AvainTyyppiVaadittuOletus
queue_urltekstikyllä—
wait_secondskokonaislukuei20: tyhjä jono maksaa yhden pyynnön joka kahdenkymmenen sekunnin jälkeen
max_messageskokonaislukuei10
visibility_timeoutkesto, kuten 30s tai 5meijonon oma asetus

22.24.1 näkyvyys_aika

NäkyvyysAika on se aika, jonka kuluessa vastaanotettu viesti pysyy piilossa, kun sitä käsitellään.

Oletusarvo on jonon oma asetus.

22.25 Sarjallinen lähde

SerialSource lukee viestejä sarjaportista.

Miksi sarjaliittymä vuonna 2026

Koska laitteet ovat edelleen olemassa. Verenkaasuanalysaattori, joka ostettiin vuonna 2009, jossa on toimiva anturi ja 25-nastainen pistoke, sairaalahuoneen monitori, paino dialyysiyksikössä, vanhempi anestesialaitteisto. Mikään näistä laitteista ei koskaan saa Ethernet-liitintä, useat niistä maksavat kuusi numeroa, ja vaihtoehto niiden lukemiseen on, että joku kirjoittaa tulokset lomakkeeseen.

Mirthilla on sarjaliitännäinen. Perfusella ei ollut mitään, ja sivustolla, jolla oli yksi näistä, ei ollut reittiä lainkaan.

Kehyksen määrittely on jaettu TCP-liitännäisen kanssa

Kehystykset ovat samat riippumatta siitä, mistä bittit tulevat: analyysi, joka puhuu STX/ETX-yli soketin, puhuu STX/ETX-yli johtimella. Tämä uudelleenkehys uudelleenkehys TCP-kehyslohkoa sen sijaan, että määritellään oma, mikä tarkoittaa myös, että laite, joka siirretään sarjaliitännästä sarja-Ethernet-sovittimeen, säilyttää kehyskonfiguraationsa.

Mitä on erityistä sarjalinjassa

Yhteyttä ei ole. Soketti kertoo, kun vertaispoisto on poistunut; johtimella ei ole. Irrotettu johto, laite sammutettu ja laite, jolla ei ole mitään sanottavaa, eivät ole erotettavissa toisistaan - kaikki kolme ovat hiljaisuutta. Tämän vuoksi quiet_after on olemassa: ilman jotain, joka sanoo "tämä linja on ollut hiljainen pidempään kuin pitäisi", kuollut syöte näyttää täsmälleen hiljaiselta yöltä.

Määritelty SerialSource-nimellä internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
porttekstikyllä—
baudkokonaislukukyllä—
data_bitskokonaislukuei8
paritytekstieinone
stop_bitstekstiei1
flow_controltekstieinone
max_message_sizekokonaislukuei—
quiet_afterkestoaika, esim. 30s tai 5mei—
replytekstiei—
reply_texttekstiei—
reopen_afterkestoaika, esim. 30s tai 5mei—

22.25.1 baud

Baud on nopeus.

Vaadittu, koska arvauksen tuottaa bittien sijaan virhe.

Väärä baud-nopeus ei epäonnistu. Se toimittaa uskottavan näköistä roskaa: kehyksen bittit näkyvät satunnaisesti, joskus muutaman merkin juoksu koodataan tulostettaviksi merkeiksi, ja suvaitseva parseri hyväksyy joitakin niistä. Siinä on tietoisesti ei oletusta.

22.25.2 parity

Pariteetti on none, odd, even, mark tai space.

Oletuksena on none.

22.25.3 stop_bits

StopBits on 1, 1,5 tai 2, kirjoitettu "1", "1,5" tai "2".

Defaults to 1.

22.25.4 flow_control

FlowControl on none, hardware tai software.

Oletuksena on none.

Arvoa kannattaa asettaa oikein sen sijaan, että se jätetään asettamatta. Laite lopettaa lähetyksen kesken pitkän viestin ja tuloksena on katkaistu viesti sen sijaan, että se epäonnistuisi.

22.25.5 quiet_after

QuietAfter kirjaa varoituksen, kun mitään ei ole vastaanotettu tämän ajan.

Ainoa tapa huomata kuollut sarjasyöte. Irrotettu johto ja hiljainen yö ovat samaa hiljaisuutta, joten joku on sanottava, kuinka kauan on liian pitkä tälle laitteelle.

22.25.6 reopen_after

ReopenAfter on se aika, jonka odottaa ennen kuin avaa uudelleen portin, joka epäonnistui.

USB-sarjaliitäntä, joka on irrotettu ja kytketty takaisin, tulee takaisin samana laitteen polkuna, mutta eri ydinohjaimen käsittelyssä, joten vanha palauttaa virheitä ikuisesti. Uudelleenavaus on ainoa palautus, ja sen tekeminen tiiviissä silmukassa täyttää lokin.

22.26 Lähde

Lähde on paikka, josta kanava vastaanottaa viestejä.

Määritelty Source-kohtaa internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
typeLähdeTyyppikyllä—
listentekstikyllä—
max_message_sizekokonaislukuei—
idle_timeoutkestoaika, esim. 30s tai 5mei—
max_connectionskokonaislukuei—
tlstlsconf.Asetukset (lohko, jätä tyhjäksi jättää pois)ei—
httpHTTPLähde (lohko, jätä tyhjäksi jättää pois)ei—
soapSOAPLähde (lohko, jätä tyhjäksi jättää pois)ei—
dicomwebDICOMwebLähde (lohko, jätä tyhjäksi jättää pois)ei—
directDirectLähde (lohko, jätä tyhjäksi jättää pois)ei—
dicomDICOMLähde (lohko, jätä tyhjäksi jättää pois)ei—
fileTiedostolähde (lohko, jätä tyhjäksi jättää pois)ei—
tcpTCPLähde (lohko, jätä tyhjäksi jättää pois)ei—
ftpFTPLähde (lohko, jätä tyhjäksi jättää pois)ei—
smbSMBLähde (lohko, jätä tyhjäksi jättää pois)ei—
webdavWebDAVLähde (lohko, jätä tyhjäksi jättää pois)ei—
serialSarjaliikennelähde (lohko, jätä tyhjäksi jättää pois)ei—
dicom_queryDICOMKyselylähde (lohko, jätä tyhjäksi jättää pois)ei—
brokerVälittäjälähde (lohko, jätä tyhjäksi jättää pois)ei—
kafkaKafkaLähde (lohko, jätä tyhjäksi jättää pois)ei—
sqsSQSLähde (lohko, jätä tyhjäksi jättää pois)ei—
s3S3Lähde (lohko, jätä tyhjäksi jättää pois)ei—
amqpAMQPLähde (lohko, jätä tyhjäksi jättää pois)ei—
azure_blobAzureBlobLähde (lohko, jätä tyhjäksi jättää pois)ei—
emailSähköpostilähde (lohko, jätä tyhjäksi jättää pois)ei—
as2AS2Lähde (lohko, jätä tyhjäksi jättää pois)ei—
pgpPGPVastaanotto (lohko, jätä tyhjäksi jättää pois)ei—
mqttMQTTLähde (lohko, jätä tyhjäksi jättää pois)ei—
ibm_mqIBMMQLähde (lohko, jätä tyhjäksi jättää pois)ei—
pubsubPubSubLähde (lohko, jätä tyhjäksi jättää pois)ei—
gcsGCSSähde (lohko, jätä tyhjäksi jättää pois)ei—
databaseTietokantalähde (lohko, jätä tyhjäksi jättää pois)ei—
sftpSFTPLähde (lohko, jätä tyhjäksi jättää pois)ei—
javascriptJavaScriptLähde (lohko, jätä tyhjäksi jättää pois)ei—
ackVahvistusei—

22.26.1 tyyppi

Tyyppi on siirtotapa.

Vain MLLP on toteutettu.

22.26.2 max_viestikoko

MaxMessageSize määrittää yhden saapuvan viestin koon.

Nolla käyttää siirtotavan oletusta.

22.26.3 idle_timeout

IdleTimeout sulkee yhteyden, joka on ollut hiljainen tämän ajan.

Nolla tarkoittaa, että yhteyttä ei suljeta koskaan, mikä on yleensä oikein: sairaalan syöte pitää yhteyden auki kuukausia ja on hiljainen yöaikaan.

22.26.4 max_yhteydet

MaxYhteydet määrittää samanaikaiset yhteydet.

Nolla tarkoittaa, että yhteyksiä ei ole rajoitettu.

22.27 TCP-lähde

TCP-lähde kuuntelee sokettia viestejä varten, jotka eivät välttämättä ole HL7.

Miksi tämä on erillinen MLLP-lähteestä

MLLP on yksi kehys, ja Perfuse on aina puhunut sitä. Paljon laitteita ei tee: laboratorioanalyysi, paino, vuodevaaka, vanhempi laskutusjärjestelmä. Kukin näistä laitteista on omat konventionsa, ja Mirthin TCP-liitäntä kattaa kaikki nämä, joten sivustolla, jolla on soketti, joka ei ollut HL7, ei voinut käyttää Perfusea ollenkaan.

Määritelty TCPSource-kohtaa internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
listentekstikyllä—
max_message_sizekokonaislukuei—
idle_timeoutkestoaika, esim. 30s tai 5mei—
max_connectionskokonaislukuei—
replytekstiei—
reply_texttekstiei—
tlstlsconf.Settings (lohkko, jätä tyhjäksi jättää pois)ei—

22.27.1 idle_timeout

IdleTimeout sulkee yhteyden, joka on ollut hiljainen tämän ajan.

Nolla tarkoittaa, että yhteyttä ei suljeta koskaan, mikä on yleensä oikein: laitteen syöte pitää yhteyden auki kuukausia ja on hiljainen yöaikaan.

22.27.2 max_yhteydet

MaxYhteydet määrittää samanaikaiset yhteydet.

Nolla tarkoittaa, että yhteyksiä ei ole rajoitettu.

22.27.3 vastaus

Vastaus on se, mitä lähetetään takaisin jokaisen viestin jälkeen: ei mitään, vahvistus tai kiinteä merkkijono.

Useimmat raakasyötteet odottavat, että mitään ei lähetetä. Jotkut odottavat yhtä ACK-merkkiä. Laite, joka odottaa vastausta ja ei saa sitä, yleensä yrittää uudelleen samaa viestiä loputtomasti, joten tämä on arvokasta olla selkeä.

22.28 Web DAV -lähde

WebDAVSource kerää tiedostoja WebDAV-kokoelmasta.

Tämä ilmenee: asiakirjahallintajärjestelmissä, SharePointissa, Nextcloudissa ja valmistajien portaaleissa, jotka tarjoavat pudotusliittymän HTTPS:n yli, koska se on ainoa ulospäin suuntautuva portti, jonka asiakkaiden palomuurit sallivat.

Määritelty WebDAVSource-nimellä internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
urltekstikyllä—
usertekstiei—
passwordtekstiei—
insecure_skip_verifytrue tai falseei—
timeoutkestoaika, esim. 30s tai 5meikuusi sekuntia

22.28.1 käyttäjä

Käyttäjä ja salasana tunnistautuvat HTTP-perusautentikaatiolla.

Perusautentikointi lähettää salasanan otsikossa, jota suojelee vain TLS, joten ne kuuluvat https-osoitteeseen. Http-osoitteessa ne ovat luettavissa reitillä olevien asioiden toimesta, eikä palvelimelta tule varoitusta siitä.

22.28.2 salasana

Käyttäjä ja salasana tunnistautuvat HTTP-perusautentikaatiolla.

Perusautentikointi lähettää salasanan otsikossa, jota suojelee vain TLS, joten ne kuuluvat https-osoitteeseen. Http-osoitteessa ne ovat luettavissa reitillä olevien asioiden toimesta, eikä palvelimelta tule varoitusta siitä.

22.28.3 aikakatkaisu

Aikakatkaisu rajoittaa yhden pyynnön.

Oletusarvo on kuusi sekuntia.

Tämä on tarkoituksella pidempi kuin FTP- ja SMB-osoitteiden oletukset. WebDAV-kokoelman luettelo on yksi PROPFIND-pyyntö, johon palvelin voi kuluttaa paljon aikaa suuren hakemiston kokoamiseen, eikä osittaisia tuloksia voida käyttää.

23 Kohdeviite

Jokainen tapa, jolla kanava voi lähettää viestejä, ja jokainen avain, jonka kunkin kanava hyväksyy. Kanavalla voi olla useita kohteita, ja ne ovat riippumattomia: yhden epäonnistuminen ei estä muita.

23.1 AMQP-kohde

AMQPDestination lähettää jonoon tai aiheeseen ja ilmoittaa onnistumisen vasta kun välittäjä on hyväksynyt viestin.

Määritelty AMQPDestination-nimellä internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
content_typetekstieikanavan tiedostotyyppi

23.1.1 sisällön_tyyppi

Sisällön tyyppi lähetetään kunkin viestin kanssa.

Oletusarvo on kanavan tiedostyyppi.

23.2 AS2-kohde

AS2Destination lähettää kunkin viestin AS2: allekirjoitettuna omalla avaimella, salattuna kumppanin varmenneksi, lähetetty kumppanin osoitteeseen, ja oletusarvoisesti toimitetaan vain kun kumppanin allekirjoittama kuitti nimeää saman tiiviste.

Määritelty AS2Destination-nimellä internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
urltekstikyllä—
fromtekstikyllä—
totekstikyllä—
cert_filetekstiei—
key_filetekstiei—
partner_cert_filetekstiei—
unsignedtosi tai epätosiei—
unencryptedtosi tai epätosiei—
compresstosi tai epätosiei—
receipttekstiei—
unsigned_receipttosi tai epätosiei—
receipt_urltekstiei—
content_typetekstiei—
file_nametekstiei—
subjecttekstiei—
usernametekstiei—
passwordtekstiei—
tlstlsconf.Asetukset (lohkko, jätä tyhjäksi jättämiseksi pois)ei—

23.2.1 pakkaus

Pakkaus pakkaa kuorman (zlib, RFC 5402) ennen allekirjoittamista ja salaamista.

Jokainen AS2-vastaanottaja, joka ilmoittaa version 1.1 tai myöhemmän, lukee sen; kysy kumppanilta ennen kuin otat sen käyttöön.

23.2.2 allekirjoittamaton_vastaanotto

AllekirjoittamatonVastaanotto pyytää vastaanottoa, joka ei ole allekirjoitettu.

Pois: allekirjoitettu pyydetään ja allekirjoittamaton kieltäydytään.

23.2.3 sisällön_tyyppi

ContentType on kuorman MIME-tyyppi.

Oletuksena kanavan tiedostyyppi: application/edi-x12, application/edifact, application/hl7-v2, muutoin application/octet-stream.

23.3 Azure Blob -kohde

AzureBlobDestination kirjoittaa jokaisen viestin lohko-blobina.

Määritelty AzureBlobDestination-na internal/config: ssä.

AvainTyyppiVaadittuOletus
blobtekstiei${date}/${channel}/${control_id}
tiertekstiei—
content_typetekstiei—

23.3.1 blob

Blob nimeää kunkin blobin, S3-kohteen merkintöjä käyttäen.

Oletuksena ${date}/${channel}/${control_id}.hl7.

23.3.2 tier

Tier on Hot, Cool, Cold tai Archive.

Arkisto on offline-tilassa: blobin uudelleenlukeminen edellyttää uudelleenimuontamista, mikä kestää tunteja.

23.4 Välittäjäkohde

BrokerDestination julkaisee viestit viestinvälittäjään.

Mirthin JMS-kirjoittaja.

Määritelty BrokerDestination-na internal/config: ssä.

AvainTyyppiVaadittuOletus
addrtekstikyllä—
destinationtekstikyllä—
logintekstiei—
passcodetekstiei—
hosttekstieiosoitteen isäntä
content_typetekstieitext/plain HL7: lle
headersteksti-teksti-karttaei—
persistenttosi tai epätosi (lohkko, jätä pois jättämiseksi)eitosi
timeoutkestoaika, kuten 30s tai 5mei—
tlstlsconf.Asetukset (lohkko, jätä pois jättämiseksi)ei—

23.4.1 osoite

Addr on is välittäjän isäntä ja portti.

Required.

23.4.2 kohde

Kohde on jono tai aihe, johon julkaistaan.

Required.

23.4.3 kirjautuminen

Kirjautuminen ja salasana tunnistavat.

Useimmat välittäjät kieltävät anonyymin yhteyden.

23.4.4 salasana

Kirjautuminen ja salasana tunnistavat.

Useimmat välittäjät kieltävät anonyymin yhteyden.

23.4.5 isäntä

Isäntä on virtuaalinen isäntä.

Oletusarvoisesti osoitteen isäntä.

Arvoa asettaa nimenomaisesti välittäjällä, joka isännöi useita virtuaalisisältöjä, joissa oletus laskee julkaisun sille, joka vastaa palvelimen omalle nimelle - jono, joka on olemassa, hyväksyy viestin ja jota kukaan ei lue.

23.4.6 sisällön_tyyppi

Sisällön tyyppi lähetetään kunkin viestin kanssa.

Oletuksena text/plain HL7: lle.

23.4.7 otsikot

Otsikot lähetetään jokaisen viestin kanssa.

Konfiguraatio koskee vain metatietoja, ei koskaan viestin sisältöä. Otsikko, joka otetaan kentästä, laittaisi potilastunnisteita välittäjän metatietoihin, jotka kirjataan, indeksoidaan ja ovat näkyvissä jokaiselle sovellukselle jonossa.

23.4.8 pysyvä

Pysyvä pyytää välittäjää selviytymään uudelleenkäynnistyksestä.

Oletusarvo on true.

True, koska epäpysyvä viesti katoaa, kun välittäjä käynnistetään uudelleen, eikä se ole kohtuullinen oletusarvo kliinisille tiedoille. False on olemassa aidosti väliaikaiselle syötteelle - seurantasyke - ja se on valittava.

23.5 CDA-kohde

CDADestination määrittää CDA-kohteen: se ottaa kliinisen asiakirjan, joka on sisällytetty HL7 v2 -viestiin, muuntaa sen ja kirjoittaa tai lähettää tuloksen.

Tämä on olemassa, koska asiakirja saapuu harvoin yksin. Se saapuu base64-koodattuna MDM^T02:ssa, ja jokainen moottori, joka kohdellaan viestiä läpinäkymättömänä kokonaisuutena, jättää asiakirjan lukemattomaksi. Omistaminen molemmista päistä on tarkoitus.

Määritelty CDADestination -nimellä internal/config -tiedostossa.

AvainTyyppiVaadittuOletusarvo
urltekstiei—
dirtekstiei—
writetekstiei—
versiontekstieiR5
identifier_systemsteksti-teksti-karttaei—
require_agreementtrue tai falseei—
on_no_documenttekstiei—
headersteksti-teksti-karttaei—
bearer_tokentekstiei—

23.5.1 url

URL on FHIR-palvelin, johon muunnettu paketti lähetetään.

Jätä se tyhjäksi kirjoittaaksesi Dir:iin sen sijaan. Yksi näistä kahdesta on vaadittu.

23.5.2 dir

Dir kirjoittaa tuloksen tiedostoihin sen sijaan, että se lähetettäisiin.

Hyödyllinen laskeutumisalueelle, josta toinen prosessi noutaa, ja nähdäksesi, mitä muunnos tuottaa ennen kuin se osoitetaan live-palvelimeen.

23.5.3 write

Write valitsee, mitä kirjoitetaan tai lähetetään:

fhir muunnettu transaktiokokoonpano (oletus) asiakirja alkuperäinen asiakirjan tavut, muuttumattomat molemmat, asiakirjan rinnalla kokoonpanon siirto PACIO Transitions of Care -siirtöyhdistelmän yhteenveto: yksi FHIR R4 -asiakirjakokoonpano paikkaan, jonne potilas seuraavaksi menee (hoitokoti, kuntoutusyksikkö, kotisairaanhoito), lähetetty url/Bundle -osoitteeseen tai kirjoitettu hakemistoon dir

"Asiakirja" on arvokas ominaisuus: sivusto, joka haluaa CDAnsa levyllä asiakirjojen tiimille, ei tarvitse FHIR-muunnosta lainkaan.

23.5.4 identifier_systems

IdentifierSystems kartoittaa OID-juuren asiakirjasta URI:ksi, jotta MRN:stä tulee nimetty.

CDA tunnistaa henkilöt OID:n avulla ja FHIR URI:n avulla, eikä kumpaakaan voida johtaa toisesta.

23.5.5 require_agreement

RequireAgreement kieltäytyy asiakirjasta, jonka kerronta ja koodatut sisääntulot ristiriitaiset toistensa kanssa.

Oletusarvoisesti pois päältä, ja tarkoituksella. Tarkistus on arvokas, mutta se on arvio asiakirjasta, jonka joku toinen on luonut, ja kanava, joka hiljaisesti pudottaa todellisia kliinisiä asiakirjoja, koska lähettäjän C-CDA-generaattori on laiskaa, on huonompi kuin sellainen, joka välittää ne varoituksella. Sivusto, joka on tarkastanut omat löydöksensä ja päättänyt, että haluaa portin, voi kääntää sen päälle.

23.5.6 on_no_document

OnNoDocument päättää, mitä tapahtuu, kun viesti ei sisällä kliinistä asiakirjaa:

ohita toimita ei mitään ja raportoi onnistumisen (oletus) epäonnistua kohdella sitä toimitusvirheenä

Oletusarvo on ohittaa, koska kanava, joka sisältää sekaisin ADT- ja MDM-syötteen, muuten epäonnistuisi jokaisen sisääntulon. Kanava, joka on omistettu asiakirjoille, tulisi asettaa epäonnistumaan, koska asiakirjaviesti, jossa ei ole asiakirjaa, on todellinen ongelma lähettäjällä.

23.5.7 bearer_token

BearerToken lähetetään Authorization-otsakkeena.

Suosita ympäristömuuttujaviitettä kirjaimellista arvoa git-tiedostossa.

23.6 Kanavan kohde

KanavanKohde reitittää toiseen kanavaan samassa palvelimessa.

Määritelty ChannelDestination-na internal/config: ssä.

AvainTyyppiVaadittuOletus
nametekstikyllä—

23.7 DICOM-kohde

DICOMKohde lähettää kuvauksia C-STORE-palveluluokan käyttäjänä.

Mirth kutsuu tätä DICOM-lähettimeksi.

Määritelty DICOMDestination-na internal/config: ssä.

AvainTyyppiVaadittuOletus
addresstekstikyllä—
called_aetekstiei—
calling_aetekstiei—
transfer_syntaxestekstien luetteloei—
timeoutkestoaika, esim. 30s tai 5mei—
tlstlsconf.Settings (lohkko, jätä tyhjäksi jättämiseksi pois)ei—

23.7.1 osoite

Osoite on etäinen isäntä ja portti.

Required.

23.7.2 kutsuttu_ae

KutsuttuAE on se, mitä etäinen päätepiste kutsuu itseään, ja KutsuvaAE se, mitä tämä päätepiste kutsuu itseään.

Molemmat ovat tärkeitä. Sivustot konfiguroivat PACS: n hyväksymään vain yhden tietyn kutsuvan otsikon ja hylkäämään kaiken muun, joten yhdenmukaisuusvirhe on yleisin syy sille, että ensimmäinen yhteys epäonnistuu - ja epäonnistumisen näyttää olevan verkkovirhe.

23.7.3 kutsuva_ae

KutsuttuAE on se, mitä etäinen päätepiste kutsuu itseään, ja KutsuvaAE se, mitä tämä päätepiste kutsuu itseään.

Molemmat ovat tärkeitä. Sivustot konfiguroivat PACS: n hyväksymään vain yhden tietyn kutsuvan otsikon ja hylkäämään kaiken muun, joten yhdenmukaisuusvirhe on yleisin syy sille, että ensimmäinen yhteys epäonnistuu - ja epäonnistumisen näyttää olevan verkkovirhe.

23.7.4 transfer_syntaxes

Siirtosyntaksit rajoittavat sitä, mitä tarjotaan, mieltymyksen mukaisessa järjestyksessä.

Tyhjä tarjoaa kohteen oman koodauksen ja sitten implisiittisen VR-pienen päätteen fallbackina.

23.7.5 aikakatkaisu

Aikakatkaisu rajoittaa yhtä varastotoimintoa.

Nolla asettaa oletusarvon.

23.8 DICO Mweb-kohde

DICOMwebKohde tallentaa kunkin kohteen STOW-RS: n avulla.

Määritelty DICOMwebDestination-nimisenä internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
urltekstikyllä—
tokentekstiei—
usernametekstiei—
passwordtekstiei—
headerstekstin kartoitus tekstin mukaanei—
tlstlsconf.Asetukset (lohkko, jätä tyhjäksi jättää pois)ei—
timeoutkestoaika, esim. 30s tai 5mei—

23.9 Tietokantakohde

Tietokantakohde kirjoittaa jokaisen viestin tietokantaan.

Määritelty DatabaseDestination-nimisenä internal/config-kohteessa.

AvainTyyppiVaadittuOletus
drivertekstikyllä—
dsntekstikyllä—
statementtekstikyllä—
paramstekstien luetteloei—
timeoutkestoaika, esim. 30s tai 5mei30s
max_open_connskokonaislukuei4

23.9.1 ajuri

Ajuri nimeää tietokannan.

See SupportedDrivers.

23.9.2 lause

Lause suoritetaan kerran viestin kohdalla, ja Parametrit sitoutuvat siihen järjestyksessä.

Vakioviitatut ovat ajurin omia: $1 postgresiin, ? mysqlille ja sqliteen, @p1 sqlserveriin. Perfuse ei kirjoita niitä uudelleen, koska käännöskerros, joka sai vakioviittauksen väärin, sitouttaisi potilaan nimen väärään sarakkeeseen ja tuloksesta näyttäisi olevan kelvollista tietoa.

23.9.3 parametrit

Parametrit ovat HL7-polkuja tai ${...} -ilmauksia, jotka sitoutuvat lauseeseen järjestyksessä.

Arvot sitoutuvat aina parametreina eivätkä koskaan interpoloidu SQL-kyselyyn. Se ei ole vain asiasta: O'Brien on yleinen nimi, ja yhdistetty kysely rikkoutuu apostrofin kohdalla.

23.9.4 aikakatkaisu

Aikakatkaisu rajoittaa yksittäistä lausetta.

Defaults to 30s.

23.9.5 max_avoimia_yhteyksiä

MaxAvoinnaOlevatYhteydet rajoittaa joukkoa.

Defaults to 4.

23.10 Kohde

Kohde on yksi paikka, johon kanava lähettää viestejä.

Määritelty Destination-kohtena internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
nametekstikyllä—
typeDestinationTypekyllä—
enabledtrue tai false (lohkko, jätä tyhjäksi jättää pois)ei—
filtertekstiei—
addresstekstiei—
dirtekstiei—
file_nametekstiei—
temp_suffixtekstiei"
appendtrue tai falseei—
retain_hourskokonaislukuei—
tlstlsconf.Settings (lohkko, jätä tyhjäksi jättää pois)ei—
fhirFHIRDestination (lohkko, jätä tyhjäksi jättää pois)ei—
cdaCDADestination (lohkko, jätä tyhjäksi jättää pois)ei—
httpHTTPDestination (lohkko, jätä tyhjäksi jättää pois)ei—
databaseDatabaseDestination (lohkko, jätä tyhjäksi jättää pois)ei—
sftpSFTPDestination (lohkko, jätä tyhjäksi jättää pois)ei—
tcpTCPDest (lohkko, jätä tyhjäksi jättää pois)ei—
smtpSMTPDestination (lohkko, jätä tyhjäksi jättää pois)ei—
channelChannelDestination (lohkko, jätä tyhjäksi jättää pois)ei—
s3S3Destination (lohkko, jätä tyhjäksi jättää pois)ei—
ftpFTPDestination (lohkko, jätä tyhjäksi jättää pois)ei—
documentDocumentDestination (lohkko, jätä tyhjäksi jättää pois)ei—
soapSOAPDestination (lohkko, jätä tyhjäksi jättää pois)ei—
dicomwebDICOMwebDestination (lohkko, jätä tyhjäksi jättää pois)ei—
xdsXDSDestination (lohkko, jätä tyhjäksi jättää pois)ei—
directDirectDestination (lohkko, jätä tyhjäksi jättää pois)ei—
as2AS2Destination (lohkko, jätä tyhjäksi jättää pois)ei—
mpiMPIDestination (lohkko, jätä tyhjäksi jättää pois)ei—
tefcaTEFCADestination (lohkko, jätä tyhjäksi jättää pois)ei—
pasPASDestination (lohkko, jätä tyhjäksi jättää pois)ei—
x12_astekstiei—
dicomDICOMDestination (lohkko, jätä tyhjäksi jättää pois)ei—
javascriptJavaScriptDestination (lohkko, jätä tyhjäksi jättää pois)ei—
brokerBrokerDestination (lohkko, jätä tyhjäksi jättää pois)ei—
kafkaKafkaDestination (lohkko, jätä tyhjäksi jättää pois)ei—
sqsSQSDestination (lohkko, jätä tyhjäksi jättää pois)ei—
snsSNSDestination (lohkko, jätä tyhjäksi jättää pois)ei—
amqpAMQPDestination (lohkko, jätä tyhjäksi jättää pois)ei—
azure_blobAzureBlobDestination (lohkko, jätä tyhjäksi jättää pois)ei—
mqttMQTTDestination (lohkko, jätä tyhjäksi jättää pois)ei—
ibm_mqIBMMQDestination (lohkko, jätä tyhjäksi jättää pois)ei—
pubsubPubSubDestination (lohkko, jätä tyhjäksi jättää pois)ei—
gcsGCSDestination (lohkko, jätä tyhjäksi jättää pois)ei—
elrELRDestination (lohkko, jätä tyhjäksi jättää pois)ei—
pgpPGPSend (lohkko, jätä tyhjäksi jättää pois)ei—
response_transformertekstiei—
timeoutkestoaika, esim. 30s tai 5mei—
retryRetryei—
queueQueueConfig (lohkko, jätä tyhjäksi jättää pois)ei—

23.10.1 nimi

Nimi tunnistaa kohde lokitallenteissa ja mittareissa.

Vaaditaan kanavassa.

23.10.2 file_name

Tiedostonimi, tiedostokohdassa, luo yhden tiedoston viestikohden (${timestamp}, ${date}, ${control_id}, ${message_type}, ${destination}).

Tyhjä pitää oletuksena: yksi tiedosto päivittäin ja viestityypin mukaan, liitetään.

23.10.3 temp_suffix

TempSuffix on nimi, jonka kunkin viestin tiedosto kantaa, kun se kirjoitetaan, ja poistetaan uudelleennimeämällä, kun se on valmis, jotta tiedostojen kerääjä ei koskaan lue puolikasta.

Oletuksena ".part".

23.10.4 retain_hours

RetainHours poistaa tiedostot Dir-kansiosta, jotka ovat vanhempia kuin tämä.

Nolla pitää ne ikuisesti.

23.10.5 x12_as

X12As on xml-kuvaus X12-kanavan kohteelle, joka vastaanottaa vaihdon XML-muodossa, kuten Mirth Connect ja Open Integration Engine kirjoittavat X12-viesteille, vastaanottajalle, joka on rakennettu siten, mitä Mirth lähetti sille.

Tyhjä tai x12 lähettää X12-viestin.

23.10.6 elr

ELR tekee tästä julkisen terveydenhuollon laboratoriotutkimusten kohdetiedon: jokainen laboratoriotutkimustulos (ORU^R01) muotoillaan ELR 2.5.1 -viestiksi, joka sisältää vain ne tilaukset, joilla on ilmoitettava tulos, ja se on se, mitä toimitetaan; viesti, jolla ei ole mitään ilmoitettavaa, ei lähetetä ollenkaan.

Sopii kohdiksi, jotka toimittavat HL7 v2 -viestin sellaisenaan (mllp, http, tiedosto, sftp jne.), HL7-kanavalla.

23.10.7 response_transformer

ResponseTransformer tarkastelee, mitä vastaanottaja vastasi, ja voi merkitä toimituksen epäonnistuneeksi.

Se on olemassa, koska "tuli tämä perille" on usein kysymys, jota kuljetus ei voi vastata: MLLP-vastaanottaja palauttaa sovellusvahvistuksen, jonka merkitys on sen tekstin mukainen, ja HTTP-vastaanottaja palauttaa 200 virhesanoman kanssa. Molemmissa tapauksissa kuljetus onnistui, mutta viesti ei tullut perille.

Vain merkityksellinen kohdassa, joka vastaanottaa vastauksen. Kohdassa, joka ei voi, se hylätään latauksen sijaan kuin jätetään koskaan suorittamatta.

23.10.8 jono

Jono tekee toimituksen kestäväksi: viesti, jota ei voida toimittaa nyt, säilytetään levyllä ja yritetään toimittaa uudelleen, kunnes se on mahdollista.

Ei ole oletusarvoisesti käytössä.

23.11 Suora kohde

SuoraKohde lähettää jokaisen viestin suoraan: allekirjoitettu tämän osoitteen kanssa, salattu kunkin vastaanottajan varmenneksi ja toimitettu HISP:lle SMTP:n kautta.

Määritelty DirectDestination-muodossa internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
totekstien luettelokyllä—
subjecttekstiei—
texttekstiei—
attach_nametekstiei—
xdmtosi tai epätosiei—
xdm_source_idtekstiei—
recipient_certs_dirtekstiei—
dnstekstiei—
ldaptekstiei—
smtp_hosttekstikyllä—
usernametekstiei—
passwordtekstiei—
request_mdntosi tai epätosiei—
timeoutkestoaika, esim. 30s tai 5mei—

23.11.1 vastaanottajat

Vastaanottajat ovat vastaanottajien suorat osoitteet.

Kenttiviittaukset korvataan, joten vastaanottaja voidaan hakea viestistä.

23.11.2 vastaanottaja_varmenne_hakemisto

VastaanottajaVarmenneHakemisto sisältää vastaanottajien varmenteet (PEM, yksi tiedosto per osoite tai domain, osoite.pem tai domain.pem), jotka löydetään etukäteen; tyhjä lukee palvelimen suoran osoitekirjan (Direct-näkymä).

Vastaanottajat, joita ei löydy, etsitään DNS:stä (CERT-merkinnät). Direct ei lähetä viestiä vastaanottajalle, jonka varmenne ei voida löytää.

23.11.3 ldap

LDAP on hakemisto, jossa vastaanottajan varmenne etsitään, kun DNS:llä ei ole mitään (isäntä:portti, portti 389): toinen tapa, jolla Direct-varmenneopas sallii.

Tyhjä etsii vastaanottajan domainin hakemiston DNS SRV-merkinnällä (_ldap._tcp), kuten opas sanoo; "pois" ei koskaan kysy hakemistoa.

23.12 Asiakirja kohde

AsiakirjaKohde renderöi jokaisen viestin asiakirjaksi.

Määritelty DocumentDestination-muodossa internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
dirtekstikyllä—
formatDocumentFormateipdf
templatetekstikyllä—
titletekstiei—
file_nametekstiei—
font_sizenumeroei10
landscapetosi tai epätosiei—
temp_suffixtekstiei"
timeoutkestoaika, esim. 30s tai 5mei30s

23.12.1 muoto

Muoto on joko pdf tai teksti.

Oletuksena on pdf.

23.12.2 malli

Malli on asiakirjan runko, jossa on ${PID-5.1} -tyyppisiä viittauksia viestipolkuun.

Pakollinen. Järkevää oletusarvoa ei ole, koska asiakirja ilman mallia olisi joko raaka viesti, jota kukaan ei halua tulostaa, tai tyhjä.

23.12.3 fonttikoko

Fonttikoko pisteenä.

Oletuksena on 10, joka sopii 80 merkkiä A4-kokoiselle sivulle.

23.12.4 temp_suffix

VäliaikainenLiite liitetään kirjoitettaessa ja poistetaan uudelleennimeämällä.

Oletuksena ".part".

Sama kohteliaisuus kuin muillakin tiedoston kohteilla, ja tässä se on tärkeämpää: tulostusvalvoja, joka poimii puoliksi kirjoitetun PDF-tiedoston, tuottaa tyhjän sivun, ja kukaan ei tutki tyhjää sivua.

23.12.5 aikakatkaisu

Aikakatkaisu yhden kirjoituksen kohdalla.

Defaults to 30s.

23.13 ECR-kohde

ECR-kohde määrittää sähköisen tapausten ilmoittamisen.

Määritelty ECRDestination-nimellä internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
rctctekstiei—
sourcetekstikyllä—
facilityECRFacilitykyllä—

23.13.1 rctc

RCTC on FHIR-arvojoukko tai niiden paketti, kuten eRSD, joka sisältää laukaisukoodit.

Ilman sitä Perfuse käyttää lyhyttä sisäänrakennettua näytettä, joka on tarkoitettu testaamiseen: virastot odottavat RCTC:tä.

23.14 ELR-kohde

ELR-kohde määrittää sähköisen laboratorioraportoinnin.

Määritelty ELRDestination-nimellä internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
configtekstikyllä—
rctctekstiei—

23.14.1 config

Config on ELR-tiedosto, jonka perfuse elr -config lukee: lähettävä ja vastaanottava sovellus ja laitokset OID:llä, prosessointitila ja mitä täytetään laboratoriovirran jättämien aukkojen (tilaamislaitos, suorittava laboratorio, määräävät viranomaiset).

Suhteellinen polku luetaan kanavatiedoston hakemistosta.

23.14.2 rctc

RCTC on FHIR-arvojoukko tai niiden paketti, kuten eRSD, joka sisältää laukaisukoodit.

Ilman sitä Perfuse käyttää lyhyttä sisäänrakennettua näytettä, joka on tarkoitettu testaamiseen: virastot odottavat RCTC:tä. Suhteellinen kanavatiedostoon, kuten Config.

23.15 FHIR-kohde

FHIR-kohde määrittää muunnoksen FHIR-muotoon ja toimittamisen FHIR-palvelimelle.

Määritelty FHIRDestination-nimellä internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
urltekstikyllä—
versiontekstieiR5
timezonetekstiei—
default_identifier_systemtekstiei—
identifier_systemstekstin kartoitus tekstin mukaanei—
claim_us_coretosi tai epätosiei—
validate_before_sendtosi tai epätosi (lohko, jätä pois jättää pois)eitosi: resurssin lähettäminen palvelimelle, joka hylkää sen, haaskaa uudelleenyrityspalkkion ja piilottaa todellisen ongelman kuljetusvirheen taakse
reject_on_warningtosi tai epätosiei—
headerstekstin kartoitus tekstin mukaanei—
bearer_tokentekstiei—
authFHIRAuth (lohko, jätä pois jättää pois)ei—
ecrECRDestination (lohko, jätä pois jättää pois)ei—
bundle_scripttekstiei—

23.15.1 url

URL on FHIR-palvelimen perus-URL, esimerkiksi "https://fhir.esimerkki.org/fhir".

Paketti lähetetään suoraan siihen.

23.15.2 versio

Versio on FHIR-julkaisu, jota tuotetaan: R4, R4B tai R5. Oletusarvo on R5, viimeisin julkaistu julkaisu.

Käyttöönotto, joka kommunikoi EHR:n kanssa, haluaa lähes aina R4:n ja tulisi sanoa niin, koska hiljainen alentaminen piilottaisi todellisen yhteentoimivuuspäätöksen.

23.15.3 aikavyöhyke

Aikavyöhyke sovelletaan HL7 v2 -aikaleimoihin, joissa ei ole offsetia. v2 sallii paikallisen ajan ilman offsetia, mutta FHIR ei, joten jokin on täytettävä.

Kun arvoa ei ole asetettu, lähettäjän MSH-7:ään asettama offset käytetään, koska v2 olettaa, että paikallinen aika on lähettäjän paikallinen aika; viesti, jonka MSH-7:llä ei ole offsetia, palautuu UTC:hen.

23.15.4 oletus_tunniste_järjestelmä

DefaultIdentifierSystem -nimiavaruus määrittää tunnisteen, jonka myöntävä viranomainen ei ole määritellyt URI:ta.

Ilman järjestelmää potilastunniste on epäselvä sairaalojen välillä.

23.15.5 vakuutus_us_ydin

ClaimUSCore lisää US Core 9.0.0 -profiilin jokaiseen resurssiin, joka on tarkistettu ja noudattaa sitä.

Resurssi, joka ei täytä vaatimuksia, lähetetään ilman vaatimusta, ja siihen liitetään huomautus, jossa kerrotaan, miksi.

23.15.6 tarkista_ennen_lähetystä

ValidateBeforeSend kieltäytyy lähettämästä pakettia, joka epäonnistuu validoinnissa.

Oletusarvo on true: resurssin lähettäminen palvelimelle, joka hylkää sen, haaskaa uudelleenyritysmäärärajan ja piilottaa todellisen ongelman kuljetusvirheen taakse.

23.15.7 hylkää_varoituksella

RejectOnWarning kieltäytyy myös varoituksista, kuten puuttuvasta US Core -tunnisteesta.

Oletuksena pois käytöstä, koska varoitus on tuomio profiilin noudattamisesta eikä validiteetista.

23.15.8 bearer_token

BearerToken lähetetään Authorization-otsakkeena.

Suositellaan ympäristömuuttujan viittausta, ${NIMI}, kirjaimellisen arvon sijaan tiedostossa, joka menee git:ään.

23.15.9 julkinen_terveydenhuollon_ilmoitus

ECR tekee tästä julkisen terveydenhuollon ilmoituskohteen.

Jokainen viesti tarkistetaan laukaisukoodien perusteella; viesti, jossa on laukaisukoodi, lähetetään eCR 2.1 eICR: nä, joka on pakattu eCR-viestiin, url-osoitteeseen $process-message, ja viesti, jossa ei ole laukaisukoodia, ei lähetetä ollenkaan.

23.15.10 pakkauksen_skripti

BundleScript on JavaScript-koodi, jota suoritetaan kullakin muunnetulla Bundlella ennen sen validointia ja lähettämistä: bundle on Bundle-olio, jota muokataan paikallisesti.

Se on tapa, jolla sivusto lisää omat järjestelmänsä tiedot ja v2-viesti ei kerro - sen organisaation IKNR- tai ODS-koodi, kansallisen profiilin yhteyskohta - ilman, että muunnin arvailee sitä. Skripti, joka heittää poikkeuksen, epäonnistuu viestin, kuten mikä tahansa muu muodonmuuttaja. Skriptiä ei suoriteta tapausselosteissa (ecr).

23.16 FTP-kohde

FTPDestination lataa tiedoston kullekin viestille.

Määritelty FTPDestination -muodossa internal/config: ssä.

AvainTyyppiVaadittuOletus
hosttekstikyllä21
usertekstiei—
passwordtekstiei—
securityFTPSecurityeieksplisiittinen sen sijaan, että ei mitään
insecure_skip_verifytosi tai epätosiei—
allow_clear_passwordtosi tai epätosiei—
dirtekstikyllä—
file_nametekstiei—
temp_suffixtekstiei"
framedtosi tai epätosiei—
timeoutkestoaika, kuten 30s tai 5mei60s

23.16.1 isäntä

Isäntä on palvelin, jossa on valinnainen portti.

Oletusarvo on 21 tai 990 impliciteille TLS:lle.

23.16.2 käyttäjä

Käyttäjä ja salasana tunnistavat.

Tyhjä käyttäjä tarkoittaa anonyymia.

23.16.3 salasana

Käyttäjä ja salasana tunnistavat.

Tyhjä käyttäjä tarkoittaa anonyymia.

23.16.4 turvallisuus

Turvallisuus valitsee TLS: eksplisiittinen, implisiittinen tai ei mitään.

Oletuksena on eksplisiittinen, koska oletusarvoisen valinta plain FTP:ksi tekisi epäturvallisen valinnan hiljaisemmaksi, ja sivuston, jolla ei ole TLS:ää, pitäisi kirjoittaa se ylös.

23.16.5 insecure_skip_verify

InsecureSkipVerify hyväksyy minkä tahansa varmenneen.

Tarvitaan useammin kuin kukaan haluaisi: nämä palvelimet usein luovat itse allekirjoitetun varmenneen, jota kukaan ei voi uudelleenmyöntää. Nimitetty erikseen, jotta valinta on tietoinen ja näkyvissä tiedostossa eikä piilotettu "turvallisuus: rento" -tilaan.

23.16.6 allow_clear_password

AllowClearPassword sallii salasanan lähettämisen plain FTP:llä.

Evätään oletuksena, koska se lähettää tunnistetiedon verkossa selkeäksi tekstinä jokaisella toimituksella. Jotkut analyysit eivät todellakaan ole TLS:ää, joten se on mahdollista, mutta se on kirjoitettava ylös, jotta se on joku tekemä päätös eikä periytyvä oletus.

23.16.7 temp_suffix

TempSuffix liitetään tiedostoon sen kirjoittamisen aikana ja poistetaan uudelleennimeämällä, kun se on valmis.

Oletuksena ".part".

Kuka tahansa, joka kerää nämä tiedostot, on yleensä ajoitettu työ, joka ottaa kaiken, mitä se löytää, ja ilman uudelleennimeämistä se lopulta ottaa puolen viestin.

23.16.8 aikakatkaisu

Aikakatkaisu rajoittaa yhden siirron.

Defaults to 60s.

23.17 GCS Kohde

GCSDestination kirjoittaa jokaisen viestin objektina.

Määritelty GCSDestination -nimellä internal/config -tiedostossa.

AvainTyyppiVaadittuOletus
objecttekstiei${date}/${channel}/${control_id}
storage_classtekstiei—
content_typetekstiei—

23.17.1 objekti

Objekti on objektin nimi, jossa on samat kirjaimet kuin S3-avaimessa.

Oletuksena ${date}/${channel}/${control_id}.hl7.

23.18 HTTP Kohde

HTTPDestination lähettää viestit HTTP-päätepisteeseen.

Yleisin asia, jonka Mirth-kanava tekee, mitä Perfuse ei voisi, ja yleisin este, jonka kääntäjä raportoi. Useimmat käytöt ovat epäloistavia: lähetä viesti sisäiseen API:hin, lähetä se web-palveluun, joka käärii perinnetietojärjestelmän, lähetä se jollekin, jonka joku on kirjoittanut iltapäivässä.

Määritelty HTTPDestination -nimellä internal/config -tiedostossa.

AvainTyyppiVaadittuOletus
urltekstikyllä—
methodtekstiei—
content_typetekstiei—
headersteksti-teksti -kartoitusei—
bearer_tokentekstiei—
usernametekstiei—
passwordtekstiei—
tlstlsconf.Asetukset (lohkko, jätä tyhjäksi jättää pois)ei—
success_statuskokonaislukujen luetteloeimikä tahansa 2xx
fail_on_bodytekstien luetteloei—
follow_redirectstosi tai epätosiei—

23.18.1 url

URL on mihin lähetetään.

Required.

23.18.2 menetelmä

Menetelmä oletetaan POST:ksi.

PUT on sallittu päätepisteelle, joka sitä haluaa.

GET ja DELETE ovat kiellettyjä: tämä lähettää viestin sisällön, ja kuljetus, joka hiljaisesti pudottaa viestin menetelmän valinnan vuoksi, olisi erittäin hiljainen tapa menettää data.

23.18.3 sisällön_tyyppi

ContentType oletusarvo on application/hl7-v2+er7, joka on rekisteröity tyyppi pipe-erottimella erotetulle HL7 v2 -viestille.

Monet päätepisteet haluavat sen sijaan text/plain -tyyppisen.

23.18.4 bearer_token

BearerToken lähetetään Authorization-otsakkeena.

Suosita ympäristömuuttujaviitettä kirjaimellista arvoa git-tiedostossa.

23.18.5 onnistumistila

Onnistumistila luettelee tilakoodit, jotka katsotaan toimitetuiksi.

Oletuksena kaikki 2xx -tilakoodit.

Mukautettavissa, koska päätepisteet eroavat siinä, miltä onnistuminen näyttää: jotkut vastaavat 200 virheellä sisällössä, ja jotkut vastaavat 202 jonoon, johon he ovat hyväksyneet viestin.

23.18.6 epaonnistuminen_sisällössä

EpaonnistuminenSisällössä käsittää vastauksen, joka sisältää jotakin näistä merkkijonoista, epäonnistumiseksi riippumatta tilakoodista.

Tämä on olemassa, koska päätepiste, joka vastaa 200 virheellä "ERROR: potilas ei löydy" sisällössä, on yleinen, ja sitä käsitellään toimitettuna, mikä tarkoittaa, että viesti katoaa eikä kukaan tiedä.

23.18.7 seuraa_ohjauksia

SeuraaOhjauksia sallii pyynnön uudelleenohjauksen.

Pois päältä oletuksena: uudelleenohjaus kirjoitettaessa uudelleenkirjoittaisi kliiniset tiedot jonnekin, mihin konfiguraatio ei koskaan ole nimennyt.

23.19 IBMMQ Kohde

IBMMQKohde asettaa jokaisen viestin jonoon.

Määritelty IBMMQDestination -kohtaa internal/config.

AvainTyyppiVaadittuOletus
non_persistenttosi tai epätosiei—

23.19.1 epa_pysyva

EpaPysyva lähettää viestejä, jotka eivät selviä jonon hallinnan uudelleenkäynnistyksestä.

Ei ole oletusarvoisesti käytössä.

23.20 Java Script Kohde

JavaScriptKohde suorittaa skriptin sen sijaan, että se lähettäisi jonnekin.

Mirthin JavaScript Writer, ja sitä käytetään paljon enemmän kuin sen asema toimintojen luettelossa antaa ymmärtää. Se on päästäväinen reikä: kun sivusto tarvitsee puhua johonkin, mihin mikään liitäntä ei kata, tai soveltaa logiikkaa, jota mikään muodonmuutos ei ilmaise, he kirjoittavat JavaScript Writerin. Siirtymä, joka ei voi suorittaa niitä, ei voi siirtää kanavia, joissa niitä on, mikä kypsässä Mirth-asennuksessa on suuri osa.

Tarkoituksella ei yleinen skriptinhallinta. Skripti saa viestin ja samat apuvälineet, jotka muodonmuuttaja saa; mitä se ei saa, on tapa päästä tiedostojärjestelmään tai verkkoon, koska se on se, mihin muut kohdet ovat ja skripti, joka avaa oman pisteen, on näkymätön jokaiselle uudelleenyritykselle, jonolle ja mittaukselle moottorissa.

Määritelty JavaScriptDestination -kohtaa internal/config.

AvainTyyppiVaadittuOletus
scripttekstikyllä—
timeoutkestoaika, esim. 30s tai 5mei—
success_on_undefinedtrue tai false (lohko, jätä pois jättämättä)eitrue

23.20.1 skripti

Script on suoritettava koodi.

Required.

23.20.2 aikakatkaisu

Timeout määrittää yhden suorituksen rajan.

Nolla asettaa oletusarvon.

Rajoitettu, koska määränpään skripti on toimitusreitillä: yhden skriptin ääretön silmukka ei vain epäonnistu viestin, se pitää jonon takana.

23.20.3 success_on_undefined

SuccessOnUndefined käsittää skriptin, joka ei palauta mitään, onnistuneena.

Oletusarvo on true.

True on oikea oletus ja sen arvo on selitettävä. Mirthin JavaScript-kirjoittajat tekevät työnsä ja palauttavat tyhjän, joten vaatimalla eksplisiittistä paluuarvoa seuraisi, että jokainen heistä murtuisi tuonnissa. Asettamalla sen epätodeksi on sivusto, joka haluaa skriptin olevan eksplisiittinen siitä, onko se toiminut.

23.21 Kafka-määränpää

KafkaDestination julkaisee viestejä Kafka-aiheeseen.

Määritelty KafkaDestination-na internal/config:ssa.

AvainTyyppiVaadittuOletus
brokerstekstiluettelokyllä—
topictekstikyllä—
keytekstiei—
ackstekstieikaikki
compressiontekstieisnappy
headersteksti-teksti-karttaei—
timeoutkestoaika, kuten 30s tai 5meikolmekymmentä sekuntia
saslKafkaSASL (lohko, jätä tyhjäksi jättää pois)ei—
tlstlsconf.Settings (lohko, jätä tyhjäksi jättää pois)ei—

23.21.1 välittäjät

Välittäjät on käynnistyspalvelimen luettelo.

Required.

23.21.2 aihe

Aihe on se, mihin julkaista.

Required.

23.21.3 avain

Avain on malli tallennuksen avaimelle, joka päättää jakoa.

Tämä on kenttä, joka tekee Kafkan turvalliseksi kliiniseksi syötteeksi, ja on arvoa olla tarkka siitä, miksi. Kafka takaa järjestyksen jakoa kohtaan ja muualla ei. Saman avaimen tallennukset menevät aina samaan jakoon, joten potilastunnisteella avaimen määrittäminen pitää potilaan tapahtumat järjestyksessä, kun taas eri potilaiden voi mennä rinnakkain.

Ilman avainta ei ole tällaista takuuta. Mitattuna oikean välittäjän suhteen, kolmekymmentä avainta menee yhteen jakoon eikä jakautuisi: asiakas pitää erän yhdessä ja valitsee uuden jakon erien välillä. Järjestys säilyy onnettomuuden kautta ja murtuu rajalla, jota kukaan ei voi nähdä, mikä on pahempaa kuin murtua johdonmukaisesti - A03-päästö luetaan ennen A01-sairaalahoitoa, epäsäännöllisesti, kuormituksessa.

HL7-polku, arvioitu lähtevästä viestistä: PID-3.1 avain määritetään potilaan tunnisteella.

23.21.4 vahvistukset

Vahvistukset on se, kuinka monta välittäjää on vahvistettava kirjoitus: "kaikki", "johtaja" tai "ei mitään".

Oletuksena kaikki, joka on ainoa asetus, joka selviää välittäjän epäonnistumisesta kirjoituksen ja replikoinnin välillä. "Ei mitään" on palaa ja unohda ja se menettää viestejä; se on olemassa, koska joku siirtää ei-kliinistä etävalvontaa, ja kieltäminen suoraan tarkoittaisi, että he kirjoittavat oman tuottajansa sen sijaan.

23.21.5 pakkaus

Pakkaus on "ei mitään", "gzip", "snappy", "lz4" tai "zstd".

Oletuksena snappy.

Päällä oletuksena, koska HL7 on hyvin pakattavaa tekstiä ja langat ovat yleensä rajoitus. Snappy zstd:n sijaan oletuksena: se on halvin CPU:ssa, ja liittymän tulisi olla toimitusreitillä, eikä se pitäisi tyydyttää ydintä.

23.21.6 otsikot

Otsikot ovat asiakirjojen otsikot, jotka asetetaan.

Arvot ovat mallineita, jotka arvioidaan viestin perusteella.

23.21.7 aikakatkaisu

Aikakatkaisu rajoittaa yhden julkaisun.

Oletusarvoisesti kolmekymmentä sekuntia.

23.22 MPI Kohde

MPIDestination rekisteröi jokaisen viestin potilaan tämän palvelimen potilasrekisteriin: HL7 v2 PID (A40-yhdistäminen yhdistää) tai FHIR-potilas raaka-kanavalla.

Rekisteri päättää, mitkä tiedot ovat samaa henkilöä; katso Potilasrekisterinäkymä.

Määritelty MPIDestination-nimellä internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
authoritiesteksti-teksti-karttaei—
id_typetekstiei—
ssn_systemtekstiei—
no_mergetosi tai epätosiei—

23.22.1 viranomaiset

Viranomaiset karttaa määrittävän viranomaisen nimirajan (PID-3.4.1) sen tunnistajärjestelmään, lähettäjille, jotka eivät anna yleistä tunnistetta.

Karttamattomat muuttuvat urn:perfuse:aa:<nimiraja>.

23.22.2 id_tyyppi

ID-tyyppi on tunnisteen tyyppi (PID-3.5) asiakirjan omasta numerosta.

Default MR.

23.22.3 ssn_järjestelmä

SSN-järjestelmä nimeää PID-19-tunnisteeksi.

Default http://hl7.org/fhir/sid/us-ssn.

23.23 MQTT Kohde

MQTTDestination julkaisee aiheeseen.

Määritelty MQTTDestination-nimellä internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
topictekstikyllä—
retaintosi tai epätosiei—

23.23.1 aihe

Aihe, johon julkaistaan.

Se ei saa sisältää villikortteja.

23.24 PAS-kohteen määritys

PASDestination lähettää jokaisen viestin Da Vinci PAS-pyynnön paketin maksajalle Claim/$submit-viestillä, jotta tarjoajan järjestelmät (EHR, DTR) voivat rakentaa pyynnön ja tarvittaessa lähettää sen eteenpäin.

Määritelty PASDestination-kohteena internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
payertekstikyllä—
bearer_tokentekstiei—
authFHIRAuth (lohkko, jätä tyhjäksi jättää pois)ei—
results_totekstiei—

23.24.1 bearer_token

BearerToken on staattinen token, ${ENV} sallittu.

Auth on OAuth-asiakasvirheiden sijaan tai Azure, kuten FHIR-kohteen määrityksessä.

23.24.2 auth

BearerToken on staattinen token, ${ENV} sallittu.

Auth on OAuth-asiakasvirheiden sijaan tai Azure, kuten FHIR-kohteen määrityksessä.

23.25 Pub Sub Kohde

PubSubDestination julkaisee Pub/Sub-aiheeseen.

Määritelty PubSubDestination-nimellä internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
topictekstikyllä—
order_bytekstiei—

23.26 S3 Kohde

S3 Kohde kirjoittaa jokaisen viestin objektina.

Määritelty S3Destination muodossa internal/config.

AvainTyyppiVaadittuOletus
buckettekstikyllä—
regiontekstikyllä—
keytekstieiaikaleimatun polun ja ohjausid:n yhdistelmä
access_key_idtekstiei—
secret_access_keytekstiei—
session_tokentekstiei—
endpointtekstiei—
path_styletosi tai epätosiei—
server_side_encryptiontekstiei—
content_typetekstieiapplication/hl7-v2 HL7:lle ja text/plain muille
framedtosi tai epätosiei—
timeoutkestoaika, esim. 30s tai 5mei60s
storage_classtekstiei—
formattekstiei—

23.26.1 avain

Avainmallinnetaan objektin avain, käyttäen samoja ${date}, ${timestamp}, ${control_id}, ${message_type} ja ${channel} merkintöjä kuin tiedosto- ja SFTP-kohteet.

Oletuksena on aikaleimatun polun ja ohjausid:n yhdistelmä.

Aikaleimatun jakaminen oletuksena, koska vaihtoehto - jokainen objekti yhdessä tasaisessa etuliitteessä - tekee bucketin, joka on hidas listata ja mahdoton elinkaaren hallinta ikänsä perusteella, ja kukaan ei huomaa tätä, kunnes siinä on neljä miljoonaa objekti.

23.26.2 access_key_id

AccessKeyID ja SecretAccessKey tunnistautuvat.

Jompikumpi voi myös olla ympäristömuuttuja, joka sisältää arvon, käyttäen muotoa ${NIMI}.

23.26.3 secret_access_key

AccessKeyID ja SecretAccessKey tunnistautuvat.

Jompikumpi voi myös olla ympäristömuuttuja, joka sisältää arvon, käyttäen muotoa ${NIMI}.

23.26.4 path_style

PathStyle osoittaa bucketin polkuna eikä alidomaimena.

Useimmat S3-yhteensopivat tallennuspaikat tarvitsevat tätä.

23.26.5 sisällön_tyyppi

ContentType merkitsee objektin.

Oletuksena on application/hl7-v2 HL7:lle ja text/plain muille.

23.26.6 aikakatkaisu

Aikakatkaisu rajoittaa yhden latauksen.

Defaults to 60s.

23.26.7 storage_class

StorageClass on S3-tallennusluokka, jota käytetään jokaisen objektin kirjoittamiseen: STANDARD_IA, INTELLIGENT_TIERING, GLACIER_IR, GLACIER, DEEP_ARCHIVE jne.

Tällä tavoin arkisto voidaan siirtää suoraan Glacieriin - S3:lla ei ole erillistä Glacier-rajapintaa, jota voidaan kutsua.

23.26.8 muoto

Muoto on hl7 (oletus: jokainen objekti on viesti) tai ndjson: jokainen objekti on yksi JSON-rivi viestin ja kysyttävien kenttien kanssa aikaleimatun avaimen alla, jotta Amazon Athena voi kysyä arkistoa.

Katso perfuse athena.

23.27 SFTP Kohde

SFTPDestination kirjoittaa jokaisen viestin tiedostona SFTP-palvelimelle.

Määritelty SFTPDestination muodossa internal/config.

AvainTyyppiVaadittuOletus
hosttekstikyllä22
usertekstikyllä—
passwordtekstiei—
key_filetekstiei—
key_passphrasetekstiei—
known_hosts_filetekstiei—
insecure_skip_host_key_checktrue tai falseei—
dirtekstikyllä—
file_nametekstieiaikaleima plus kontrollitunniste
temp_suffixtekstiei"
framedtrue tai falseei—
appendtrue tai falseei—
timeoutkesto, esim. 30s tai 5mei60s

23.27.1 isäntä

Isäntä on palvelin, jossa on valinnainen portti.

Defaults to 22.

23.27.2 salasana

Salasana todentaa salasanalla.

Prefer KeyFile.

23.27.3 file_name

Tiedostonimi mallinnetaan nimelle.

Oletuksena on aikaleima plus kontrollitunniste.

23.27.4 temp_suffix

TempSuffix liitetään tiedoston kirjoittamisen aikana, ja poistetaan uudelleennimeämällä kun se on valmis.

Oletuksena ".part".

Sama kohteliaisuus, jota tämä liitäntä tarvitsee sisääntulossa. Kuka tahansa, joka kerää nämä tiedostot, on samassa ongelmassa, ja uudelleennimeäminen hakemistossa on atomia jokaisella palvelimella, jota arvostetaan.

23.27.5 aikakatkaisu

Aikakatkaisu rajoittaa yksittäisen yhteyden.

Defaults to 60s.

23.28 SMTP Kohde

SMTP-kohde määrittää toimittamisen sähköpostitse.

Määritelty SMTPDestination-nimellä internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
hosttekstikyllä—
fromtekstikyllä—
totekstiluettelokyllä—
cctekstiluetteloei—
bcctekstiluetteloei—
subjecttekstiei—
bodytekstiei—
attachtrue tai falseei—
attach_nametekstieikontrollitunniste .hl7-liitteen kanssa
usernametekstiei—
passwordtekstiei—
starttlstrue tai false (lohkot, jätä tyhjäksi jättää pois)ei—
insecure_skip_verifytrue tai falseei—
timeoutkesto, esim. 30s tai 5mei—

23.28.1 isäntä

Host on sähköpostipalvelin, jossa on valinnainen portti.

Oletusarvoisesti käytetään porttia 587, joka on sähköpostin toimittaminen STARTTLS:llä - portti, jota moderni palvelin odottaa asiakkaalta. Portti 25 on palvelimesta toiseen ja on yleensä joko estetty tai tuntematon.

23.28.2 lähettäjä

Lähettäjä on kirjekuoren lähettäjä.

Vaadittu, koska viesti, jolla ei ole lähettäjää, hylätään hiljaisesti suurella osalla sähköposti-infrastruktuurista, mikä tekee siitä vaikeimman mahdollisen virheen diagnosoida.

23.28.3 vastaanottajat

Vastaanottajat ovat To, CC ja BCC.

Vähintään yksi To on vaadittu.

23.28.4 cc

Vastaanottajat ovat To, CC ja BCC.

Vähintään yksi To on vaadittu.

23.28.5 bcc

Vastaanottajat ovat To, CC ja BCC.

Vähintään yksi To on vaadittu.

23.28.6 body

Viestin teksti on Body.

Kenttäviittaukset korvataan, kuten Aihe. Kun se on tyhjä, viesti itsessään on body.

23.28.7 attach_name

AttachName nimeää liitteen.

Oletuksena on kontrollitunniste .hl7-liitteen kanssa.

23.28.8 käyttäjänimi

Käyttäjätunnus ja salasana tunnistavat palvelimeen.

Kumpi tahansa tai kumpikaan.

23.28.9 salasana

Käyttäjätunnus ja salasana tunnistavat palvelimeen.

Kumpi tahansa tai kumpikaan.

23.28.10 starttls

StartTLS parantaa yhteyden ennen todennusta.

Se on oletuksena päällä, ja sen poistaminen käyttäjänimellä estetään sallimisen sijaan: salasanan lähettäminen salaamattomassa yhteydessä ei ole tarjous, jota voisi tarjota.

23.28.11 insecure_skip_verify

InsecureSkipVerify hyväksyy minkä tahansa varmenneen.

Nimettynä epävirallisesti, koska se on sitä, mitä se tekee.

23.29 SNS-kohde

SNS-kohde julkaisee jokaisen viestin SNS-aiheeseen.

Määritelty SNSDestination-nimellä internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
topic_arntekstikyllä—
subjecttekstiei—
group_bytekstiei—

23.29.1 aihe

Aihe lähetetään sähköpostitilauksilla.

Valinnainen; ${viesti_tyyppi} ja ${ohjaus_id} täytetään.

23.30 SOAP-kohde

SOAP-kohde lähettää SOAP-pyynnön kullekin viestille.

Määritelty SOAPDestination-nimellä internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
urltekstikyllä—
profiletekstiei—
facility_idtekstiei—
warnings_are_errorstosi tai epätosiei—
actiontekstiei—
versiontekstiei1
bodytekstikyllä—
headertekstiei—
headersteksti-teksti-karttaei—
usernametekstiei—
passwordtekstiei—
tlstlsconf.Settings (lohko, jätä tyhjäksi jättää pois)ei—
fault_is_successtekstiluetteloei—
timeoutkestoaika, kuten 30s tai 5mei30s

23.30.1 profiili

Profiili nimeää standardipalvelun, jonka kirjekuoren Perfuse rakentaa itse.

Tyhjä on yksinkertainen SOAP-kutsu, jonka sisältö on kirjoitettu tähän tiedostoon.

"cdc-iis" on CDC:n rokotusten rekisteröintirajapinta (urn:cdc:iisb:2011), jonka jokainen Yhdysvaltain osavaltion rekisteri käyttää: viesti lähetetään submitSingleMessageen, käyttäjänimi ja salasana lähetetään sisältöön WSDL:n mukaan (ei HTTP-todennuksena), oletuksena SOAP 1.2, ja rekisterin HL7-vahvistus päättää, toimitettiinko viesti. Rekisteri vastaa hylättyä lääkettä HTTP 200 ja AR: n sisällä, joten ilman tätä hylkäys luetaan onnistumisena.

23.30.2 laitos_id

Laitos_id on cdc-iis-laitos_id, rekisterin tunniste lähettävälle organisaatiolle.

Valinnainen WSDL:ssä; jotkut rekisterit vaativat sitä.

23.30.3 varoitukset_virheiksi

VaroituksetVirheiksi, cdc-iis:lle, kohdellaan varoituksia sisältävää AE-vahvistusta epäonnistumisena.

Pois oletuksena: rekisterit lähettävät AE:n "hyväksytty varoituksin" ja ERR-luokka kertoo, menetettiinkö mitään.

23.30.4 toiminto

Toiminto on SOAPAction.

Useimmat 1.1-palvelut vaativat tämän.

23.30.5 body

Runko on XML, joka menee kirjekuoren sisään, ja siinä on ${PID-5.1} -tyyppisiä viittauksia viestipolkuun.

Pakollinen, ellet ole luonut profiilia, joka luo sen. Oletusarvoa ei ole, koska elementtien nimet tulevat palvelun omasta schemasta eikä mikään moottori voi arvata niitä.

23.30.6 otsikko

Otsikko on XML kirjekuoren Otsikko-elementtiin.

Jätetään kokonaan pois, kun se on tyhjä, koska jotkut palvelut hylkäävät tyhjän otsikon.

23.30.7 virhe_on_onnistunut

VirheOnOnnistunut luettelee virhekoodit, jotka katsotaan toimitetuiksi.

Tätä tarvitaan useammin kuin pitäisi. Palvelu, joka vastaa uudelleenlähetykseen sanomalla "jo lähetetty", kertoo, että viesti on saapunut, ja ilman tätä sivuston on kirjoitettava vastausmuunnin, joka sanoo niin - tai pahimmassa tapauksessa, seurataan jonon uudelleenlähetystä loputtomiin vastaanottajan kanssa, joka on jo saanut viestin.

23.30.8 aikakatkaisu

Aikakatkaisu rajoittaa yhden puhelun.

Defaults to 30s.

23.31 SQS Kohde

SQSKohde lähettää jokaisen viestin SQS-jonoon.

Määritelty SQSDestination-nimellä internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
queue_urltekstikyllä—
group_bytekstiei—

23.31.1 jonon_url

JononUrl nimeää jonon.

Yksi, joka päättyy .fifo, on FIFO-jono, ja se ryhmitellään ja poistetaan duplikaatit.

23.32 TCP Kohde

TCПКohde lähettää viestit sokettiin, jossa on mukautettava kehys.

Määritelty TCPDest-nimellä internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
addresstekstikyllä—
max_message_sizekokonaislukuei—
timeoutkestoaika, kuten 30s tai 5mei—
expect_replytosi tai epätosiei—
keep_alivetosi tai epätosiei—
tlstlsconf.Settings (lohko, jätä tyhjäksi jättää pois)ei—

23.32.1 odota_vastaus

OdotaVastaus odottaa takaisin tulevia tavuja ennen kuin ilmoittaa onnistumisesta.

Oletusarvoisesti pois päältä, ja sen kanssa on syytä miettiä. Kun se on pois, "toimitettu" tarkoittaa, että tavut ovat saapuneet käyttöjärjestelmän lähetyspuskuriin, jonka vastaanottaja, joka kaatui hetkeä myöhemmin, ei koskaan lukenut. Kun se on päällä, vastaanottaja, joka ei koskaan vastaa, aiheuttaa jokaisen viestin aikakatkaisun.

23.32.2 keep_alive

KeepAlive pitää yhteyden auki viestien välillä sen sijaan, että soittaisi joka viesti kerran.

Useimmat laitteen päätepisteet odottavat tätä; jotkut kieltäytyvät toisesta viestistä samalla yhteydellä. Oletusarvoisesti pois päältä, koska yhteys kerran viesti on käyttäytyminen, joka toimii kaikkialla, kustannuksella käsivirkkeen joka kerta.

23.33 TEFCA-kohteen määritys

TEFCADestination pyytää TEFCA-välittäjältä jokaisen viestin potilaan tiedot.

Kuka tämä palvelin on verkossa, sen varmenne ja kumppani ovat palvelimen asetuksia (Asetukset, TEFCA), koska ne kuuluvat organisaatiolle ja sen sopimukselle QHIN:n kanssa. Kanava päättää, milloin kysytään ja miksi: käytön tarkoitus on osa kanavaa, ei kukaan kirjautunut sisään, joten jokainen kysely, jonka syöte tekee, ilmoittaa saman syyn ja audit-reitti voidaan lukea sen vastaan.

Määritelty TEFCADestination-na internal/config: ssä.

KeyTypeRequiredDefault
purposetextyes—
results_totextno—

23.33.1 tarkoitus

Tarkoitus on käytön tarkoitus: hoito, maksu, toiminta, kansanterveys tai yksityinen pääsy.

Se on yksi osallistujan ilmoittama.

23.33.2 tulokset_vastaanottajaan

Tulokset_vastaanottajaan nimeää kanavan tässä palvelimessa, joka vastaanottaa jokaisen Bundle-kokoonpanon, jonka kumppani palauttaa, omana viestinään.

Tyhjä pitää Bundle-nä tämän kohteen vastauksena vain, jotta vastausmuunnin voi lukea sen.

23.34 XDS Kohde

XDSDestination julkaisee jokaisen kliinisen asiakirjan IHE XDS.b Asiakirja-arkistoon ITI-41 Tarjoa ja rekisteröi.

Metatiedot luetaan CDA-asiakirjasta (potilas, otsikko, tyyppi, aika, tekijä, luottamuksellisuus, kieli) ja täydennetään näistä asetuksista, jotka sanovat, mitä asiakirja ei voi: kuka lähettää sen, minkälaista laitosta ja käytäntöä se tuli, ja mikä potilaan tunnisteista on siteen affiniteettialue.

Määritelty XDSDestination kohteessa internal/config.

AvainTyyppiVaadittuOletus
urltekstikyllä—
source_idtekstikyllä—
patient_domaintekstiei—
facility_typeXDSCodekyllä—
practice_settingXDSCodekyllä—
classXDSCode (lohkko, jätä tyhjäksi jättää pois)ei—
content_typeXDSCode (lohkko, jätä tyhjäksi jättää pois)ei—
tokentekstiei—
usernametekstiei—
passwordtekstiei—
headerstekstin kartoitus tekstin mukaanei—
tlstlsconf.Asetukset (lohkko, jätä tyhjäksi jättää pois)ei—
timeoutkestoaika, esim. 30s tai 5mei—
direct_fromtekstiei—
direct_totekstien luetteloei—

23.34.1 patient_domain

PatientDomain on affiniteettialueen määrittävä viranomainen OID: potilastunniste, jolla on tämä juuri, on rekisteröity.

Ilman sitä asiakirja, jolla on yksi tunniste, lähettää sen, ja yksi, jolla on useita, kieltäytyy.

23.34.2 token

Token tai Käyttäjänimi/Salasana todentaa; Otsikot lisätään jokaiseen pyynnöksiin.

Useimmat affiniteettialueet käyttävät vastavuoroista TLS:ää (tls) sen sijaan.

23.34.3 käyttäjänimi

Token tai Käyttäjänimi/Salasana todentaa; Otsikot lisätään jokaiseen pyynnöksiin.

Useimmat affiniteettialueet käyttävät vastavuoroista TLS:ää (tls) sen sijaan.

23.34.4 salasana

Token tai Käyttäjänimi/Salasana todentaa; Otsikot lisätään jokaiseen pyynnöksiin.

Useimmat affiniteettialueet käyttävät vastavuoroista TLS:ää (tls) sen sijaan.

23.34.5 otsikot

Token tai Käyttäjänimi/Salasana todentaa; Otsikot lisätään jokaiseen pyynnöksiin.

Useimmat affiniteettialueet käyttävät vastavuoroista TLS:ää (tls) sen sijaan.

23.34.6 tls

Token tai Käyttäjänimi/Salasana todentaa; Otsikot lisätään jokaiseen pyynnöksiin.

Useimmat affiniteettialueet käyttävät vastavuoroista TLS:ää (tls) sen sijaan.

23.34.7 direct_from

DirectFrom ja DirectTo tekevät lähetyksestä XDR:n Directin kuljetuksena: Direct-osoitteen mukainen osoitelohko, joka nimeää lähettäjän Direct-osoitteen ja vastaanottajien, ja vastaanottajat lähetyksen tarkoituksellisessa vastaanottajassa.

HISP, joka ottaa XDR: n, toimittaa sen Direct-postina tai vastaanottajan omalle XDR-päätepisteelle.

23.34.8 direct_to

DirectFrom ja DirectTo tekevät lähetyksestä XDR:n Directin kuljetuksena: Direct-osoitteen mukainen osoitelohko, joka nimeää lähettäjän Direct-osoitteen ja vastaanottajien, ja vastaanottajat lähetyksen tarkoituksellisessa vastaanottajassa.

HISP, joka ottaa XDR: n, toimittaa sen Direct-postina tai vastaanottajan omalle XDR-päätepisteelle.

24 Muoto Viite

Vaihtoehdot, jotka määrittävät, miten viestit parsitaan ja kirjoitetaan, muodoille, jotka tarvitsevat enemmän kuin nimen.

24.1 Liitteet

Liitteet määrittävät suurten kuormien siirtämisen viestin ulkopuolelle.

Viesti, joka sisältää skannatun raportin tai PDF:n, on tavallinen asiakirjojen työvirroissa, ja kuorma on usein satoja kertoja suurempi kuin viesti sen ympärillä. Jätettynä sisään se tarkoittaa, että varasto kasvaa asiakirjojen sijaan liikenteen mukaan, viesti, joka on jonottanut viisi kohdetta, kopioituu viisi kertaa, ja rajapinta virtaa megatavuja näyttääkseen jonkun potilaan nimen.

Mirth kutsuu näitä liitekäsittelijöiksi. Tämä on vastaava, ja se on valinnaista kunkin kanavan osalta, koska suora ADT-virran syöte ei ole mitään poimittavaa ja ei pitäisi maksaa koneistosta.

Määritelty Attachments-nimisenä internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
extractlista attach.Sääntökyllä—
reassembletosi tai epätosi (lohko, jätä pois, jos haluat jättää sen pois)eitosi

24.1.1 reassemble

Reassemble palauttaa kuormat ennen toimittamista.

Oletusarvo on true.

Oletusarvo on päällä, koska vastaanottaja, joka odottaa asiakirjaa, on saada asiakirja; viesti, joka sisältää kirjaimellisen tokenin, tallennettaisiin raportiksi, ja kukaan ei huomaisi sitä, kunnes joku avaisi tallennuksen.

Sammuttaminen on tapauksessa, jossa kanavan tarkoituksena on poistaa asiakirjat - eteenpäin viittauksen metadataa järjestelmään, jolla ei ole käyttöä kuvalle, jossa lähettäminen olisi yksityisyyden kysymys eikä kaistanleveyden

24.2 Rajoitettu

Rajattu konfiguroi rajatun kanavan.

Mirthin Delimited-tyyppi: CSV, tab-eroteltu ja laboratorion analyysi- tai palvelun pitkä häntä muotoja.

Määritelty Delimited-muodossa internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
delimitertekstiei—
quotetekstieikaksoispiste
commenttekstiei—
has_headertosi tai epätosiei—
columnstekstien luetteloei—
trim_spacetosi tai epätosiei—
relaxedtosi tai epätosiei—
splittosi tai epätosi (lohkko, jätä pois jättämiseksi)eitosi
keep_blank_linestosi tai epätosiei—
filtertekstiei—
transformationsaskelten luettelo.Stepei—

24.2.1 erotin

Erottin erottaa sarakkeet merkin tai nimen avulla.

Nimi hyväksytään, koska tabia ei voida kirjoittaa YAML-tiedostoon epäilyksettä, ja konfiguraatiotiedosto, joka sisältää näkymättömän merkin, on lukukelvoton sille, joka seuraavaksi avaa sen.

24.2.2 lauseke

Lauseke käärii arvot, jotka sisältävät erottimen.

Oletuksena on kaksoispiste; "ei mitään" poistaa sen.

24.2.3 jakaminen

Jako tekee kustakin rivistä oman viestin.

Oletusarvo on true.

Tämä on päätös, joka muotoilee rajoitetun kanavan, ja se ansaitsee mainita ääneen. Viisi tuhannen tuloksen tiedosto on joko yksi viesti tai viisi tuhatta. Yksi viesti tarkoittaa yhtä vahvistusta, yhtä merkintää selaimessa ja yhtä virhettä, joka vie koko tiedoston mukanaan. Viisi tuhatta tarkoittaa, että kunkin rivin käsittely on suodatettu, muunnettu, toimitettu ja uudelleenyritys omalla tavallaan, ja yksi huonosti muotoiltu rivi ei estä loput.

Jako on oletusarvo, koska jokaisen rivin käsittely on se, mitä lähes jokainen sivusto haluaa, ja koska vaihtoehto havaitaan myöhään: kanava, joka näytti hyvältä testauksessa kolmirivisellä tiedostolla, epäonnistuu koko yön siirrossa yhden virheellisen rivin takia.

24.2.4 tyhjät rivit

TyhjätRivit estävät tyhjien rivien ohittamisen.

Ohittaminen on oletusarvo, koska jokainen tiedosto päättyy rivinvaihtoon ja tyhjä kenttä ei ole merkintä. Tämä on olemassa harvinaiselle muodolle, jossa tyhjä rivi on merkityksellinen.

24.2.5 suodatin

Suodatin päättää, mitkä viestit jatkavat, kirjoitettu sarakkeiden nimille.

Tässä kanavan sijaan, koska kanavataso suodatin kääntää HL7-polkuja. Kaksi asetusta nimeltä suodatin olisi hämmentävää, mutta yksi asetus, joka tarkoittaa eri asioita riippuen dataTypesta, on huonompi: rajoitettu kanava, joka hiljaisesti kääntää suodattimensa HL7:ksi, ei vastaa mitään ja pudottaa kaiken, mikä on se epäonnistuminen, jonka estämiseksi ylempi taso kieltäytyy.

24.2.6 muunnokset

Muunnokset ovat julistavat vaiheet, jotka osoittavat sarakkeita eikä HL7-kenttiä.

Eri kanavan muunnoksista samasta syystä kuin Suodatin, ja se on järjestely, jonka X12 ja NCPDP jo käyttävät.

24.3 HL7v3-vaihtoehdot

HL7v3-vaihtoehdot ovat asetukset, jotka koskevat vain HL7 v3-kanavaa.

Määritelty HL7v3Options-muodossa internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
filtertekstiei—
acknowledgetosi tai epätosi (lohkko, jätä pois jättämiseksi)ei—
sender_devicetekstiei—
sender_oidtekstiei—
transformationshl7v3.Step-luetteloei—

24.3.1 suodatin

Suodatin sulkee pois viestit, käyttäen v3-polkuja.

Oma kenttänsä kanavan tavallisen suodattimen sijaan, koska ne ovat eri kielia eri viestimalleja vastaan. Kentän jakaminen merkitsisi, että v2-suodatin ei koskaan vastaa v3-kanavalla hiljaisesti, tai v3-suodatin epäonnistuu v2:n parissa - ja jälkimmäinen on vain parempi, koska se epäonnistuu äänekkäästi.

Kanava, joka määrittää molemmat, kieltäytyy lataamasta, koska toista jompaakumpaa jouduttaisiin ohittamaan, eikä ole rehellistä tapaa valita.

24.3.2 vahvistus

Vahvistus lähettää MCCI_IN000002UV01-vahvistuksen takaisin.

Päällä oletuksena, toisin kuin X12. V3-väylän yli kulkeva synkroninen siirto odottaa vahvistusta - lähettävä sovellus odottaa yleensä yhtä - ja lähettäjä, joka ei saa mitään, yleensä yrittää uudelleen, mikä on tapa, jolla potilas rekisteröidään kolme kertaa.

Osoitin, jotta "ei asetettu" ja "asetettu epätodeksi" ovat erilaisia: oletusarvo on päällä, ja joku, joka sammuttaa sen, olisi sanonut sen.

24.3.3 lähettäjän_laite

LähettäjänLaite on laitteen tunniste, jonka asetamme vahvistukseen.

Vaaditaan vahvistuksen lähettämiseen. V3-vahvistus nimeää laitteen, josta se tulee, ja vastaanottaja, joka ei tunnusta meidän, saattaa hylätä sen - mikä näyttää täsmälleen siltä, että sitä ei lähetetä.

24.3.4 muunnokset

Muunnokset muuttavat v3-dokumentin sisältöä.

Oma kenttänsä kanavan tavallisten muunnosten sijaan, samasta syystä kuin suodatin: ne ovat eri sanastoa eri viestimalleja vastaan. V2-vaiheet osoittavat segmenttejä ja kenttiä, joita v3-dokumentissa ei ole, joten kentän jakaminen merkitsisi, että vaihe tekee hiljaisesti mitään.

Vaiheiden nimet vastaavat v2-nimiä, missä merkitys vastaa, jotta joku, joka on kirjoittanut yhden kanavan, voi kirjoittaa toisen. Se, mikä on erilaista, on sitä, mitä v3 tarvitsee ja v2 ei voi ilmaista - pääasiassa, että arvon poistaminen on kolmea eri merkitystä, joten clear, nullflavor ja remove ovat kolme vaihetta eikä yksi.

24.4 TCP-kehykset

TCP-kehykset määrittävät, miten viestirajat löydetään raakasokkelista.

Jaetaan TCP-lähteiden ja TCP-kohteiden sekä sarjallisen lähteen kanssa, koska kehykset ovat samat, riippumatta siitä, mistä tavut tulevat. Laboratoriotutkimus, joka puhuu STX/ETX:ää sokkelin yli, puhuu STX/ETX:ää myös sarjallisen kaapelin yli.

Määritelty TCPFraming-muodossa internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
framingtekstikyllä—
delimitertekstiei—
start_blocktekstiei—
keep_delimitertosi tai epätosiei—
record_lengthkokonaislukuei—
trim_paddingtosi tai epätosi (lohko, jätä tyhjäksi jättää pois)ei—
length_byteskokonaislukuei—
big_endiantosi tai epätosiei—
length_includes_headertosi tai epätosiei—

24.4.1 kehykset

Kehykset ovat mllp, eroteltu, kiinteä, pituus tai koko.

Vaadittu, ilman oletusta. Virheellisen kehyksen kanssa luettu virta tuottaa viestejä, jotka näyttävät uskottavalta, eikä virheellisestä, joten arvauksen tekeminen on huonompaa kuin kysyminen.

24.4.2 aloituslohkko

Aloituslohkko aloittaa viestin valinnaisesti.

Ennen sitä olevat tavut hylätään osittaisen yhteyden meluna.

24.4.3 säilytä_eroitin

KeepDelimiter sisältää erottimen viestissä.

Oletuksena pois: se on kehys, ei sisältö.

24.4.4 trim_padding

TrimPadding poistaa kiinteän rivin perästä olevat tyhjät merkit ja NULit.

Oletuksena päällä.

24.5 X12-vaihtoehdot

X12-vaihtoehdot ovat asetukset, jotka koskevat vain X12-kanavaa.

Määritelty X12Options-muodossa internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
envelopeEnvelopePolicyeivaadita
splittrue tai falseei—
acknowledgetekstiei—
ack_sender_idtekstiei—
ack_sender_qualifiertekstiei—
arrives_astekstiei—
transformationsluettelo x12.Stepei—

24.5.1 envelope

Kirjekuori määrittää, mitä tehdä, kun itseilmoitetut määrät eivät vastaa olemassa olevia.

Oletuksena vaaditaan.

24.5.2 jakaminen

Split lähettää yhden viestin kunkin transaktioryhmän sijaan yhden tiedoston sijaan.

Oletuksena pois. Yksi 837 voi sisältää satoja vaatimuksia, joten sen ottaminen käyttöön moninkertaistaa kaiken alirakenteen - viestimäärät, vahvistukset, rivit, hälytyskynnykset - ja se pitäisi olla joku päätös, jonka joku on tehnyt, eikä oletus, jonka joku on perinyt.

24.5.3 vahvistus

Vahvistus kertoo, mikä vahvistus lähetetään takaisin: 999, 997, ta1 tai ei mitään.

Se on ominaisuus kauppatavaraliitoksen ominaisuudesta eikä viestistä, joten se on määriteltävä. 999 korvaa 997 HIPAA-transaktioissa, mutta monilla kumppaneilla - erityisesti vanhemmilla maksajayhteyksillä - on odotettu 997:ää, ja he kohdeltavat 999:ää tuntemattomana tiedostona. Väärän vahvistuksen lähettäminen on pahempaa kuin mitään vahvistusta lähettämättä, koska se vastaa kysymykseen, jota kukaan ei ole kysynyt, ja jättää oikean avoimeksi.

Tyhjä tarkoittaa ei mitään, mikä on turvallinen oletus: kumppani, joka ei odota vahvistusta ja saa sen, voi kohdella sitä pyytämättömänä vaihtoehtona.

24.5.4 ack_sender_id

AckSenderID ja AckSenderQualifier ovat omat vaihtotunnuksemme, jotka muuttuvat ISA06:ksi ja ISA05:ksi kaikissa vahvistuksissa.

Vaaditaan aina, kun Vahvistus on asetettu, ja kieltäydytään lataamasta muutoin. Nämä on oltava arvot, jotka kauppatavaraliitos on määritellyt meille, eikä niitä voi arvata: vaihto, jonka ISA06 kumppani ei tunnusta, hylätään ennen kuin kukaan lukee sitä, joten väärä arvo tuottaa hiljaisuuden, joka näyttää siltä, että mitään ei lähetetä - ja joku viettää viikon etsimällä väärästä paikasta.

24.5.5 ack_sender_qualifier

AckSenderID ja AckSenderQualifier ovat omat vaihtotunnuksemme, jotka muuttuvat ISA06:ksi ja ISA05:ksi kaikissa vahvistuksissa.

Vaaditaan aina, kun Vahvistus on asetettu, ja kieltäydytään lataamasta muutoin. Nämä on oltava arvot, jotka kauppatavaraliitos on määritellyt meille, eikä niitä voi arvata: vaihto, jonka ISA06 kumppani ei tunnusta, hylätään ennen kuin kukaan lukee sitä, joten väärä arvo tuottaa hiljaisuuden, joka näyttää siltä, että mitään ei lähetetä - ja joku viettää viikon etsimällä väärästä paikasta.

24.5.6 saapuu_nimellä

Saapuu_nimellä on xml, kun lähde toimittaa vaihdon XML-muodossa, jonka Mirth Connect ja Open Integration Engine kirjoittavat X12: lle (X12Transaction-juuri, elementit nimetty CLM.05.1), kuten moottori, joka siirretään siitä, tai järjestelmä, joka on rakennettu sitä vasten, lähettää sen.

Se muunnetaan takaisin X12: ksi ennen kuin mitään muuta tapahtuu. Tyhjä tai x12 on X12.

24.5.7 muunnokset

Muunnokset ovat deklaratiivisia muutoksia, jotka sovelletaan hyväksyttyihin vaihtoihin.

Eri kuin kanavatasoisten muunnoksista samasta syystä kuin v3:lla: ne osoittavat HL7-kenttiä parserin kautta, joka lukee segmentti-kenttä-alakenttä, ja X12:lla ei ole alakenttää, kohdellaan toistuvia segmenttejä tavallisina eikä poikkeuksellisina, ja se on kirjoitettu CLM01:ksi niiden, jotka konfiguroivat sitä. Jaettu parseri joutuisi hyväksymään molemmat merkinnät ja olisi sitten epäselvä molemmissa.

Vaiheiden nimet ovat samat, joita HL7- ja v3-vaiheet käyttävät, joten se, mitä kirjailija on jo oppinut, siirtyy.

25 Käyttäytyminen Viite

Vahvistus, jonotus, uudelleenyritys, kysely, skriptaus ja varjokopioasetukset. Nämä koskevat riippumatta siitä, mitä kuljetusmuotoa kanava käyttää.

25.1 AMQP-yhteys

AMQP-yhteys määrittää, minne ja kuka yhdistää

Määritelty AMQPConnection-muodossa internal/config-tiedostossa

AvainTyyppiVaadittuOletus
addrtekstikyllä—
addresstekstikyllä—
usernametekstiei—
passwordtekstiei—
hostnametekstieiaddr:n isäntä
tlstlsconf.Asetukset (lohkko, jätä tyhjäksi jättää pois)ei—
timeoutkestoaika, esim. 30s tai 5mei30s

25.1.1 käyttäjänimi

Käyttäjänimi ja salasana tunnistautuvat SASL PLAIN:in avulla; tyhjät tarkoittavat ANONYMOUS

Palveluväylän käytännön nimi ja avain

25.1.2 salasana

Käyttäjänimi ja salasana tunnistautuvat SASL PLAIN:in avulla; tyhjät tarkoittavat ANONYMOUS

Palveluväylän käytännön nimi ja avain

25.1.3 isäntänimi

Isäntänimi lähetetään välittäjälle, joka reitittää sen perusteella

Oletusarvo on addr-isäntä.

25.1.4 tls

TLS salaa yhteyden

Vaaditaan Palveluväylä- ja Tapahtumakeskuksessa

25.1.5 aikakatkaisu

Aikakatkaisu määrittää yhteyden muodostamisen ja odottamisen välittäjältä

Defaults to 30s.

25.2 AS2-kumppani

AS2-kumppani on kauppakumppani, jolta AS2-lähde hyväksyy viestit

Määritelty AS2Partner-muodossa internal/config-tiedostossa

AvainTyyppiVaadittuOletus
idtekstikyllä—
cert_filetekstikyllä—
allow_unsignedtosi tai epätosiei—
allow_unencryptedtosi tai epätosiei—

25.2.1 varmenne_tiedosto

VarmenneTiedosto on kumppanin varmenne (PEM), jota käytetään allekirjoituksiin

Usein itse allekirjoitettu: AS2-kumppanit vaihtavat varmenteita suoraan ilman viranomaista

25.2.2 sallitseAllekirjoittamaton

SallitseAllekirjoittamaton ja SallitseSalattu hyväksyvät viestin tästä kumppanista, joka ei ole allekirjoitettu tai salattu

Pois: tällainen viesti hylätään ja vastaanotetaan kuitti, joka kertoo syyn

25.2.3 sallitseSalattu

SallitseAllekirjoittamaton ja SallitseSalattu hyväksyvät viestin tästä kumppanista, joka ei ole allekirjoitettu tai salattu

Pois: tällainen viesti hylätään ja vastaanotetaan kuitti, joka kertoo syyn

25.3 AWS-pääsy

AWSAccess on tapa, jolla liitännäinen saavuttaa AWS:n: se alue, jolle se allekirjoittaa, avaimet ja valinnainen endpoint-ohitus.

Tunnistetiedot voidaan toimittaa kirjaimellisesti tai ${ENV_VAR} -viittauksina, joka on tapa, jolla ne tulisi toimittaa. Ei ole instance-metadata -tunnistusketjua tietoisesti: katso internal/awsv4.

Määritelty AWSAccess -nimellä internal/config -tiedostossa.

AvainTyyppiVaadittuOletus
regiontekstikyllä—
access_key_idtekstiei—
secret_access_keytekstiei—
session_tokentekstiei—
endpointtekstiei—

25.3.1 secret_access_key

SalainenPääsyAvain on salainen, kirjaimellinen tai ${AWS_SALAINEN_PÄÄSYAVAIN}.

Suositellaan viittausta: tämä tiedosto menee versionhallintaan.

25.3.2 istunto_tokeni

IstuntoTokeni on vain väliaikaisten tunnistetietojen käyttöön.

Ne vanhenevat, ja liitännäinen lopettaa toimintansa, kun ne vanhenevat.

25.4 Vahvistus

Vahvistus määrittää vahvistuksen luomisen.

Määritelty Ack:na internal/config:ssa.

AvainTyyppiVaadittuOletus
whenAckWhenei—
applicationtekstiei—
facilitytekstiei—
include_trigger_eventtosi tai epätosiei—

25.4.1 sisällytä_laukaistaphtuma

SisällytäLaukaistaphtuma lähettää ACK^A01 sen sijaan, että ACK.

Jotkut vastaanottajat vaativat sitä ja toiset hylkäävät sen, joten se on eksplisiittinen.

25.5 Azure Blob -pääsy

AzureBlobAccess on tili, säiliö ja tunnistetiedot.

Määritelty AzureBlobAccess -nimellä internal/config -tiedostossa.

AvainTyyppiVaadittuOletus
accounttekstikyllä—
containertekstikyllä—
keytekstiei—
sastekstiei—
endpointtekstiei—

25.5.1 avain

Avain on tilin avain tai ${AZURE_STORAGE_KEY}.

Aseta se tai sas.

25.5.2 sas

SAS on jaettu pääsymerkintä -merkkijono tai ${...} -viittaus.

Suositeltava: se voidaan rajoittaa tähän säiliöön.

25.6 Sopimussopimus

ContractRef osoittaa kanavan sopimukseen.

Määritelty ContractRef -muodossa internal/config -tiedostossa.

AvainTyyppiVaadittuOletus
filetekstikyllä—
check_everytekstiei15 minuuttia
overkokonaislukuei500

25.6.1 tarkista_jokainen

CheckEvery on se, kuinka usein tarkistus toistetaan, kestona.

Oletusarvo on 15 minuuttia.

Tarkistusaika on käytännössä 30 sekuntia, koska tarkistus suoritetaan silmukasta eikä omasta ajastimesta - joten sopimus, joka pyytää 3 sekunnin väliaikaa, saa 30 sekunnin väliajan. Tämä on tietoinen suunnitteluratkaisu: yksi ajastin on helpompi ymmärtää kuin kaksi, ja se pitää sopimuksen tuloksen yhdenmukaisena sen liittämisen kanssa.

Ei viesti kohtaisesti. Profiilin rakentaminen edellyttää viimeaikaisen liikenteen lukemista, ja tämän tekeminen jokaiselle viestille tekisi kanavan läpi-vientikapasiteetin riippuvaiseksi historian määrästä - joka on kaltaisensa suoritusominaisuus, joka ilmenee vasta tuotannossa, kuuden kuukauden kuluttua.

25.6.2 yli

Yli on se, kuinka monta viimeaikaista viestiä profiloidaan.

Defaults to 500.

Lukumäärä aikienikkään sijaan, koska sekä hiljainen että vilkas syöte tarvitsevat saman verran näyttöä nopeuden oikeutukseen, ja aikienikkä antaa niille erittäin erilaisia määriä.

25.7 DICOM-vaihtoehdot

DICOMOptions määrittää kuvauksen kanavan.

Miksi vaiheet on nimetty eikä polkuja

Jokainen muu formaatti saa polkukirjoittimen. DICOM ei saa tätä tietoisesti, ja syy on kuvadatan: objekti on binääri, yleinen tietotunnisteiden kirjoittaja voi asettaa minkä tahansa tietotunnisteen mihin tahansa bittiin, ja virhe tässä ei tuota hylättyä viestiä - se tuottaa kuvan, joka avautuu ja on väärä. Radiologi, joka lukee tutkimuksen, ei voi tietää.

Näin ollen neljä asiaa, joita sivustot todella tarvitsevat, ovat nimetyt toiminnot rajoitettuine vaikutuksineen: de-identifioi, kirjoita uudelleen AE-otsikko, poista yksityiset tunnisteet, aseta laitos. Kukin tietää, mitä tunnisteita se koskettaa, eikä kukaan voi tavoittaa kuvadatan.

Miksi tämä lohko on nyt olemassa

internal/dicom on kantanut steps.go- ja transform.go-tiedostoja jonkin aikaa - neljä toimintoa, dicom.Apply ja testit. Mitään niitä ei ole viitattu. Viisisataa riviä ilman kutsujaa, jonka jonon oma kappale 7 nimeää: toteutus ilman kutsujaa ei voida erottaa toiminnosta, jota ei ole olemassa. Tämä lohko ja moottorin kutsu ovat johtimia, eivät toimintoa.

Määritelty DICOMOptions -muodossa internal/config -tiedostossa.

AvainTyyppiVaadittuOletus
transformationsdicom.Step -luetteloei—

25.8 Sähköpostiosoite

DirectAddress on suora osoite, jonka tämä palvelin hallitsee: sen varmenne ja avain, ja niiden ankkurit, joita se luottaa.

Sama lohko käytetään sekä lähetykseen (allekirjoita tämän osoitteen nimissä) että vastaanottoon (salaa tämän osoitteen avulla).

Määritelty DirectAddress -muodossa internal/config -tiedostossa.

AvainTyyppiVaadittuOletus
addresstekstikyllä—
cert_filetekstikyllä—
key_filetekstikyllä—
anchors_filetekstikyllä—

25.8.1 varmenne_tiedosto

CertFile ja KeyFile ovat osoitteen varmenne (PEM, jonka jälkeen sen ketju) ja yksityinen avain (PEM).

HISP tai sen rekisteröintiviranomainen myöntää ne; ne ovat osoitteen identiteetti.

25.8.2 avain_tiedosto

CertFile ja KeyFile ovat osoitteen varmenne (PEM, jonka jälkeen sen ketju) ja yksityinen avain (PEM).

HISP tai sen rekisteröintiviranomainen myöntää ne; ne ovat osoitteen identiteetti.

25.8.3 anchors_file

AnchorsFile on luotettavat ankkurit (PEM): varmenneviranomaiset, joiden lähettäjät ja vastaanottajat tämä osoite luottaa, kuten DirectTrust-paketti.

Viesti, joka on allekirjoitettu muulla tavalla, hylätään.

25.9 Direct IMAP

DirectIMAP on HISP-postilaatikko, josta Direct-lähde lukee.

Määritelty DirectIMAP: na internal/config.

KeyTypeRequiredDefault
hosttextyes—
portwhole numberno—
securitytextno—
usernametextyes—
passwordtextno—
mailboxtextno—
after_readtextno—
move_totextno—
error_foldertextno—
poll_intervalduration, such as 30s or 5mno—
tlstlsconf.Settings (a block, omit to leave off)no—

25.9.1 siirrä

MoveTo on kansio, johon siirretään viestit; oletuksena Käsitelty.

Luodaan, jos puuttuu.

25.9.2 tls

TLS luottaa CA-tiedostoon (tai HISP:n omiin sertifikaatteihin) ja nimeää siinä odotetun palvelimen, HISP:lle, jonka IMAP-sertifikaatti ei ole julkinen.

Sertifikaatti todennetaan aina.

25.10 Direct XDR

DirectXDR on päätepiste, josta Direct-lähde ottaa XDR: n.

Määritelty DirectXDR: ssä internal/config.

AvainTyyppiVaadittuOletus
listentekstikyllä—
tls_certtekstiei—
tls_keytekstiei—
client_ca_filetekstiei—

25.11 ECR-toimipiste

ECR-toimipiste on organisaatio, joka lähettää tapausraportteja.

Määritelty ECRFacility-nimisenä internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
nametekstikyllä—
npitekstiei—
phonetekstikyllä—
linetekstiei—
citytekstikyllä—
statetekstikyllä—
postal_codetekstiei—

25.12 EDIFACT-vaihtoehdot

EDIFACT-vaihtoehdot ovat asetukset, jotka koskevat vain EDIFACT-kanavaa.

Määritelty EDIFACTOptions-nimisenä internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
envelopetekstiei—
splittosi tai epätosiei—
acknowledgetekstiei—

25.12.1 vahvistus

Acknowledge vastaa lähettäjälle HTTP-vastauksessa CONTRL: hyväksytty (toiminto 7), kun vaihto oli luettu ja toimitettu, hylätty (4) muutoin.

Default none.

25.13 Sähköposti-O Auth

Sähköposti-O Auth kirjautuu sisään OAuth 2.0: n (SASL XOAUTH2) avulla, jota Microsoft 365 ja Gmail vaativat salasanan sijaan.

Määritelty EmailOAuth-nimisenä internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
providertekstikyllä—
tenanttekstiei—
token_urltekstiei—
client_idtekstikyllä—
client_secrettekstiei—
refresh_tokentekstiei—
scopetekstiei—

25.13.1 client_secret

ClientSecret voi olla ${ENV}.

Ilman refresh_tokenia se valitsee Microsoftin sovelluksen ainoan asiakasluottamuksen myöntämisen.

25.13.2 refresh_token

RefreshToken voi olla ${ENV}: postilaatikko, johon henkilö on antanut suostumuksensa.

Vaaditaan Gmailiin.

25.14 FHIR-tunniste

FHIRAuth on tapa, jolla FHIR-kohde todentaa isännöidylle FHIR-palvelulle.

Kolme esiasetusta, koska isännöidyt palvelut ovat siellä, missä FHIR-palveluun liimattu kantaväittäjätoken lakkautuu tunnin kuluttua:

Tokenit haetaan tarpeen mukaan ja niitä käytetään uudelleen, kunnes ne vanhenevat minuutin kuluttua.

Määritelty FHIRAuth -kohtaa internal/config.

AvainTyyppiVaadittuOletus
typetekstikyllä—
regiontekstiei—
access_key_idtekstiei—
secret_access_keytekstiei—
session_tokentekstiei—
tenant_idtekstiei—
token_urltekstiei—
client_idtekstiei—
client_secrettekstiei—
scopetekstiei—

25.14.1 alue

Alue on AWS-alue.

Luetaan HealthLake-URL: sta, kun sitä ei anneta.

25.14.2 token_url

TokenURL on OAuth-tokenin päätepiste client_credentials: lle.

Azurelle se johdetaan vuokraajasta.

25.14.3 asiakas_tunniste

AsiakasTunniste ja AsiakasSalaisuus tunnistavat sovelluksen.

Salaisuus voi olla ${ENV} -viittaus, joka on tapa, jolla se annetaan.

25.14.4 client_secret

AsiakasTunniste ja AsiakasSalaisuus tunnistavat sovelluksen.

Salaisuus voi olla ${ENV} -viittaus, joka on tapa, jolla se annetaan.

25.14.5 laajuus

Laajuus pyydetään tokenin kanssa.

Azurelle se oletetaan FHIR-palvelun URL: n jälkeen /.default, joka on sen yleisö.

25.15 Tiedoston kysely

FilePoll on osa tiedoston keräävää lähdettä, jolla ei ole mitään tekemistä kuljetuksen kanssa.

Jaettu paikallisen, FTP: n, SMB: n ja WebDAV: n lähteiden sekä SFTP: n kanssa. Jokainen näistä asetuksista on olemassa johtuen siitä, miten tiedostot menevät väärin eikä siitä, miten kuljetukset eroavat, miksi ne kuuluvat yhteen: sivusto, joka on työskennellyt oikean stable_for: n analyysinsä kanssa, ei tarvitse työskennellä siitä uudelleen, kun analyysi siirretään jakoon.

Määritelty FilePoll -kohtaa internal/config.

AvainTyyppiVaadittuOletus
dirtekstikyllä—
patterntekstiei—
poll_intervalkestoaika, esim. 30s tai 5mei—
after_readtekstiei—
move_totekstiei—
error_dirtekstiei—
stable_forkestoaika, esim. 30s tai 5mei—
max_file_sizekokonaislukuei—
framedtosi tai epätosiei—
rawtosi tai epätosiei—
batch_sizekokonaislukuei—
sort_bytekstieinimi

25.15.1 malli

Malli valitsee tiedostot glob-menetelmällä.

Tyhjä tarkoittaa kaikkia tiedostoja.

25.15.2 virhe_hakemisto

ErrorDir on kansio, johon siirretään tiedosto, jota ei voitu prosessoida.

Eroon MoveTo:stä tarkoituksella. Kansio, joka sisältää vain virhetilanteita, on helpompi valvoa, ja sekoittaminen arkistoon tarkoittaa, että virheitä voidaan löytää vain lukea jokainen tiedosto.

25.15.3 raaka

Raw käsittää koko tiedoston yhtenä viestinä riippumatta sisällöstä.

Asetus, joka tekee tämän liitännäisen hyödylliseksi muuhun kuin HL7:een. Ilman tätä CSV-erä, X12-korvausvaatistiedosto tai PDF jaetaan riveille, jotka alkavat MSH:llä, ja se tuottaa virheen, joka sanoo, että tiedosto ei ole HL7 - totta, mutta ei ole se pointti, koska tiedostoa ei ollut tarkoitus olla.

25.15.4 erä_koko

BatchSize määrittää, montako tiedostoa yksi kysely lukee.

Nolla tarkoittaa, että ei ole rajoitusta.

On olemassa ensimmäiselle kyselylle palvelun katkeamisen jälkeen. Kansio, joka sisältää neljäkymmentätuhatta tiedostoa, jotka kertyivät yön aikana, luetaan muuten yhdellä kertaa, mikä pitää kyselysilkkua käynnissä niin kauan kuin se kestää, ja tekee kanavan näyttää jumittuneelta. Rajatun määrän tiedostojen lukeminen yhdellä kyselyllä pitää kanavan vastaanotettavana ja jonon tyhjenevän näkyvästi.

25.15.5 laajenna_järjestys

SortBy järjestää tiedostot kyselyssä: nimi, muokattu tai ei mitään.

Oletusarvo on nimi. Järjestys on tärkeämpää kuin näyttää: ADT-virta, jossa A08-päivitykset saapuvat ennen A01-sairaalahoitoa, tuottaa potilaita, jotka eivät ole olemassa vielä. Kansioluettelon järjestys on mielivaltainen useimmissa tiedostojärjestelmissä, joten jättäminen lajittelemattomaksi tarkoittaa, että järjestys muuttuu kyselyiden välillä ilman näkyvää syytä.

25.16 GCP-pääsy

GCPAccess on tapa, jolla voidaan todentaa Google Cloudiin.

Määritelty GCPAccess-nimellä internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
projecttekstiei—
credentials_filetekstiei—
endpointtekstiei—

25.16.1 credentials_file

CredentialsFile on palvelutilin JSON-avain.

Tyhjä käyttää palvelutiliä, joka on liitetty VM:ään, GKE-pod:iin tai Cloud Run -palveluun, jolla Perfuse suoritetaan (metatietopalvelin), ellei Endpoint nimeä emulaattoria.

25.17 GCS-pääsy

GCSAccess on Cloud Storage -säilö.

Määritelty GCSAccess-nimellä internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
buckettekstikyllä—

25.18 IBMMQ-yhteys

IBMMQConnection on jono, jota voidaan käsitellä jonon hallinnan REST-rajapinnan kautta.

Määritelty IBMMQConnection-nimisenä internal/config-kansiossa.

AvainTyyppiVaadittuOletus
urltekstikyllä—
queue_managertekstikyllä—
queuetekstikyllä—
usernametekstiei—
passwordtekstiei—
tlstlsconf.Asetukset (lohkko, jätä tyhjäksi jättämiseksi)ei—
api_versiontekstiei—
timeoutkestoaika, esim. 30s tai 5mei30s

25.18.1 käyttäjänimi

Käyttäjänimi ja salasana ovat mqweb-käyttäjä, jolla on MQWebUser-rooli; salasana voi olla ${ENV}.

Jätä molemmat tyhjäksi, kun asiakasvarmenne (tls.cert_file) todentaa.

25.18.2 salasana

Käyttäjänimi ja salasana ovat mqweb-käyttäjä, jolla on MQWebUser-rooli; salasana voi olla ${ENV}.

Jätä molemmat tyhjäksi, kun asiakasvarmenne (tls.cert_file) todentaa.

25.18.3 aikakatkaisu

Aikakatkaisu rajoittaa kunkin pyynnön kestoa.

Defaults to 30s.

25.19 Kafka SASL

KafkaSASL todentaa Kafka-klusteriin.

Määritelty KafkaSASL-nimisenä internal/config-kansiossa.

AvainTyyppiVaadittuOletus
mechanismtekstikyllä—
usernametekstikyllä—
passwordtekstikyllä—

25.19.1 mekanismi

Mekanismi on "plain", "scram-sha-256" tai "scram-sha-512".

PLAIN lähettää salasanan lukukelpoisena langattomasti, joten se kuuluu TLS:ään. SCRAM ei tee sitä, miksi on syytä mainita ero tässä ja ei käsitellä niitä vaihtoehtoisina.

25.19.2 salasana

Salasana on SASL-salasana.

Tukee ${ENV}-viittauksia, kuten muitakin salaisuuksia, joten klusterin tunnistetiedot eivät tarvitse olla kirjoitettuina kanavatiedostoon.

25.20 MQTT-yhteys

MQTT-yhteys on tapa tavoittaa MQTT 3.1.1 -välittäjä: Mosquitto, EMQX, HiveMQ, AWS IoT Core, Azure Event Grid.

Määritelty MQTTConnection-nimisenä internal/config-kansiossa.

AvainTyyppiVaadittuOletus
addrtekstikyllä—
client_idtekstiei—
usernametekstiei—
passwordtekstiei—
tlstlsconf.Asetukset (lohkko, jätä tyhjäksi jättämiseksi)ei—
qoskokonaisluku (lohkko, jätä tyhjäksi jättämiseksi)ei—
timeoutkestoaika, esim. 30s tai 5mei30s

25.20.1 asiakas_tunniste

AsiakasID nimeää istunnon.

Lähde säilyttää viestinsä uudelleenmuodostettaessa vain kiinteän asiakas-id:n alla; se olettaa perfuse-<kanava>.

25.20.2 käyttäjänimi

Käyttäjänimi ja salasana todentavat; kumpikaan ei ole pakollinen.

Salasana voi olla ${ENV}.

25.20.3 salasana

Käyttäjänimi ja salasana todentavat; kumpikaan ei ole pakollinen.

Salasana voi olla ${ENV}.

25.20.4 aikakatkaisu

Aikakatkaisu määrittää yhteyden muodostamisen ja odottamisen välittäjältä

Defaults to 30s.

25.21 NCPDP-vaihtoehdot

NCPDPOptions ovat asetukset, jotka koskevät vain apteekin vaatimusten kanavaa.

Määritelty NCPDPOptions-nimisenä internal/config-kansiossa.

AvainTyyppiVaadittuOletus
transformationsluettelo ncpdp.Stepei—

25.21.1 muunnokset

Muunnokset ovat deklaratiivisia muutoksia, jotka sovelletaan jokaiseen lähetykseen ennen toimittamista.

Sama sanasto kuin muissakin formaateissa - aseta, kopioi, tyhjennä, kartoita, korvaa, leikkaa, tapaus, jokaisella on valinnainen ehto - koska askelmoottori internal/steps on yleinen. Se, mikä eroaa, on notaatio: polku kirjoitetaan D1 tai 07-D7, käyttäen standardin omaa kaksi merkkiä kokoisia kenttätunnisteita.

25.22 PGP Vastaanotto

PGPReceive avaa, mitä lähde vastaanottaa OpenPGP:llä: salattu salaisella avaimellamme ja sen allekirjoitus tarkistetaan lähettäjien julkisten avaimien vastaisuudessa.

Määritelty PGPReceive:na internal/config:ssa.

AvainTyyppiVaadittuOletus
decrypt_withtekstiei—
passphrasetekstiei—
verify_withluettelo tekstiei—
require_signaturetrue tai falseei—
allow_unencryptedtrue tai falseei—
pass_plaintrue tai falseei—

25.22.1 decrypt_with

DecryptWith on salaisen avaimen tiedostomme.

Vaaditaan, ellei allow_unencrypted ole päällä ja viestit ovat vain allekirjoitettu.

25.22.2 passphrase

Passphrase avaa DecryptWithin, kun se on suojattu.

Suosittelemme ympäristömuuttujan viittausta, ${NAME}.

25.22.3 verify_with

VerifyWith ovat lähettäjien julkisten avainten tiedostot.

Allekirjoitus kuitataan ja tallennetaan yhden heistä toimesta.

25.22.4 pass_plain

PassPlain antaa viestin, joka ei ole ollenkaan PGP, mennä muuttumattomana läpi, kansiota varten, joka vastaanottaa molempia.

Pois: tällainen viesti hylätään, jotta lähettäjä, joka unohti salata, ilmoitetaan.

25.23 PGP Lähetys

PGPSend suojaa, mitä kohde toimittaa OpenPGP:llä: salattu vastaanottajan julkiseen avaimeseen, allekirjoitettu meidän avaimellamme, tai molemmat.

Maksajat, välittäjät ja valtion virastot usein ottavat tiedostot SFTP:n kautta vain tällä tavoin.

Määritelty PGPSend:na internal/config:ssa.

AvainTyyppiVaadittuOletus
encrypt_toluettelo tekstiei—
sign_withtekstiei—
passphrasetekstiei—
armortrue tai falseei—
no_compresstrue tai falseei—
file_nametekstiei—

25.23.1 encrypt_to

EncryptTo ovat vastaanottajien julkiset avain tiedostot (armored tai binary).

Viesti on luettavissa keneltä tahansa heistä. Tyhjä: viesti on allekirjoitettu vain.

25.23.2 sign_with

SignWith on salaisin avain tiedosto, jolla allekirjoitetaan jokainen viesti.

Tyhjä: vain salattu.

25.23.3 passphrase

Salasana avaa SignWithin, kun se on suojattu.

Suosittelemme ympäristömuuttujan viittausta, ${NAME}.

25.24 Jonon konfiguraatio

QueueConfig käyttää kestävää jonotusta kohdepaikalle.

Ilman sitä kohde, joka on poissa käytöstä kaksi minuuttia, menettää kaiken, mitä lähetetään noina kahden minuutin aikana: uudelleenyritykset tapahtuvat muistissa ja kun ne loppuvat, viesti merkitään epäonnistuneeksi ja poistetaan. QueueConfigin kanssa viesti on levyllä ja säilyttää paikkansa, kunnes vastaanottaja palaa.

Se on oletuksena pois päältä, mikä on tietoinen valinta varovaisuuden sijaan. Jono muuttaa, mitä vahvistus tarkoittaa, ja se muuttaa järjestyksen käyttäytymistä aikana, jolloin järjestelmä on poissa käytöstä, ja molemmat näistä asioista ovat sellaisia, joihin operaattori tulisi tietoisesti suostua, eikä löytää niitä itse.

Määritelty QueueConfig -muodossa internal/config -tiedostossa.

AvainTyyppiVaadittuOletus
enabledtrue tai falseei—
max_attemptskokonaislukuei—
backoffkestoaika, esim. 30s tai 5mei—
max_backoffkestoaika, esim. 30s tai 5mei—
max_depthkokonaislukuei—
retain_hourskokonaislukuei—

25.24.1 max_yritykset

MaxAttempts on montako kertaa jono yrittää ennen kuin merkitsee viestin epäonnistuneeksi ja siirtyy seuraavaan.

Nolla tarkoittaa jatkuvaa yrittämistä, mikä on legitimia syötteen, joka ei saa menettää mitään, mutta se tulisi valita periytymisen sijaan.

25.24.2 max_backoff

MaxBackoff rajoittaa kasvavaa viivästystä.

Oletusarvo on minuutti jonkin suuremman asian sijaan, koska vastaanottaja, joka palaa takaisin lyhyen katkon jälkeen, tulisi löytää nopeasti: tunnin mittainen katto muuttaa kahden minuutin häiriön tunnin mittaiseksi takaisin.

25.24.3 max_depth

MaxDepth kieltää uudet viestit, kun niitä on odottamassa tämän verran, joten vastaanottaja, joka on ollut poissa käytöstä viikon ajan, ei voi täyttää levyä.

Nolla tarkoittaa, että ei ole rajoitusta.

Kun raja saavutetaan, viesti merkitään epäonnistuneeksi eikä se jonoteta, ja lähettäjälle ilmoitetaan siitä — mikä on rehellinen vastaus, koska emme enää lupaile toimittaa sitä.

25.24.4 retain_hours

RetainHours on kuinka kauan toimitetut ja hylätyt kohteet säilytetään ennen kuin ne poistetaan.

Ne säilytetään, jotta joku, joka seuraa jonon tyhjentymistä, voi nähdä sen tapahtuvan, ja jotta hylätty viesti voidaan löytää myöhemmin.

25.25 Uudelleenyritys

Uudelleenyritys ohjaa uudelleen toimittamista epäonnistumisen jälkeen.

Määritelty Retry -muodossa internal/config -tiedostossa.

AvainTyyppiVaadittuOletus
attemptskokonaislukuei—
backoffkestoaika, esim. 30s tai 5mei—
max_backoffkestoaika, esim. 30s tai 5mei—

25.25.1 yritykset

Yritykset on yhteensä monta kertaa tehtyä, mukaan lukien ensimmäinen.

Nolla tarkoittaa oletusarvoa.

25.25.2 backoff

Backoff on odotusaika ennen toista yritystä.

Se tuplaantuu joka kerran, kunnes MaxBackoff saavutetaan.

25.26 Skriptivaihtoehdot

ScriptOptions määrittää NCPDP SCRIPT -kanavan.

Miksi SCRIPT saa lohkon, kun sen suodatin on ylin

Kanavan suodatin jokaiselle tietotyypille on ylin suodatinkohde, koska internal/expr on yleinen viestityypin suhteen: yksi avain, joka on käännöslauselma, joka kohdistuu joko puuhun tai vaatimukseen, jonka kanava välittää. Askeltapahtumat eivät voi olla järjestetty samalla tavalla. V2-askel osoittaa segmentin ja kentän, X12-askel osoittaa kiinteän leveyden elementin, ja tyypit ovat erilaiset, joten yksi yaml-avain pitäisi pitää mitä tahansa tietotyyppiä, joka viittaa - joka on kenttä, joka tarkoittaa eri asioita riippuen toisesta kentästä, ja virhetilamoodi on askel, joka tekee hiljaisesti mitään.

Tämä seuraa hl7v3, x12, ncpdp ja delimited: askel elävät muodon oman lohkossa, ja ylin tason muunnokset-avain kieltäytyy SCRIPT-kanavalla hyväksymästä sen sijaan, että se hyväksytään ja hylätään.

Määritelty ScriptOptions internal/config-kohdassa.

AvainTyyppiVaadittuOletus
transformationsluettelo hl7v3.Stepei—

25.26.1 muunnokset

Muunnokset ovat deklaratiiviset askel, jotka osoittavat reseptiä XML-puuna.

hl7v3.Step sen sijaan, että se olisi oma tyyppi, ja se ei ole laiskuutta. Resepti ja v3-dokumentti ovat molemmat XML, polkukieli on sama, ja internal/eprescribe lainaa jo hl7v3.Pathia suodattimessaan kommentilla, joka sanoo niin - v3 ja CDA käyttävät sitä jo, ja kolmas kopiointi olisi kolmas joukko vastauksia sille, mitä //a/b[2]@c tarkoittaa.

Askeltapahtumat, jotka kantavat v3-vain tarkoituksen, kieltäytyvät lataamisesta sen sijaan, että ne olisivat hiljaisesti saatavilla. nullflavor on yksi: se kirjoittaa v3-attribuutin, joka kertoo, miksi arvo on poissa, jota resepti ei ole vastaavaa, ja askel, joka kirjoittaisi sen, tuottaisi asiakirjan, jota vastaanottaja ei ymmärrä.

25.27 Skriptit

Skriptit sisältävät JavaScript-koodin, joka on liitetty kanavaan.

Määritelty Scripts internal/config-kohdassa.

AvainTyyppiVaadittuOletus
filtertekstiei—
transformertekstiei—
preprocessortekstiei—
deploytekstiei—
undeploytekstiei—
postprocessortekstiei—
languagetekstiei—
timeoutkestoaika, esim. 30s tai 5mei—
includeluettelo tekstiei—
file_rootsluettelo tekstiei—
allowluettelo tekstiei—

25.27.1 suodatin

Suodatin suoritetaan expression-suodattimen jälkeen, jos sellainen on, ja se on palautettava boolean.

Mirth-suodatinskripti lisätään tähän muuttumattomana.

25.27.2 transformer

Muunnin suoritetaan deklaratiivisten askelten jälkeen ja se voi muuttaa viestiä.

Mirth-muunnosskripti lisätään tähän muuttumattomana.

25.27.3 esikäsittelijä

Esikäsittelijä suoritetaan ennen viestin parsimista, lukee tekstin "viesti"-muodossa ja palauttaa tekstin jatkokäsittelyyn.

Mirthin esikäsittelijä toimii tässä yhteydessä muuttumattomana.

Tämä on ainoa paikka, jossa virheellinen viesti voidaan korjata. Sivustot käyttävät tätä satunnaisen merkin käsittelyyn sarjaliikennevyläytistä, segmentin päättymisen merkin käsittelyyn rivin lopetuksena tai valmistajan lisäämien laitosten käsittelyyn, jotka ovat kiellettyjä kyseisessä kohdassa. Ilman tätä Perfuse hylkäisi liikenteen, jonka Mirth hyväksyy tänään.

25.27.4 käyttöönotto

Käyttöönotto suoritetaan kerran kanavan käynnistyessä, ennen kuin se hyväksyy mitään.

Tässä sivustot voivat esimerkiksi lämmittää hakutietokantaa tai tarkistaa, onko jokin riippuvainen komponentti saatavilla. Se suoritetaan ennen kuin lähde sitoutuu, joten käyttöönotto-ohjelma, joka epäonnistuu, estää kanavan käynnistymisen sen sijaan, että se hyväksyisi viestejä, joita se ei voi käsitellä.

25.27.5 poiskäyttöönotto

Poiskäyttöönotto suoritetaan kerran kanavan lopettamisen yhteydessä.

Lähde on lopettanut viestien vastaanottamisen ja lennossa olevat viestit on käsitelty, joten se näkee kanavan, joka on aidosti käyttämätön. Sen epäonnistuminen ei voi estää lopettamista: kanava, jota ei voisi sulkea, koska siivouskäsikirjoitus heittäisi poikkeuksen, olisi huonompi kuin sellainen, joka kirjautuu ja sulkeutuu.

25.27.6 jälkikäsittelijä

Jälkikäsittelijä suoritetaan viestin käsittelyn jälkeen eikä se voi muuttaa sitä.

Viesti ja sen käsittelytapaukset ovat näkyvissä, joten se voi ilmoittaa, laskea tai merkitä. Se ei voi muuttaa mitä on lähetetty: kun se suoritetaan, lähetyksen on jo tapahtunut, ja käsikirjoitus, joka näyttäisi muuttavan toimitetun viestin, valehtelisi siitä.

25.27.7 kieli

Kieli on se skriptikieli, jolla nämä skriptit on kirjoitettu: javascript tai lua.

Miksi yksi asetus koko lohkon sijaan, eikä yksi käsikirjoitus kerrallaan

Kanavan skriptit jakavat kanavan kartan ja liitäntäkartan, ja ne luetaan yhdessä niiden ylläpitäjän toimesta. Suodatin Luassa transformerin rinnalla JavaScriptissä merkitsisi kahta kieltä yhdessä tarkastelussa, ja tilan jakamista kautta kartan, jonka arvojen on tarkoitus merkitä samaa molemmissa. Sivustot, jotka haluavat tämän, voivat jakaa kanavan.

Miksi oletusarvo on javascript

Jokainen ennen tämän asetuksen olemassaoloa kirjoitettu skripti on JavaScriptiä ja ei mainitse kieltään. Luun asettaminen oletusarvoksi tulisi hiljaisesti tulkita kaikkia niitä uudelleen; vaatimalla kenttää se kieltäytyisi niistä. Kumpikaan ei ole hyväksyttävää asetukselle, joka on lisätty myöhemmin.

25.27.8 aikakatkaisu

Aikakatkaisu rajoittaa jokaisen skriptin suoritusaikaa.

Nolla merkitsee viisi sekuntia.

On tietoisesti estetty mahdollisuus poistaa se. Mirth sallii transformerin ajautua loputtomaan silmukkaan, mikä pysäyttää kanavan, ja liittymä, joka lopettaa viestien vastaanottamisen kirjoitusvirheen takia, ei ole asia, jota voidaan tarjota vaihtoehtona.

25.27.9 sisällytä

Sisällytä nimet jaetaan skriptilähteiden tiedostot, jotka on tehty saataville jokaiselle skriptille tässä kanavassa, skriptien kielen mukaan, jonka skriptit.kieli nimet.

Tämä on Mirthin koodimalline. Sivusto, jolla on neljäkymmentä kanavaa, tyypillisesti on yksi kirjasto, jota jokainen kanava kutsuu, ja ilman tätä siirtymä merkitsee kirjaston kopioimista neljäänkymmeneen tiedostoon - neljäänkymmeneen kohtaan, joissa seuraavan kerran on korjattava.

Polut ovat suhteessa kanavatiedostoon, joten kirjasto kanavien vieressä kulkee niiden mukana. Se on luettelo, koska vaihtoehto on yksi valtava tiedosto, ja kirjastot usein jakautuvat aiheittain.

Tiedostojen on oltava kanavan kielellä. Tämä oli JavaScript-vain jonkin aikaa, eikä kieltäminen johtunut kieltäytymisestä: Lua-kanava luki tiedostot, kieltäytyi puuttuvasta ja sitten ajonaikainen asennus asensi mitään niistä, joten jokainen kirjastoon tehty kutsu epäonnistui ensimmäisellä viestillä nil-globaalin vuoksi - täsmälleen sama virhe, jonka kieltäminen yllä on tarkoitettu välttämään. Molemmat kielet asentavat sen nyt, ja kirjasto, joka ei parse, kieltäytyy latauksen aikana nimeämällä tiedoston.

25.27.10 file_roots

FileRoots ovat hakemistot, joita FileUtil voi lukea ja kirjoittaa.

Vaaditaan aina, kun "tiedosto" on sallittu. Tiedostopääsylle antaminen ilman hakemistojen nimeämistä tarkoitti aiemmin koko tiedostojärjestelmää: skripti voisi lukea Perfusen oman tietokannan, joka sisältää salasanan hashit, LDAP-palvelutilin salasanan ja OIDC-asiakas salaisuuden. Kanavan luominen vaatii vain editorin roolin, joten eskalaatio valmistui hetkeä, kun järjestelmänvalvoja käynnisti sen.

25.27.11 sallia

Sallia antaa skriptille kykyjä, joita muuten kieltäytytään: "tiedosto", "tietokanta", "reitti".

Mirth antaa kaikki nämä jokaiselle skriptille; vaatimalla niiden nimeämistä tarkoittaa, että transformer ei voi hiljaisesti aloittaa tiedostojärjestelmän lukemista kopioimisen jälkeen.

25.28 Varjo

Shadow ajaa kanavan ehdotettua versiota live-kanavan rinnalla ja raportoi, missä ne poikkeavat.

Tämä on vastaus siihen kysymykseen, joka tekee rajapinnan työstä pelottavaa: miten tiedät, onko muutos turvallinen? Ei lukemalla. Muunnos on ohjelma, joka toimii viesteille, jonka monimuotoisuutta kukaan ei ole luonut, ja tapaus, joka rikkoo, on aina se, jota kukaan ei ole ajatellut - potilas, jolla on kaksi tunnistetta, tulos, jolla on tyhjä yksiköiden kenttä, A08, joka saapuu ennen A01:aan.

Kanavan testi osoittaa tapaukset, joita joku on ajatellut. Varjomuoto osoittaa tapaukset, jotka todella saapuvat, vastaan oikeaa liikennettä, ennen kuin muutos kuljettaa mitään niistä.

Kaksi ominaisuutta tekee siitä turvallisen, ja molemmat ovat rakenteellisia eikä konfiguroitavissa:

Määritelty Shadow-nimellä internal/config-tiedostossa.

AvainTyyppiVaadittuOletus
channeltekstikyllä—
samplenumeroei1
comparetekstien luetteloei—
ignoretekstien luetteloei—
max_differenceskokonaislukuei100
timeoutkestoaika, esim. 30s tai 5mei5s

25.28.1 kanava

Kanava on polku ehdotettuun kanavatiedostoon.

Erillinen tiedosto ei sisäistä lohkoa tarkoituksella: ehdotettu on tarkoitus tulla live-kanavaksi, joten se on artefakti, joka tarkistetaan, sitoutetaan ja edistetään, ei fragmentti, joka on poistettava.

25.28.2 näyte

Näyte on viestien osuus, joka varjostetaan, 0:sta 1:een. Oletusarvo on 1.

Arvoa kannattaa laskea vain kiireisellä syötteellä, ja sen ymmärtäminen ennen sen tekemistä: näytteen ottaminen vähentää kustannuksia ja vähentää luottamusta täsmälleen samassa suhteessa, ja viesti, joka olisi osoittanut eron, on epätavallinen.

25.28.3 vertaa

Vertaa rajoittaa vertailun näihin kenttäpolkuja.

Tyhjä vertaa kaikkea.

25.28.4 ohita

Ohita excludes-kentät vertailusta.

Tarvitaan käytännössä, koska kanava, joka merkitsee aikaleiman tai järjestysnumeron, eroaa jokaisessa viestissä ja ilmoittaisi 100%: n eroimisnopeuden, kun se ei kerro mitään.

25.28.5 max_differences

MaxDifferences rajoittaa montako eroavaa viestiä säilytetään tarkastelua varten.

Defaults to 100.

25.28.6 aikakatkaisu

Aikakatkaisu rajoittaa yhden varjorunin.

Defaults to 5s.

Eroaa kanavan omasta aikakatkaisusta ja on lyhyempi. Ehdokas, jolla on pakeni skripti, ei saa kertyä gorutiineja live-liikenteen takana.

25.29 XDS-koodi

XDS-koodi on koodattu arvo kohdeasetuksissa: koodi, koodausjärjestelmä (OID) ja näyttö.

Määritelty XDSCode-na internal/config: ssä.

AvainTyyppiVaadittuOletus
codetekstikyllä—
schemetekstikyllä—
displaytekstiei—

26 Kunkin Komponentin Toimintatapa

Perfuse on rakennettu pienistä paketeista, joilla kullakin on yksi tehtävä. Tässä luvussa kunkin osan omakuva siitä, mitä se tekee ja miksi se on rakennettu tietyllä tavalla, otettu lähteestä. Jos päätöksellä on syy, joka ei ole ilmeinen, syy on tässä eikä commit-viestissä, jota kukaan ei löydä.

26.1 fhir

Paketti fhir toteuttaa FHIR-resursseja, serialisointia ja validointia.

Versiohallinta on ensimmäinen suunnittelupäätös, koska "FHIR" yksinään ei tunnista johdonmuotoa. R5 on uusin julkaistu versio ja on oletusarvo täällä. R4 on asennettu perusta ja Yhdysvaltain sääntely todella kuluttaa, joten se on täysin tuettu eikä käsitelty vanhanaikaisena. R6 on äänestyskirjassa kirjoittamisen aikana ja ei ole tietoisesti toteutettu: arvauksen lähettäminen julkaisemattomaan määritykseen olisi huonompi kuin sen tukeminen.

Resurssimalli on R5-muotoinen. Siellä, missä R4 eroaa, ero sovelletaan serialisoinnin sijaan eikä pidetä kahta rinnakkaista struktuurin joukkoa, joka on tapa, jolla koodipohja päätyy kahteen hienosti erilaiseen potilasmääritykseen.

Source: github.com/biodream-llc/perfuse/fhir

26.2 pää

Komento xmlordergen kirjoittaa FHIR XML: n tarvitseman elementin järjestyksen ydinpakettiin kuuluvien StructureDefinitionien perusteella.

go run ./fhir/xmlordergen hl7.fhir.r4.core-4.0.1.tgz | gzip -9 -n > fhir/xmlorder_r4.txt.gz

JSON-objektit voivat sisältää jäsenensä mihin tahansa järjestykseen; XML: ssä ei ole sallittua: jokainen elementti on oltava määritellyssä järjestyksessä. Kunkin tulostusrivin polku ja sen lapset ovat siinä järjestyksessä, ja kunkin lapsen etsintä on: "@Polku" (elementti määritelty sisäkkäin, selkäranka), "#Polku" (sama kuin toinen elementti) tai sen tyypit.

Source: github.com/biodream-llc/perfuse/fhir/xmlordergen

26.3 hl7

Paketti hl7 lukee HL7-versio 2 -viestejä.

Sillä ei ole riippuvuuksia standardikirjaston ulkopuolella, ja testi pakottaa sen. Se ei tee verkkotulostetta, ei kirjoita tiedostoja eikä aloita gorutiineja, joten se on turvallista käyttää mistä tahansa.

Reading a message

msg, err := hl7.Parse(raw) if err != nil { return err } mrn := msg.MustGet("PID-3.1") name := msg.MustGet("PID-5.1") msgType, event, _ := msg.Type() // "ADT", "A01"

Polut ovat merkintätapa, jota ihmiset jo käyttävät, kun he puhuvat HL7: sta: segmentti, kenttä, sitten valinnainen komponentti ja alikomponentti, kuten PID-5.1 tai OBX-5.2.3. Toistot ovat osoitettuina suluilla, kuten PID-3[2].1.

Get palauttaa virheen polulle, jota se ei voi parsia; MustGet palauttaa tyhjän merkkijonon sen sijaan. Molemmat ovat turvallisia puuttuvilla segmenteillä ja kentillä, koska oikea syöte on täynnä molempia ja parseri, joka panikkoi puuttuvista tiedoista, on hyödytön tehtävälle. Puute ei ole virhe — viesti, joka yksinkertaisesti ei sisällä PID-8: aa, tuottaa "" virheen sijaan.

Puuttuvat ja tyhjät

HL7 erottaa kentän, jota ei lähetetty, kentästä, joka lähetettiin tarkoituksella tyhjäksi, ja kliinisesti ne voivat tarkoittaa eri asioita - "ei allergioita kirjattu" ei ole "ei tiedossa olevia allergioita". Value.Exists raportoi eroa, jossa soittajat tarvitsevat sitä, kun taas String tasaa molemmat "" yleistapaukseen.

Kopioiminen ja tapa, jolla tämä voidaan tehdä väärin

Parse kopioiden syötteen, joten paluussa oleva viesti pysyy voimassa riippumatta siitä, miten kutsuja uudelleen käyttää puskurin. Se maksaa noin 3 % ja yhden varauksen viestin kohden.

WithZeroCopy ohittaa kopioinnin ja pitää viittauksen kutsujan viipaleeseen sen sijaan. Se on nopeampi, ja se tekee viestin turvattomaksi käytettäväksi sen jälkeen, kun viipale on kirjoitettu uudelleen. Lukeminen uudelleen käytettyyn puskuriin on normaali, tehokas tapa lukea verkkoa Go:ssa, joten ansa ottaa huolellisen koodin, ja oire on hiljaisesti väärät kenttien arvot virheen sijaan - yhden potilaan tiedot toisen potilaan nimellä. Käytä sitä syötteelle, joka on muuttumaton tai kestää viestiä pidempään, ja ei muutoin.

Acknowledgements

AckFor rakentaa ACK- tai NAK-vastauksen viestille, myös sellaiselle, joka epäonnistui parse-misessa, mikä on tapaus, joka merkitsee eniten: lähettäjän tarvitsee vastaus, vaikka se, mitä se lähetti, ei ollut viesti. Katso AckOptions.

Mitä tämä paketti ei tee

Se ei kirjoita tai muokkaa viestejä. Sillä ei ole käsitystä viestin rakenteesta segmenttien ulkopuolella, joten se ei kerro, että PV1 kuuluu tiettyyn vierailuryhmään. Se ei validoikaan version taulukoita. Nämä ovat tietoisia puutteita eikä laiminlyöntejä: tämä on indeksoija todelliselle liikenteelle, joka usein ei ole standardinmukainen ja joka silti on reititettävä.

Source: github.com/biodream-llc/perfuse/hl7

26.4 admit

Paketti admit rajoittaa työn määrää, joka on lennossa kerran.

Moottori luo goroutine-destination-kohden viestin kohden. Goroutine-t on halpaa; mitä ne pitävät, ei ole. Jokainen ulosmenneinen toimitus pitää socketin etäpäässä ja tiedostokuvaajan täällä, ja se pitää niitä koko uudelleenkokeilubudjetin ajan - oletusarvojen kanssa, viisi yritystä 30 sekunnin aikakatkaisulla ja 15 sekunnin takaisinvetona, joten lähes kolme minuuttia. Muutamia satoja lähettäjiä yhtä vastaanottajaa kohti, joka on vaikennut, on siten muutamia satoja kuvaajia, jotka pidetään minuuteiksi, ja prosessi loppuu.

Loppuminen on se epäonnistuminen, jota on syytä estää, koska se ei tule esiin siellä, missä se tapahtui. Se tulee esiin jossain muualla, joka ei liity asiaan: tietokanta ei voi avata journaliaan, liittymä lopettaa vastaanottamisen, lokia ei voida kirjoittaa. Moottori näyttää rikkoontuneen kolmessa kohdassa kerran, ja syy on yhteistyökumppanin järjestelmä, joka lakkasi vastaamasta.

Kaksi rajoitusta, ja jälkimmäinen on tärkeämpää kuin ensimmäinen:

Yhteensä, jotta prosessi pysyy sisällä kuvaajabudjetissaan.

Rajoitus kohden, jotta yksikin vastaanottaja ei voi kuluttaa yhteensä. Ilman sitä yksittäinen jumittunut kumppani kaataa kaikki muut kanavat, mikä on pahempaa kuin ei ollenkaan: vaikutusalue kasvaa yhdestä liittymästä kaikkiin niistä.

Source: github.com/biodream-llc/perfuse/internal/admit

26.5 alerts

Paketti alerts tarkkailee metriikoita ja kertoo, kun jokin on pielessä.

Asia on, että kukaan ei tarvitse tarkkailla kojua. "Epäonnistuneet transaktiot ovat jonoissa ilman ajankohtaista tutkintaa" on dokumentoitu toiminnallinen epäonnistuminen tämän ohjelmistoluokan kohdalla, ja syy on aina sama: tiedot olivat ruudulla, jota kukaan ei ollut katsomassa neljän aikaan aamulla.

Kolme päätöstä muotoilee sitä.

Hälytys on poistettava itsensä. Ilmoitus, joka laukaisee ja ei koskaan ratkaise, kouluttaa ihmisiä olemaan huomaamatta ilmoituksia. Jokainen sääntö tässä arvioidaan nykyisen tilan perusteella, joten vastaanottajan paluu sulkee hälytyksen, jonka se avasi.

Hälytykset debatoituvat kestolla, ei lukumäärällä. "Virheen osuus yli 5 % juuri nyt" laukaisee yhden onnettomuuden viestin hiljaisena tuntina. "Yli 5 % kahden minuutin ajan" ei laukaise. Jokaisella säännöllä on kesto ja mitään ei laukaista, ennen kuin ehto on kestänyt sen aikaa.

Mitä lähetetään, ei sisällä potilastietoja. Hälytys sisältää kanavan nimen, kohde-nimen, numeron ja kynnyksen. Ne tulevat konfiguraatiosta ja laskemisesta. Webhook menee chat-huoneeseen, chat-huoneessa on scrollback, ja scrollback ei ole paikka, jonne potilasidentifioija tulisi päätyä.

Source: github.com/biodream-llc/perfuse/internal/alerts

26.6 amqp

Paketti amqp on AMQP 1.0 -asiakas: yksi yhteys, yksi istunto, lähettävä ja vastaanottava linkki, vahvistettu vastaanottajan mukaan.

AMQP 1.0 on se, mitä Azure Service Bus ja Event Hubs puhuvat, mitä RabbitMQ 4 puhuu luonnostaan, ja mitä ActiveMQ ja Artemis puhuvat STOMP:n rinnalla. Kirjoitettu tässä samasta syystä kuin STOMP-asiakas ja AWS allekirjoittaja: täysi asiakas kirjasto olisi suurin osa binäärisen riippuvuusluettelosta neljälle performatiiviselle, joka merkitsee.

Mitä se tekee: SASL PLAIN tai ANONYMOUS (Service Bus ottaa jaetun pääsyavaimen nimen ja avaimen PLAIN:na), TLS, avaa/aloita/liitä, luotollinen virtaus, siirto, joka on jaettu kehyksiin, kun se ylittää peerin maksimikehyskoon, ja asettelut - hyväksytty, vapautettu, hylätty. Lähettäjä odottaa välittäjän asettelua ennen kuin ilmoittaa onnistumisen, joten "lähetetty" tarkoittaa, että välittäjä otti haltuunsa. Tyhjät kehykset pitävät yhteyden elossa peerin idle-aikakatkaisun sisällä, jota Service Bus pakottaa.

Mitä se ei tee: transaktiot, useat istunnot, linkin palauttaminen ja viestin annotaatiot lukemisen ulkopuolella.

Source: github.com/biodream-llc/perfuse/internal/amqp

26.7 analyze

Paketti analyze muuttaa parsitun Mirth-kanavan ihmisen käsiteltäväksi: kanavan toiminnan selkeä kuvaus ja rehellinen luettelo siitä, mitä ei selviä migraatiossa.

Suunnittelusääntö tässä on, että havainto on oltava riittävän tarkka voidakseen toimia. "Tämä kanava käyttää JavaScriptiä" ei ole havainto. "Kohde 1 kutsuu java.util.Date, jolla ei ole vastinetta JVM:n ulkopuolella" on.

Source: github.com/biodream-llc/perfuse/internal/analyze

26.8 api

Paketti api palvelee HTTP-liittymää, jota web-frontend käyttää.

Tärkeä suunnittelurajoitus: kanavat luetaan ja kirjoitetaan tiedostoihin levyllä. API on näiden tiedostojen editori, ei erillinen tallennusjärjestelmä, joka tapaa vie YAML:ää. Selainissa luotu kanava ja käsin kirjoitettu kanava ovat sama artifactti, mikä tekee "vienti jakamiseksi" triviaaliksi ja pitää gitin versiohistoriana.

Source: github.com/biodream-llc/perfuse/internal/api

26.9 as2

Paketti as2 on Applicability Statement 2 (RFC 4130): EDI HTTP:n yli, allekirjoitettu ja salattu S/MIME:llä, allekirjoitettu kuitti (MDN), joka nimeää saapuneen viestin tiiviste.

Maksajat ja kauppakumppanit käyttävät sitä X12- ja EDIFACT-viesteihin.

S/MIME on internal/cms, sama koodi kuin Direct-viestinnässä. Tässä on AS2:n oma: otsikot, viestin eheys (MIC) ja kuitti.

Source: github.com/biodream-llc/perfuse/internal/as2

26.10 attach

Paketti attach siirtää suuret kuormat viestin ulkopuolelle ja palauttaa ne.

HL7-viesti, joka sisältää skannatun raportin tai PDF:n, on tavallinen asiakirjavirtauksissa, ja kuorma on usein satoja kertoja suurempi kuin viesti sen ympärillä. Sen tallentaminen inline-tilassa tarkoittaa, että viestivarasto kasvaa asiakirjojen mukana eikä liikenteen mukana, ja viesti, joka on jonottamassa viidelle kohteelle, kopioituu viisi kertaa, ja liittymän on virtaistettava megatavua näyttääkseen jollekulle potilaan nimen.

Joten kuorma poistetaan, tallennetaan kerran sisällön mukaan ja korvataan viestissä tokenilla. Mirth kutsuu näitä liitekäsittelijöiksi, ja se on dokumentoitu migraatiotoiminto, miksi tokenin muoto on suunniteltu tunnistettavaksi eikä nerokkaaksi.

Mitä tämä paketti ei päättä

Se ei tee tallennusta eikä I/O:ta. Poiston tuotos on uudelleenkirjoitettu viesti ja kuormat; jossain muualla oleva Store päättää, minne ne menevät. Tämä erottelu tekee poistotestauksen mahdolliseksi ilman tietokantaa, ja se myös antaa saman logiikan toimia WASM-pelissä, jossa ei ole tietokantaa ollenkaan.

Source: github.com/biodream-llc/perfuse/internal/attach

26.11 authlimit

Paketti authlimit rajoittaa epäonnistuneita kirjautumisyrityksiä lähdeosoitteen perusteella.

Se on olemassa, koska kaksi kuuntelijaa tarvitsi samaa asiaa, ja toisella ei ollut mitään. FHIR-palvelimelle saatiin rajoitin, kun sille saatiin todennus; konsolin kirjautumisella ei ollut mitään, ja mittaus osoitti, että kaksikymmentä salasanan arvausta sekunnissa kestäen hallinnon tilille ilman viivettä ja lukitsemista. Tuolla tahdilla heikko salasana katoaa yhdessä yössä, ja ainoa jälki on lokitiedosto, joka on täynnä samanlaisia varoituksia.

Tarkoituksella ei ole yleiskäyttöinen rajoitin. Se rajoittaa epäonnistumisia, ei pyynnöitä: vilkas, laillinen asiakas ei koskaan vaikuta, ja ainoa asia, joka kertyy, on väärä.

Source: github.com/biodream-llc/perfuse/internal/authlimit

26.12 awsmsg

Paketti awsmsg kommunikoi Amazon SQS:n ja SNS:n kanssa standardikirjastoa ja jaettua Signature Version 4 -allekirjoittajaa käyttäen.

Sama argumentti kuin s3put: AWS SDK:n käyttäminen tuplaisi laskun kokoamisen kokoelman neljäksi API-kutsuksi. SQS käyttää JSON-protokollaa (AWS JSON 1.0, X-Amz-Target AmazonSQS.<Action>), jonka AWS dokumentoi nykyisenä; SNS käyttää kyselyprotokollaa, joka on ainoa, mitä sillä on. Molemmat toimivat LocalStackin ja VPC-päätepisteiden kautta päätepisteen ohitukseen.

Source: github.com/biodream-llc/perfuse/internal/awsmsg

26.13 awsv4

Paketti awsv4 allekirjoittaa pyynnöt AWS:lle Signature Version 4:llä, käyttäen vain standardikirjastoa.

Se alkoi s3put:sta. SQS, SNS ja lukeminen S3:sta tarvitsevat samaa allekirjoitusta eri palvelunimellä ja kyselymerkkijonolla, ja toinen kappale allekirjoituskoodeista olisi toinen paikka, jossa yksi virhe, joka on tärkeä - allekirjoitusvirhe, lukee täsmälleen väärältä tunnisteelta. Joten se asuu täällä, tarkistettuna AWS:n julkaisemien testivektoreiden kanssa, ja jokainen AWS-liittimä käyttää sitä.

Tunnistetiedot ovat staattisia avaimia tai vakioympäristömuuttujia. Instanssimetadatan tunnisteketju on tarkoituksella pois syljetty: se tarkoittaisi IMDS-kutsuja, välimuistia ja päivittämistä, jossa pieni toteutus lakkaisee olemasta pieni, ja Perfuse kieltää metadatan osoitteet määränpäinä oletuksena.

Source: github.com/biodream-llc/perfuse/internal/awsv4

26.14 azblob

Paketti azblob lukee ja kirjoittaa Azure Blob Storage -tiedostoja standardikirjastolla: jaettu avain tai SAS-todennus yksinkertaisen HTTP-pyynnön yli.

Sama päättely kuin s3put: Azure SDK on suuri ja operaatiot, joita integraatiomoottori tarvitsee, ovat viisi - asettaa, hakea, luetella, poistaa ja asettaa käyttöaste. Jaettu avain -allekirjoitus on määritelty tarkasti ("Authorize with Shared Key", Azure Storage REST), ja Azurite, Microsoftin emulaattori, tarkistaa sen samalla tavalla kuin palvelu.

Source: github.com/biodream-llc/perfuse/internal/azblob

26.15 brändäys

Paketti branding tallentaa asiakkaan logon ja tuotenimen, jotta asennus voi esittää itsensä omana tuotteenaan Perfusen sijaan.

Miksi logo ei ole asetus

Kaikki muu, mitä operaattori voi muuttaa, on skalaari asetustiedostossa. Logo on muutamia satoja kilotavuja binääritietoa, ja sen asettaminen sinne merkitsisi base64:ää YAML-tiedostossa, jota henkilö on tarkoitus pystyä lukea ja muokata käsin. Se sijaitsee sen sijaan sen vieressä, ja ainoastaan sen läsnäolo on näkyvissä asetusten pinnalla.

Se osa, joka on tärkeää: ladataan kuva on epäluotettava syöte

Logo ladataan hallinnollisella ja sitten se palvelee jokaiselle selaimelle, joka lataa konsolin, myös kirjautumissivulla ennen kuin kukaan on todennettu. Se tekee siitä laajimmin jaetun hyökkäyksen sisällön tuotteessa, joten se käsitellään sen mukaisesti:

Source: github.com/biodream-llc/perfuse/internal/branding

26.16 cda

Paketti cda lukee kliinisiä asiakirjoja.

Suunnittelu alkaa siitä, miten nämä asiakirjat todella liikkuvat, mikä ei ole tiedostoina. Potilaan kotiuttamisarvio jättää EHR:än sisään HL7 v2 MDM^T02 -viestiin, jossa koko asiakirja on base64-koodattu OBX-5:ssä ja kuvattu TXA-segmentillä. Se on tuhansia viestejä päivässä keskikokoisessa sairaalassa, ja se on syy, miksi tämä paketti sijaitsee HL7 v2 -parserin vieressä eikä asiakirjavälineessä: v2-puoli on jo täällä, joten putki "viesti saapui" - "FHIR DocumentReference on olemassa" on lyhyt.

Kolme asiaa on tarkoituksella laajuudessa ja yksi on tarkoituksella ei.

Laajuudessa: lukea asiakirjaa ja kertoa, mitä se sisältää yksinkertaisissa termeissä; tarkistaa, että ihmisen luettava kertomus ja koodatut sisääntulot ovat samaa mieltä; ja muuttaa FHIR:ksi. Kertomustarkistus on epätavallinen. Jokainen C-CDA-jakso sisältää saman tiedon kahdesti, kerran tekstinä kliinikolle ja kerran koodina koneelle, ja ne on tarkoitus olla samaa mieltä. Käytännössä ne usein eivät ole, ja mikään ei tarkista sitä - ei sertifioivaa työkalua, ei moottoreita. Kun teksti sanoo, että potilas on allerginen penisilliiniin ja koodattu sisääntulo sanoo jotain muuta, yksi lukijoista toimii väärän tiedon mukaan. Se on potilaan turvallisuusviite, joka on mekanisesti havaittavissa, joten se havaitaan täällä.

Ei laajuudessa: luodaan konformaalinen C-CDA. Yhden kirjoittaminen tarkoittaisi useiden satojen mallisääntöjen ja Schematronin tyydyttämistä, ja asiakirjojen tuottamista, jotka ovat 95 % oikein, epäonnistuisi sertifioinnissa tavoin, jotka ovat vastenmielisiä debugata. Lukeminen, tarkistaminen ja muuntaminen on suurin osa arvosta murto-osaan riskistä.

Source: github.com/biodream-llc/perfuse/internal/cda

26.17 channeltest

Paketti channeltest ajaa testejä kanavamäärittelyn vastaisesti.

Kanava on ohjelma. Se suodattaa, uudelleenkirjoittaa ja reitittää kliinisiä viestejä, ja sitä muokataan paineen alaisena ihmisillä, jotka eivät voi kokeilla sitä tuotantoon. Kanavan testaamisen puute on yksi suurin syy, miksi rajapintatyö on pelottavaa, ja "muutin transformerin ja mitään ei näkynyt erilaista viestiselaimessa" ei ole testi.

Keskeinen päätös on, että testi ajaa viestin todellisen muunnospolun kautta - sama suodatin, samat deklaratiiviset vaiheet, sama skriptimoottori, samassa järjestyksessä - vain kuljetus on korvattu. Testi, joka harjoittaa uudelleentoteutusta, menestyisi, kun kanava epäonnistuu, mikä on pahempaa kuin ei-testi, koska se aktiivisesti harhauttaa.

Source: github.com/biodream-llc/perfuse/internal/channeltest

26.18 chanscope

Paketti chanscope kapeuttaa lukea ja kirjoittaa kontekstia joillekin kanaville.

Se sijoittuu kontekstiin eikä ole kunkin kyselyn parametri, koska viestivarastossa ja toimitusjonossa on kymmeniä kyselyjä, ja raja on pyytäjän ominaisuus, ei kysymyksen. API asettaa sen kerran pyynnölle henkilölle, joka on rajoitettu joillekin kanavaryhmille; jokainen laskenta, lista, kaavio, haku- ja jonotoiminto on sitten yhtäpitävä toisten kanssa, joten kukaan ei kerro kokonaista 40 epäonnistumista ja näytä neljää.

Source: github.com/biodream-llc/perfuse/internal/chanscope

26.19 klusteri

Paketti klusteri sallii useiden Perfuse-palvelinten jakaa yhteisen PostgreSQL-tietokannan ja päättää, kuka suorittaa mitäkin.

Ongelma, jonka se ratkaisee

Yksi palvelin on yksi epäonnistumisen piste: kun se loppuu, jokainen liitäntä loppuu. Kaksi palvelinta yhdessä tietokannassa ratkaisee tämän vain, jos ne eivät koskaan suorita samaa kanavaa, koska kaksi MLLP-kuuntelijaa yhdessä syötteessä vuorottelevat lähettäjän kanssa, kaksi jonotyöntekijää toimittavat saman viestin kahdesti, ja kaksi DICOM-polleraa ilmoittavat kumpikin saman tutkimuksen.

How

Vuokra on rivi, joka nimeää sen, kuka pitää jotakin, ja laskuri, jonka haltija siirtää joka uudelleenjärjestelyssä, joka toimii joka muutamassa sekunnissa. Kelloja ei verrata toisiinsa: haltija, joka ei voi uudelleenjärjestää (romahdus, katkaistu tietokannasta), lopettaa sen, mitä vuokra kattaa, kunnes sen oma kello sanoo, että vuokra on melkein valmis, ja toinen palvelin ottaa sen vastaan vasta, kun sen oma kello on katsonut laskurin pysähtyvän koko vuokran ajan. Kunkin mittausväli on omalla kellollaan, joten palvelimien kellot ja tietokannan kellot eivät tarvitse olla samaa mieltä; ne tarvitsevat vain toimia noin samalla nopeudella. Kello, joka hyppää (virtuaalikone resynkronoi, järjestelmänvalvoja asettaa ajan), ei muuta mitään: ensimmäinen versio käytti tietokannan kelloa vanhenemiseen, ja testi löysi tietokannan, jonka kello hyppäsi kolmetoista sekuntia käsittelyssä jokaisen vuokran, kun vanhat palvelimet olivat edelleen käynnissä.

Haltijan lopettamisen ja seuraavan käynnistämisen välillä on lyhyt aukko, jossa kukaan ei ole käynnissä, mikä maksaa lähettäjälle muutaman sekunnin hylättyjä yhteyksiä, ja ei koskaan ole hetkeä, jolloin kaksi on käynnissä.

Two modes:

Jokainen vuokra sisältää aikakauden, joka lasketaan ylös aina, kun sen haltija muuttuu, joka nimeää haltuunottoa historiassa.

Source: github.com/biodream-llc/perfuse/internal/cluster

26.20 cms

Paketti cms on Cryptographic Message Syntax (RFC 5652) kuten S/MIME ja Direct-viestintä käyttävät sitä: SignedData (allekirjoita viesti, vahvista yksi ja kerro, kuka allekirjoitti sen) ja EnvelopedData (salaa viesti vastaanottajien sertifikaatteihin, salaa yksi avaimellamme).

Vain se, mitä Direct Applicability Statement ja sen toteutusopas vaativat: RSA SHA-256: n (SHA-1 hyväksytään vain lukemiseen, koska vanhemmat HISPt lähettävät sen edelleen), RSA-avainkuljetus PKCS#1 v1.5: n tai OAEP: n, ja AES-128 tai AES-256 CBC-tilassa. Salakirjoitus on standardikirjaston; tämä paketti on ASN.1 sen ympärillä.

Source: github.com/biodream-llc/perfuse/internal/cms

26.21 cms0057

Paketti cms0057 sisältää maksajapuolen osat CMS Interoperability and Prior Authorization lopullisesta säännöstä (CMS-0057-F), jotka liittyvät tietoihin eikä kuljetukseen: vakuutetut vaatimukset CARIN Blue Button ExplanationOfBenefit-resursseina, etukäteisvaltuutukset Da Vinci PDex ExplanationOfBenefit-resursseina, HRex-jäsenen vastaavuus Payer-to-Payer API: lle, jäsenluettelo Provider Access API: n taustalla, ja etukäteisvaltuutusmittaukset, joita maksaja on julkaistava joka vuosi.

Nämä FHIR-päätepisteet, jotka palvelevat näitä, sijaitsevat fhirserverissä; tämä paketti päättää, mitä niissä on.

Lääkkeet ovat koko tämän ulottuvuuden ulkopuolella, kuten ne ovat myös etukäteisvaltuutuksen säännöksissä: ei farmaseuttista ExplanationOfBenefit, ei formulariota, ei NCPDP: tä.

Source: github.com/biodream-llc/perfuse/internal/cms0057

26.22 koodisto

Paketti koodisto sisältää karttataulukoita, jotka kestävät pidempään kuin kanava, joka ensin tarvitsi yhden.

Toimialan verotus on suurelta osin uudelleenjohdettu kartta, jonka joku on jo johdettu. Sivuston sukupuolikoodeja, potilasluokkia, tilausten tiloja ja laitosten tunnisteita käännetään samalla tavalla jokaisessa kanavassa, joka koskee niitä, ja tänään kunkin käännöksen on erillinen taulukko erillisessä kanavassa. Neljäkymmentä kanavaa tarkoittaa neljääkymmentä kopiota ja neljääkymmentä paikkaa, joissa korjata seuraava kerta, kun vastaanottava järjestelmä muuttuu.

Joten taulukko muuttuu nimetyksi objektiksi, jota viitataan nimellä. Tämä on ilmeistä, ja se on pienempi puolisko arvosta.

Puolisko, jota kukaan ei rakenna

Suurempi puolisko on todiste. Suurin osa siitä, mikä tekee rajapinnasta hankalasti ylläpidettävän, ei ole kartoitus - se on, ettei kukaan tiedä *miksi*. "Poistamme etuliitteet, koska laboratorion MRN-sarake on numeerinen" on tietoa, joka on yhden henkilön päässä ja poistuu rakennuksesta, kun he eläkeikään; ja jäljelle jäävä kartoitus muuttuu joksikin, jota kukaan ei uskalla muuttaa ja kukaan ei uskalla poistaa.

Joten jokainen taulukko tallentaa, kuka päätti ja milloin, jokainen merkintä voi tallentaa oman syynsä, ja molemmat säilyvät tiedostossa, joka menee versiohallintaan. Kartoitus, jolla on syy, voidaan väittää. Kartoitus ilman syytä muuttuu taikauskoksi.

Miksi tiedosto on erillinen kanavasta

Siksi se on jaettu. Taulu kanavassa on taulu, jota vain kyseinen kanava voi käyttää, mikä on ongelma. Jaettu taulu tarvitsee oman historian: "kuka muutti sukupuolen määrityksen ja milloin" on kysymys taulusta, ei siitä kanavasta, joka tapahtui muokattavaksi sinä päivänä.

Source: github.com/biodream-llc/perfuse/internal/codeset

26.23 sääntelynmukaisuus

Paketti sääntelynmukaisuus toteuttaa CMS ADT -tapahtuman ilmoitusvirran työnkulun, joka on vaadittu 42 CFR 482.24(d): ssä toukokuusta 2021 lähtien.

Sairaaloiden on ilmoitettava potilaan vakiintuneille hoitajille — perusterveydenhuollon, erikoistuneen terveydenhuollon, jälkihoitopaikkojen — kun potilas otetaan hoitoon, lähtee sairaalasta tai siirretään. Sääntely on olemassa, koska potilaat joutuvat hukkaan siirtymisen aikana: perusterveydenhuollon lääkäri, joka ei tiedä potilaan lähtöään, ei voi ajoittaa seurantaa, joka estää uudelleenotollon.

Tämä paketti tarjoaa laitteet: - Seurata, mitkä tarjoajat ovat vakiintuneita kullekin potilaalle. - Ohjata ADT -tapahtumia oikeille tarjoajille oikealla prioriteetilla. - Merkitä jokainen lähetetty ilmoitus, toimitustilassa, CMS -tarkastusten auditointia varten. - Generoida sääntelynmukaisuusraportit, jotka näyttävät ilmoitusprosentit ja epäonnistumiset.

Lankarajoitus on vaadittu kaikkialla, koska ADT -viestit saapuvat rinnakkain useista kanavista ja ilmoitusputki suoritetaan rinnakkain.

Source: github.com/biodream-llc/perfuse/internal/compliance

26.24 config

Paketti config lataa kanavamäärityksiä tiedostoista.

Konfiguraatio sijaitsee tiedostoissa eikä tietokannassa, mikä on pääasia, joka Perfuse tekee eri tavoin kuin Mirth. Mirth pitää kanavat oman tietokannan, mikä on syy, miksi versiohallinta on erillinen tuote, miksi kanavan edistäminen testiin tuotantoon on vaikeaa, ja miksi kukaan ei voi vastata "mitä muutettiin viime tiistaina" ilman tukipuhelua. Tiedostot antavat git, diffs, katselun, CI ja ympäristön edistämisen ilman ylimääräistä koneistoa.

Validointi on tarkoituksella tiukka ja tapahtuu latauksen aikana: tuntemattomat kentät ovat virhe, suodatuslausekkeet käännety, osoitteet tarkistetaan. Kanava, jota ei voida ymmärtää, on kieltäytyminen käynnistymästä sen sijaan, että se suorittaa sitä, mitä kukaan ei ole aikonut.

Source: github.com/biodream-llc/perfuse/internal/config

26.25 sopimus

Paketti sopimus muuttaa sen, miltä syöte näyttää, siitä, miltä syötteellä pitäisi näyttää.

Profiili vastaa "mitä olen vastaanottamassa". Se on hyödyllinen kerran. Kallis ongelma on se päivä, jolloin se muuttuu: toimittajan päivitys pudottaa kentän, uusi koodi ilmestyy, segmentti alkaa toistaa. Mikään niistä ei ole virhe - viestit ovat edelleen voimassa HL7 ja jokainen moottori maailmassa hyväksyy ne - joten mikään ei huomaa, kunnes vastaanottaja menee alas, yleensä viikkoja myöhemmin, ja tutkimus alkaa väärästä päästä.

Sopimus on profiili, joka on kirjoitettu odotuksena ja tarkistettu. Se on sopimustestaus, joka on ratkaistu idea ohjelmistossa yleensä ja lähes kokonaan puuttuu terveydenhuollon integraatiosta.

Miksi yksikkö on prosentti eikä viesti

Ilmeinen suunnittelu on tarkistaa jokainen viesti ja valittaa, kun yksi epäonnistuu. Se tuottaa järjestelmän, jota kukaan ei voi käyttää. Todelliset syötöt sisältävät osan aidoista outoista viesteistä - testiviesti toimittajalta, potilas ilman kirjattua sukupuolta, manuaalinen syöttö - ja hälytys kullekin niistä kouluttaa ihmisiä olemaan huomaamatta hälytyksiä, minkä jälkeen ominaisuus on huonompi kuin mitään, koska se on kuluttanut huomion, jota se tarvitsi.

Joten odotus on suhteellinen osuus ikkunassa: "PID-3 on asetettu vähintään 99%: iin viesteistä". Yksi outo viesti ei laukaista. Viiden prosentin viestit menettävät lääketieteellisen rekisterinumeronsa.

Sopimus kuvailee, mitä saapuu, ei mitä lähtee

Tämä on ero, jonka ihmiset saavat ensin väärin, myös minä, kun testasin integraatiota. Perfuse tallentaa viestin, kun se saapui - se on tarkoituksella, koska tallennettu viesti on todiste siitä, mitä lähettäjä lähetti - joten sopimus tarkistetaan saapuvasta syötöstä eikä kanavan muunnosten tulosta vastaan.

Se on oikea oletus laajalla marginaalilla: asia, joka muuttuu ilman varoitusmerkkiä, on lähettävä järjestelmä, ja sopimuksen tarkoitus on huomata. Mutta se tarkoittaa, että odotus, joka on kirjoitettu kartoitetun arvon ("kartoituksen jälkeen vain laboratorion koodit säilytetään") epäonnistuu välittömästi ja hämmentävästi, koska koodit, joita se mainitsee, eivät koskaan ilmesty liikenteessä, jota profiloitava. Mitä tahansa, mitä lähtee, kuuluu kanavan testiin, joka suorittaa todelliset muunnokset.

Miksi rikkomus nimeää sietokykynsä, jota se rikkoi

"PID-3 epäonnistui" kertoo jonkunille mitään. "PID-3 asetettiin 94.2%: iin viimeisten 500 viestin, sopimus vaatii 99%" kertoo heille, kuinka paha se on, kuinka varma he ovat, ja onko se arvo herättää jonkun. Numerot ovat viesti.

Source: github.com/biodream-llc/perfuse/internal/contract

26.26 crd

Paketti crd on Da Vinci Coverage Requirements Discovery -palvelu (CRD 2.2.1): maksajan puoli CDS Hooks -keskustelusta, joka kertoo klinikoille, kun tilaus on vielä luonnos, onko se kattava, tarvitaanko sitä ennen autorisointia, ja mitä asiakirjoja maksaja haluaa.

CMS-0057: n Prior Authorization API on käytännössä kolme Da Vinci -opasta yhdessä: CRD kertaa, mitä vaaditaan, DTR kerää sen, PAS lähettää sen. Perfuse oli PAS. Tämä on yksi muista kahdesta; DTR: n $questionnaire-package on FHIR -päätepisteessä.

Kattavuuspäätökset tulevat sääntötiedostosta, koska ne ovat maksajan käytäntöä ja ne muuttuvat ilman ohjelmistojulkaisuja: koodi (tai koodiluettelo) ja mitä siihen sovelletaan - kattavuus tai ei, edellytetäänkö etukäteen hyväksyntää tai ei, asiakirjat ja DTR-kysely, joka kerää ne. Tilauksen, joka ei vastaa mitään sääntöä, vastaus on "ehdollinen" ja "määrittämätön", mikä on se, mitä CRD sanoo palautettavan, kun palvelu ei voi päättää - ei koskaan arvaus, onko se kattavuus.

Vastaukset noudattavat opasta: järjestelmätoiminto, joka päivittää jokaisen tilauksen kattavuustietojen laajennuksella, jonka EHR tallentaa tilaukseen ja lähettää myöhemmin eteenpäin ennakkovaltuutuksella; ja kortti kunkin tilauksen mukaan, jotta kliinikko näkee sen.

Source: github.com/biodream-llc/perfuse/internal/crd

26.27 kojut

Paketti kojut määrittää kojut, jotka Perfuse toimittaa jokaiselle, joka seuraa sitä, ja miten henkilölle annetaan yksi: roolin, hakemistoryhmän, jonka kojutiedosto kartoittaa, tai tallennetun näkymän mukaan.

Kojut koostuvat laatoista, ja laatat näyttävät vain yhteenvetoja - laskelmia, nopeuksia, aikoja, tiloja. Mikään ei näytä viestiä, potilasta tai tunnistetta, joten kojua voidaan antaa osastopäällikölle tai asettaa seinänäytölle ilman potilastietojen laajentamista. Laatta, joka tarvitsee tietoa, joita Perfuse ei vielä tallenna, ei ole tekaistu: koju listaa sen suunniteltuna.

Täydellinen joustavuus on Grafanan tehtävä, ei tämän paketin. Jokainen laatta, jolla on mittari taustallaan, vie Grafanan paneeliksi Perfusen /metrics-kautta, joten sivusto, joka haluaa enemmän kuin kevyen konfiguraation, ottaa kojun sinne.

Source: github.com/biodream-llc/perfuse/internal/dashboards

26.28 davinci

Paketti davinci kertoo, mikä Da Vincin priorisoitu hyväksyntäopas (CRD, DTR, PAS) -julkaisu asiakas puhuu.

Perfuse vastaa kahtena: 2.2 (CRD 2.2.1, DTR 2.2.0, PAS 2.2.1), uusin, ja 2.1 (CRD, DTR ja PAS 2.1.0), julkaisu CMS-0057-F:n suosittelemat listat, joilla US Core 3.1.1 -perusta vanheni 2.0.1 -julkaisuissa. Nämä kaksi eroavat muodoista, joita asiakas lukee nimeltä - DTR:n $kyselypaketti-parametrit (PackageBundle 2.1:ssa, packagebundle 2.2:ssa), PAS:n $tiedustelu-vastaus (yksi Bundle 2.1:ssa, useita parametreja 2.2:ssa), laajennukset, jotka ovat vain yhdessä niistä - joten yksi vastaus ei voi palvella molempia, ja palvelimen on tiedettävä, kummalle se puhuu.

Se kerrotaan, ensin tarkimmasta: itse pyynnöstä (CRD:n davinci-crd.pyydetytVersio; versio, joka on profiilissa, jota syöte vaatii, profiili|2.1.0), sitten asiakkaan rekisteröinnistä (davinci_versio SMART- tai CDS-asiakkaalla), sitten palvelimen omasta asetuksesta (palvelu -davinci-versio), joka oletusarvoisesti on uusin.

Source: github.com/biodream-llc/perfuse/internal/davinci

26.29 dbtime

Paketti dbtime muotoilee aikaleimat siten, että niiden lajittelu tekstinä lajittelee ne aikana.

Jokainen Perfusen tallennus pitää aikaleimoja TEXT-muodossa SQLite:ssa ja luottaa merkkijonon vertailuun järjestyksen ja aluekyselyjen mukaan: ORDER BY received_at DESC, WHERE expires_at < ?, WHERE at >= ?. Se on järkevä suunnittelu - se pitää tietokannan, jonka joku voi lukea sqlite3-komennolla - mutta se toimii vain, jos tekstimuoto on kiinteäleveyinen.

time.RFC3339Nano ei ole. Sen dokumentaatio sanoo, että se poistaa sekuntikentän lopussa olevat nollat, joten sama kello tuottaa merkkijonoja eri pituuksilla:

20:56:33.12345Z <- 123450 mikrosekuntia, lopussa oleva nolla poistettu 20:56:33.123456Z <- 123456 mikrosekuntia

Vertaillessa tekstiä ensimmäinen on *suurempi*, koska jaettu etuliite "12345" jälkeen se on 'Z', kun toisessa on '6', ja 'Z' lajitellaan jokaisen numeron yläpuolelle. Niin varhaisempi hetki lajitellaan myöhäisemmäksi. Karkeasti yksi vierekkäinen pari kymmenestä on vaikuttunut, miksi se esitettiin satunnaiseksi testiepäonnistumiseksi eikä ilmiselvänä rikkinäisenä ominaisuutena.

Mikä se todella rikkoi: sekä audit-loki että viestin selain lajittelevat aikaleiman mukaan ja voivat näin ollen listata saman sekunnin sisällä olevat merkinnät väärässä järjestyksessä. Audit-reitti on vaatimustenmukaisuusartefakti ja viestin selain on keino, jolla joku rekonstruoii, mitä tapahtui, joten molemmissa tapauksissa järjestys on pointti.

Alla oleva ulkoasu käyttää .000000000 sen sijaan, että .999999999. Molemmat tulostavat nanosekunteja; ero on, että nollat ovat merkittäviä ensimmäisessä ja poistetaan toisessa.

Source: github.com/biodream-llc/perfuse/internal/dbtime

26.30 rajattu

Paketti delimited parsii tietueita, jotka on eroteltu ja jaettu määritetyillä merkeillä.

Tämä on Mirthin Delimited-datatyyppi: CSV, tab-eroteltu, pystyviiva-eroteltu, kiinteä-sarakkeen tiedostot ja laboratorioanalyysien tai toimistopalvelujen pitkä häntä, jotka emittoivat jonkun kirjoittaman vuonna 1994 ja se toimii.

Tarkoituksella ei yleinen CSV-kirjasto. Se, mikä on tärkeää tässä, on se, mitä terveydenhuollon syöte tekee, mitä hyvin muodostettu CSV ei tee: otsikkorivi, joka voi olla läsnä tai ei, lopussa oleva tyhjä rivi, josta ei saa tulla tyhjä tietue, sarakkeet, jotka viittaavat nimellä, jotta muodonmuutos ei riko, kun toimittaja lisää yhden, ja mahdollisuus kohdella koko tiedostoa yhtenä viestinä tai jokainen rivi omalla.

Viimeksi mainittu on se, joka muotoilee kaiken muun. Viisi tuhatta tulosta sisältävä tiedosto on joko yksi viesti tai viisi tuhatta, ja nämä kaksi eivät ole vaihtokelpoisia: yksi viesti tarkoittaa yhtä vahvistusta ja yhtä epäonnistumista koko tiedostolle, ja viisi tuhatta tarkoittaa, että jokainen rivi voidaan suodattaa, muuttaa ja yrittää uudelleen omalla.

Source: github.com/biodream-llc/perfuse/internal/delimited

26.31 dicom

Paketti dicom lukee DICOM-tietojoukkoja.

DICOM on se, missä radiologia asuu, ja sairaalan integraatiomootorin, joka ei puhu sitä, on suljettu kokonaan kuvauksesta. Mirthilla on DICOM-kuuntelija ja lähettäjä, joten tämä on migraatiokatkaisija kaikille sivustoille, jotka tekevät modaalitöitä.

Laajuus, selkeästi sanottuna

Tämä paketti parsii tietojoukkoja: tiedoston meta-tiedot, alueet, siirtosyntaksi ja arvot, jotka ovat tärkeitä reititykselle ja tunnistamiselle. Se ei dekoodaa pikselidataa, eikä se koskaan tee sitä tämän paketin osalta - integraatiomootorin siirrä kuvia, se ei näytä niitä, ja dekooderi on suuri määrä formaattisidonnaisia töitä, jonka ainoa tarkoitus tässä on tehdä binääri suuremmaksi.

Metatietojen lukeminen ilman koskettamista pikseleihin on myös se, mikä tekee siitä nopean liikenteessä, joka on tärkeää: rintakehän CT on satoja megatavuja pikseleitä kahden kilotavun tiedon takana, jota kuka tahansa reitittää.

Miksi arvo-esitykset käsitellään nimenomaisesti

DICOM-elementti sisältää kaksi kirjainta, jotka kuvaavat, miten sen arvo luetaan, ja säännöt poikkeavat VR:stä toiseen tavoin, joita ei voida arvata: joillakin on kaksi tavun pituus ja joillakin neljä, joillakin on täytetty tyhjä merkillä ja joillakin nollamerkillä, ja numeeriset merkkijonot voivat sisältää useita arvoja, jotka on erotettu kenoviivalla. Yhden väärän arvon antaminen ei tuota virhettä, vaan se tuottaa uskottavan näköisen väärän arvon - potilaan nimen lukeminen päivämäärän keskeltä tai tutkimusidentifikaattorin virhe yhdellä tavulla.

Source: github.com/biodream-llc/perfuse/internal/dicom

26.32 dicomweb

Paketti dicomweb puhuu DICOMwebiä (DICOM PS3.18): QIDO-RS hakemiseen, WADO-RS ja WADO-URI noutamiseen, STOW-RS tallentamiseen HTTP:n yli.

Se on tapa, jolla katselijat, tekoälypalvelut ja pilviarkistot tavoittavat kuvantamisen nyt: OHIF, Google Cloud Healthcare, Azure Health Data Services, AWS HealthImaging, Orthancin ja dcm4cheen DICOMweb-liittymät. Integrointimoottori, joka puhuu vain verkkoprotokollan vuodelta 1993 (DIMSE: C-STORE, C-FIND), voi syöttää PACS:in, mutta ei selainta.

Paketti koostuu neljästä osasta: tietojoukon lukijasta, joka käy koko objektin läpi, mukaan lukien sekvenssit, ja tietää, missä pikselidata sijaitsee ilman sen lataamista; DICOM JSON-mallista (PS3.18 F.2); multipart/related, joka on tapa, jolla DICOMweb siirtää useita objekteja yhdessä pyynnössä; ja arkistosta, jossa on indeksi, josta QIDO ja WADO vastaavat.

Source: github.com/biodream-llc/perfuse/internal/dicomweb

26.33 direct

Paketti direct on Directin turvallinen viestintä reunajärjestelmänä: viesti Direct-osoitteeseen allekirjoitetaan tämän osoitteen varmennevirallisella allekirjoituksella ja salataan vastaanottajan varmennevirallisella allekirjoituksella, S/MIME:nä, ja lähetetään HISP:lle SMTP:n kautta; viesti, joka on vastaanotettu HISP:ltä (SMTP:n tai IMAP:n kautta), salataan ja sen allekirjoitus tarkistetaan luotettavien ankkureiden vastaisuudessa ennen kuin mitään sitä lukee.

Se noudattaa Direct Project Applicability Statement for Secure Health Transport 1.2 - ja XDM-määritystä (IHE ITI TF-1 Annex 15) asiakirjoille, joissa on metatietoja. Se ei ole HISP: HISP:n akkreditointi, sen varmennepolitiikka ja sen hakemisto pysyvät HISP:llä.

Source: github.com/biodream-llc/perfuse/internal/direct

26.34 lääke

Paketti lääke käsittelee koodit ja määrät, jotka tunnistavat lääkkeen.

Eroon farmaseuttisista standardeista, jotka sisältävät ne, koska sama lääkekoodi esiintyy NCPDP-vaatimuksesta, SCRIPT-lääkemääräyksestä, HL7 RXE-segmentistä ja FHIR MedicationRequestista, ja muunnos, joka elää yhdessä niistä paikoista, on muunnos, jota muut kolme tarvitsevat.

Source: github.com/biodream-llc/perfuse/internal/drug

26.35 dsdr

Paketti dsdr allekirjoittaa ja tarkistaa CDA-dokumentteja HL7 Implementation Guide for CDA Release 2: Digital Signatures and Delegation of Rights, Release 1 (lokakuu 2014) -kuvaamalla tavalla - sähköisen allekirjoituksen standardin, jonka HIPAA ottaa käyttöön vaatimusliitteiden osalta CMS-0053-F:ssa, 45 CFR 162.2002(e):ssä, josta on täytäntöönpano 26. toukokuuta 2028.

Mitä opas pyytää, ja missä se tehdään täällä:

Missä opas on vaikeneva, valinnat on nimetty: se ei anna nimeämistilaa omille elementeille (digitalSignature, authorizedSigner, SignaturePurpose), joten ne on asetettu urn:hl7-org:sdtc:hen; ja tarkoitus on myös ilmoitettu XAdES CommitmentTypeIndicationina ASTM OID:llä, jonka XAdES-työkalut lukevat, ja opaan oman elementin, jota ne eivät lue.

Oikeuksien delegointi (delegoitu allekirjoittaja SAML-väittämällä) ei tuoteta; allekirjoitus, joka sisältää yhden, ilmoitetaan sellaisena.

Source: github.com/biodream-llc/perfuse/internal/dsdr

26.36 e4x

Paketti e4x saa Mirth Connectin JavaScriptin suorittamaan muuttumattomasti.

Mirth-skriptit on kirjoitettu Rhinoon, joka toteuttaa E4X:n: XML on luonnollinen tyyppi, jolla on oma syntaksi. Moottori täällä on goja, joka ei tee sitä, ja aukko ei ole vain suoritusaikainen. Kolme E4X:n osaa on *syntaksi*, joten gojan parseri hylkää tiedoston jo ennen kuin mikään oliomalli voisi auttaa:

for each (var seg in msg..OBX) { } // for-each, ja jälkeläisoperaattori var z = <ZZZ><ZZZ.1>value</ZZZ.1></ZZZ>; // XML-litteraali var id = node.@root; // attribuutti

Tämä tiedosto kirjoittaa ne uudelleen tavalliseksi ECMAScriptiksi, jota goja parsee, jättäen semantiikan suoritusaikaiselle oliomallille xml.go:ssa. Kaikki muu E4X:stä - ominaisuuden pääsy elementin nimen mukaan, indeksointi toistuvuudelle, asettaminen, toString - on jo voimassa oleva JavaScript-syntaksi ja tarvitsee muutosta.

Uudelleenkirjoitus tehdään oikealla lexerillä sijaan säännöllisten lauseiden kanssa, koska vaihtoehto korruptoi toimivat skriptit. Kuviomalli jälkeläisoperaattorille löytää yhden "http://example.org":ssa, kuviomalli XML-litteraaleille löytää yhden "a < b && c > d":ssa, ja skripti, joka vaihtaa merkitystä hiljaisesti, on paljon huonompi kuin skripti, joka kieltäytyy lataamasta.

Source: github.com/biodream-llc/perfuse/internal/e4x

26.37 edifact

Paketti edifact lukee ja kirjoittaa UN/EDIFACT-vaihtoja (ISO 9735): UNA-palvelusarjan neuvon, UNB/UNZ-vaihto kuoren, valinnaiset UNG/UNE-toiminnalliset ryhmät ja UNH/UNT-viestit, joihin sisältyy vapautusmerkki ja, syntaksiversion 4 osalta, toistoseparaattori.

Se tarkistaa kirjekuoren laskurit ja viittaukset, osoittaa tietoelementit suodattimille, jakaa vaihdon yhdeksi viestiksi ja luo CONTRL-vahvistuksen.

Se lukee minkä tahansa viestityypin (ORDERS, INVOIC, IFTSTA, MEDRPT...); se ei sisällä hakemistoja, jotka määrittävät, mitä segmenttejä viestityyppi voi sisältää, joten se tarkistaa rakenteen, ei sisältöä.

Source: github.com/biodream-llc/perfuse/internal/edifact

26.38 egress

Paketti egress päättää, saako tämä moottori muodostaa yhteyden ulospäin osoitteeseen.

Se on olemassa, koska kohde voidaan osoittaa minne tahansa, ja yksi yhdistelmä muuttaa sen tavaksi lukea sisäistä verkkoa: SOAP-kohde, jossa on vastausmuunnin, palauttaa vastaanottajan vastauksen käsikirjoitukselle, jotta editori voi luoda kanavan, joka noutaa sisäisen URLin ja kirjoittaa sisällön lokitiedostoon tai viestiin.

Todistettu käytännössä: SOAP-kohde, joka on suunnattu paikalliseen HTTP-palvelimeen, laittoi palvelimen vastausruumiin kanavan lokiriville.

Suhteellinen vastaus ei ole estää ulospäin suuntautuvia yhteyksiä - viestien toimittaminen määritettyihin päätepisteisiin on ohjelmiston koko tarkoitus, ja editori on tarkoitettu määrittämään ne. Se on kieltäytyä tietyistä osoitteista, jotka eivät koskaan ole viestin kohde ja ovat aina tunnistetietokanta.

Source: github.com/biodream-llc/perfuse/internal/egress

26.39 moottori

Paketti moottori suorittaa määritettyjä kanavia.

Kanava on lähde, suodatin ja joukko kohteita. Suorittimen tehtävä on olla rehellinen siitä, mitä tapahtui kullekin viestille: vahvistus pitäisi tarkoittaa sitä, mitä määritys sanoo, suodatettu viesti pitäisi voida erottaa toimitetusta viestistä, ja viesti, jota ei voitu toimittaa minnekään, ei saa ilmoittaa hyväksytyksi.

Source: github.com/biodream-llc/perfuse/internal/engine

26.40 epa

Paketti epa on NCPDP SCRIPT -sähköinen etukäteisvaltuutus, maksajan puolesta: PAInitiationRequest, PARequest, PAAppealRequest ja PACancelRequest sisään, ja niiden vastaukset ulos.

CMS-0062-P ehdottaa, että vaikuttuneet maksajat tukkisivat sitä 1. lokakuuta 2027 alkaen, ja Medicare Part D vaatii jo sitä. Pyynnön päätöksenteko tehdään samalla tavalla kuin kaikki etukäteisvaltuutukset tässä palvelimessa: se muuttuu Da Vinci PAS -pyyntöksi (vaatimus, lääkepyyntö ja määrääjän vastaukset QuestionnaireResponse -vastauksena) ja menee samaan sääntötiedostoon, päätöspalveluun ja tarkastusjonoon. Formulaari kertoo, mitkä lääkkeet tarvitsevat sitä ja mitä kysymyksiä kysytään, samasta FHIR-kyselyllisestä Da Vinci DTR:stä.

NCPDP:n schemat on lisensoitu. Elementtien nimet ja järjestys täällä seuraavat julkista Surescripts ePA -käsikirjaa ja sen esimerkkejä; kaksi elementtiä, joita julkisessa aineistossa ei koskaan näytetä (syy sisällä Closed ja sisällä Denied), seuraavat SCRIPT-mallia, jota käytetään muualla, ja ne on nimetty käsikirjassa, jotta maksaja voi tarkistaa ne omasta schemansa vastaan.

Source: github.com/biodream-llc/perfuse/internal/epa

26.41 eprescribe

Paketti eprescribe lukee ja kirjoittaa NCPDP SCRIPT -lääkemääräyksiä, jotka ovat lääkevirtojen standardi.

Nimetty siitä, mitä se tekee, eikä standardin mukaan, koska internal/script on jo JavaScript-moottori ja kaksi pakettia, jotka ovat nimeltään script yhdessä puussa, on virhe, joka odottaa tapahtuvansa tuontirivillä.

SCRIPT on XML, toisin kuin Telecommunication Standard, joka kuljettaa tuloksena olevan vaatimuksen. Määrääjä lähettää uuden lääkemääräyksen (NEWRX) apteekkiin; apteekki lähettää takaisin RXFILL -viestin, joka kertoo, mitä tapahtui, REFREQ -viestin, joka pyytää uudelleentäyttöä, tai RXCHG -viestin, joka pyytää muutosta. Jokainen näistä on viesti täällä.

Missä vaara on

Kaksi kenttää lääkemääräyksessä ovat vaarallisia, kun ne luetaan väärin eikä niitä puututa.

Korvaamiset on ensimmäinen. Nolla tarkoittaa, että korvaaminen on sallittua, ja yksi tarkoittaa, että lääke on annettava sellaisenaan. Se lukee väärin kenelle tahansa, joka odottaa lippua, jossa yksi tarkoittaa kyllä, ja virheen tekeminen antaa geneerisen, kun määrääjä vaati merkkilääkettä - tai kieltäytyy korvaamasta, mikä on sama virhe, joka maksaa potilaalle rahaa. Joten tämä paketti kieltäytyy arvaamasta: puuttuva Substitutions -elementti on virhe eikä oletusarvo, koska molemmat oletusarvot ovat väärin.

Uudelleentäyttöluvun määrä on toinen. Aikataulun II lääkemääräys ei saa olla uudelleen täytettävissä, ja järjestelmä, joka siirtää uudelleentäyttöluvun non-kontrolloidusta mallista, tuottaa näyttävän lääkemääräyksen, jonka apteekin on pakko kieltäytyä.

Mitä ei ole vahvistettu

Viestirakenne seuraa julkaistuja SCRIPT -elementin nimiä. Yksikään viesti tästä paketista ei ole lähetetty todellisen reititysverkon kautta, kuten Surescripts, ja sen sertifioiminen on kaupallinen prosessi eikä tekninen. Tämä parsii ja rakentaa muodon; se ei väitä sertifioimista.

Source: github.com/biodream-llc/perfuse/internal/eprescribe

26.42 vastine

Paketti equiv osoittaa, että kaksi moottoria ovat samaa mieltä, tai kertoo tarkalleen, missä ne eivät ole.

Tämä on vastaus ainoaan kysymykseen, joka todella estää migraation. Rajapintatiimi ei kiellä uutta moottoria, koska se puuttuu ominaisuuksista; he kieltäytyvät, koska he eivät voi olla varmoja, että se tekee saman asian jo olemassa olevaan liikenteeseen, ja väärä tulos merkitsee, että laboratoriotulokset eivät pääse lääkäreiden luokse. Mikään ominaisuusvertailu ei vastaa tähän. Näyttöaineisto kyllä.

Tarkoituksena on rinnakkainen suoritus. Molemmat moottorit vastaanottavat samat tuotantoviestit; istuva moottori jatkaa toimintaa ja Perfuse toimittaa niille, joille se ei toimita, mikä on jo varjokanavien ominaisuus. Kahden viikon jälkeen tulokset vertaillaan täällä, ja keskustelu muuttuu "luota tähän" -tyyppisestä keskustelusta "tässä ovat kolme viestiä neljästäsadasta tuhannesta, joissa eroon ja miksi"

Ryhmittely on koko ominaisuus

Viattomien 400 000 viestin vertailu tuottaa 400 000 tulosta ja se sulkeutuu lukemattomana. Melkein jokainen todellinen ero johtuu yhdestä syystä: päivämäärämuodosta, laitoksen koodista, yhdestä muunnosvaiheesta, jota kukaan ei ole siirtänyt. Niinpä erot ryhmitellään syyn mukaan - polku viestissä ja eron tyyppi - ja niitä raportoidaan kerran lukumäärän kanssa. Kolme tuhatta eroa yhdestä syystä on yksi tulos, ei kolme tuhatta. Tämä yksinkertainen päätös on se, mikä tekee raportin luettavaksi, ja luettava raportti on se, mikä erottaa migraation, joka etenee, ja sen, joka jää paikoilleen.

Arvot pidätetään oletusarvoisesti

Todellinen liikenne on potilastietoja, joten vertailuraportti on paikka, jossa PHI voi vuotaa tikettiin, sähköpostiin tai diaan. Oletusarvoisesti tämä raportti raportoi polut, tyypit ja laskurit - ei arvoja. Se riittää löytämään syyn: "MSH-7 eroaa 3 000:sta 3 000 viestistä" kertoo analyytikolle, että se on päivämäärämuoto ilman yhden päivämäärän näyttämistä.

Arvoja voidaan ottaa käyttöön tietoisesti, koska lopulta joku tarvitsee nähdä yhden, ja sen kieltäminen vain työntäisi heidät huonompaan työkaluun. Se on eksplisiittinen opt-in ja raportti sanoo omalla kasvollaan, että se sisältää viestisisällön.

Source: github.com/biodream-llc/perfuse/internal/equiv

26.43 expr

HL7 v2 -sidonta.

Tämä on logiikka, joka aiemmin asui eval.go-tiedostossa. Se on muuttumaton käyttäytymisessään - tarkoituksella, koska v2-suodatin on se, mitä jokainen HL7-kanava suorittaa, ja yleisen kieliopin tarkoituksena oli lisätä muotoja, ei muuttaa tätä.

Source: github.com/biodream-llc/perfuse/internal/expr

26.44 fdlimit

Paketti fdlimit selvittää, montako tiedostokuvausta tämä prosessi voi avata, ja korottaa rajoitusta, jos se voi.

Tämä on olemassa sen takia, että se estää epäonnistumisen muodon. Jokainen saapuva yhteys on kuvaus, ja myös jokainen lähtevä toimitus lentokoneessa. Vastaanottaja, joka on lopettanut vastaamisen, pitää kuvausta koko uudelleenyritysrahoituksessa - oletusarvoisesti viisi yritystä kolmenkymmenen sekunnin aikakatkaisulla plus viisitoista sekuntia takaisinvedolla, eli lähes kolme minuuttia. Muutaman sadan yhteyden muodostaminen yhteen jumiutuneeseen vastaanottajaan on siten muutaman sadan kuvaajan pito kolmen minuutin ajan.

Rajoitteen ylittäminen ei tuota siistiä virhettä siinä kohdassa, jossa se ylittyi. Se tuottaa "liian monta avointa tiedostoa" -virheen aivan toisaalla: tietokanta ei voi avata journaliaan, web-käyttöliittymä lopettaa yhteyksien hyväksymisen, lokiin ei voida kirjoittaa. Moottori näyttää siltä, että se on rikkoutunut kolmessa eri kohdassa yhtä aikaa, ja todellinen syy on se, että järjestelmäkumppani on vaikennut. Tämä on se tuki, jonka tämä paketti on tarkoitettu välttämään.

Kaksi asiaa tapahtuu käynnistyksen yhteydessä. Pehmeä raja nostetaan kovaan rajaan, mikä yleensä poistaa ongelman kokonaan - pehmeä oletusarvo on usein muutamia satoja, kun taas kova raja on kymmeniä tuhansia. Sitten mitä tahansa on saatavilla, se raportoidaan, jotta moottori voi rajoittaa omaa rinnakkaisuuttaan sen sijaan, että se löytäisi sen osuvan siihen.

Source: github.com/biodream-llc/perfuse/internal/fdlimit

26.45 fhirpath

Paketti fhirpath arvioi FHIRPath (HL7 FHIRPath N1, 2.0.0) FHIR-resursseja, jotka pidetään dekoodattuina JSON-tiedostoina.

Sillä ei ole FHIR-mallia: elementin tyyppi on tiedossa, kun FHIR JSON sanoo sen (valintaelementin etuliite, kuten valueQuantity, resurssin resourceType) tai se voidaan johtaa JSON-arvosta muutoin. Se kattaa sen, mitä SQL FHIR-näkymissä ja CQL-vapaa laatuvaatimukset tarvitsevat; navigaatio, joka riippuu mallista (primitiivisen oman tyypin, kun se ei ole valinta), vastataan arvon muodosta.

Source: github.com/biodream-llc/perfuse/internal/fhirpath

26.46 fhirserver

Paketti fhirserver toteuttaa FHIR REST-palvelimen.

Tämä on olemassa, koska v2-FHIR-kartan hyödyllinen pää on jossakin, minne tulokset voidaan tallentaa. Pystyä muuntaa viesti on demo; pystyä muuntaa se, tallentaa se ja sitten löytää potilas uudelleen tunnisteella on tuote.

Se on oikea FHIR-palvelin niissä osissa, jotka ovat tärkeitä tuotteelle: kykyilmoitus, luo, lue, päivitä, poista, etsi niillä parametreilla, joita ihmiset todella käyttävät, ja transaktiopakkaukset sovelletaan atomisesti. Se ei ole täydellinen FHIR-palvelin - ei historiaa, ei ketjutettua hakua, ei _include - ja se sanoo niin omassa kykyilmoituksessaan sen sijaan, että se antaisi asiakkaan löytää aukot.

Source: github.com/biodream-llc/perfuse/internal/fhirserver

26.47 formulary

Paketti formulary on maksajien lääkeformulaario: mitkä lääkkeet jokainen suunnitelma kattaa, millä tasolla ja millä rajoituksilla (esim. etukäteislupaa, askelhoitoa, määrärajoituksia) ja mitä jäsen maksaa.

Yksi tiedosto on ainoa lähde kaikkeen, mikä vastaa kysymykseen lääkkeestä: Da Vinci US Drug Formulary API (julkaistu siitä FHIR:nä), NCPDP Real-Time Prescription Benefit -vastaukset ja NCPDP SCRIPT -sähköinen etukäteisvaltuutus (tarvitaanko lääkettä ja mitä kysymyksiä kysytään). Formulaario, joka elää kolmessa paikassa, vastaisi samaan kysymykseen kolmea eri tapaa.

Source: github.com/biodream-llc/perfuse/internal/formulary

26.48 kehykset

Pakkauskehyksen lukeminen ja kirjoittaminen tapahtuu bittivirrassa, joka ei ole MLLP.

Miksi tämä on olemassa erillään mllp:stä

MLLP on yksi kehys: 0x0B ennen ja 0x1C 0x0D jälkeen. Se on sitä, mitä HL7 v2 käyttää TCP:hen ja Perfuse on aina puhunut sitä.

Suuri osa laitteista ei tee niin. Laboratorion analyysi, paino, sairaalahuoneen valvontajärjestelmä, vanhempi laskutusjärjestelmä - kullakin on oma konventionsa, ja konventiot ovat kaikki yksinkertaisia variaatioita samasta kolmesta ideasta: erottimena jossakin, kiinteä pituus tai pituus kirjoitettuna payloadin eteen.

Mirthin TCP-liittymä kattaa tämän ja Perfusella ei ollut mitään, joten sivustolla, jolla on soketti, joka ei ollut HL7, ei voinut käyttää sitä ollenkaan.

Virhe, jonka tämä pakkaus on kirjoitettu välttämään

Lukeminen virrasta ja arvaaminen, missä viesti päättyy, on koko ongelma. Arvaaminen lyhyeksi ja viesti katkeaa kahtia; arvaaminen pitkäksi ja kaksi viestiä saapuu yhtenä. Molemmat tuottavat tuloksen, joka usein näyttää uskottavalta, mikä on pahempaa kuin virhe, joten jokainen tila tässä on eksplisiittinen siitä, mitä päättää viestin ja mikään niistä ei palaa toiseen.

Viesti, jolla ei ole kehystä ollenkaan, on legitimi konfiguraatio - jotkut laitteet avaavat yhteyden, lähettävät yhden viestin ja sulkevat - mutta sitä ei voida yhdistää mihinkään muuhun ja sitä ei voida käyttää yhteydessä, joka pysyy auki, joten se on nimetty ja validi olematta oletusarvo.

Source: github.com/biodream-llc/perfuse/internal/framing

26.49 ftpconn

Pakkaus ftpconn lataa tiedostoja FTP:n ja FTPS:n kautta käyttäen vain standardikirjastoa.

FTP on vanha, keskustelupalvelu ja ei hyvä protokolla. Se on myös edelleen tapa, jolla suuri osa sairaalajärjestelmistä hyväksyy tiedostoja, yleensä siksi, että etäpää on laboratorion analyysi tai palvelu, jonka ohjelmisto ei ole koskaan muuttunut. Sen estäminen ei tee näistä järjestelmistä moderneja; se tekee Perfusen käyttökelvottomaksi niissä.

Toteutettu tässä pakkauskehyksessä sen sijaan, että se otettaisiin riippuvuudeksi samasta syystä kuin S3: kahdeksan riippuvuuden materiaaliluettelo on todellinen väittely aihe, joka esitetään sille, joka tarkistaa ohjelmistoa ennen kuin se asennetaan sairaalaan. FTP:n valvontakanava on riviorientoitunut teksti TCP:hen, joten tämä on muutama sata riviä netistä ja crypto/tls:stä.

Mitä tuetaan ja mitä ei tueta

Vain passiivinen tila. Aktiivinen tila edellyttää palvelimen avaavan yhteyden takaisin asiakkaalle, mikä estää jokaisen sairaalan palomuurin, joka on rakennettu tänä vuosisatana, ja tarjoamalla se tarkoittaisi, että ihmiset määrittävät ja sitten debuggaavat palomuurin.

Eksplisiittinen FTPS (AUTH TLS) on tuettu ja se on oletus, kun TLS:ää pyydetään. Implisiittinen FTPS portissa 990 on myös tuettu, koska jotkut analyysit puhuvat vain sitä.

Selkeä FTP on tuettu ja varoittaa. Se lähettää salasanan selkeäksi tekstinä, ja sivuston, joka joutuu käyttämään sitä, tulisi kertoa kerran sen sijaan, että se jätettäisiin löytämään se pakettikaappauksesta.

Source: github.com/biodream-llc/perfuse/internal/ftpconn

26.50 gcp

Pakkaus gcp kommunikoi Google Cloud Pub/Sub:n ja Cloud Storage:n kanssa niiden REST-rajapintojen kautta, Google OAuth 2.0:n kanssa: palvelutilin avain allekirjoittaa JWT:n (RS256, crypto/rsa), joka vaihdetaan pääsytokeniin, tai Google Cloud itsessään, metadata-palvelin antaa yhden.

Ei Google SDK:ta.

Emulaattorit (Pub/Sub-emulaattori, fake-gcs-server) eivät ota kredensiaaleja: aseta Endpoint ja jätä kredensiaalit tyhjäksi.

Source: github.com/biodream-llc/perfuse/internal/gcp

26.51 generate

Pakkaus generate luo synteettisiä HL7 v2 -viestejä.

Kaksi käyttötarkoitusta. Joku, joka yrittää Perfusea, tarvitsee liikennettä katseltavaksi, ja kanavan testi tarvitsee fiktiivisen, joka on realistinen riittävästi harjoitellaan koettavaa asiaa. Generaattori on maksullinen laajennus Mirthissä, mikä kertoo, että ihmiset haluavat yhden.

Kaikki tässä on keksitty. Nimet tulevat kiinteästä listasta ilmiselvästi kuvitteellisista, tunnistimet ovat peräkkäisiä suorituksessa, ja osoitteet ovat keksittyjä. Se ei ole varoitus, se on suunnittelu: generaattori, joka tuottaisi uskottavan näköisiä oikeita nimiä, lopulta laittaisi yhden testifiktioon, virheraporttiin ja sitten repositorioon.

Realismi kohdistetaan sinne, missä se on tärkeää testauksessa, ja muualle ei. Aikaleimat sisältävät offseteja, toistuvat kentät toistuvat todella, nimi sisältää joskus keskietunimen ja joskus ei, ja noin yksi viestistä kaksitoista on tarkoituksella epämukava: puuttuva valinnainen kenttä, epätavallinen mutta laillinen erottin, tyhjä komponentti. Kanavan ruokkiminen pelkästään täydellisesti muotoiltujen viestien kanssa kertoo hyvin vähän.

Source: github.com/biodream-llc/perfuse/internal/generate

26.52 hl7dict

Paketti hl7dict nimeää HL7 v2 -segmenttien kentät.

Tämä on olemassa yhden näytön vuoksi: viestinäkijä, joka voi kertoa, että PID-5.1 on potilaan sukunimi sen sijaan, että joutuisi laskeamaan huomautukset. Kukaan, joka on debugannut rajapintaa, on tehnyt sen laskemisen käsin, ja se on yksi yleisin virhelähde, joka asettaa arvon väärään kenttään.

Se ei ole koko standardi. HL7 v2 sisältää satoja segmenttejä ja tuhansia kenttiä, ja ne, jotka ovat täällä, ovat niitä, jotka ovat ADT-, ORU-, ORM- ja SIU-liikenteessä. Tuntematon kenttä ilmoitetaan tuntemattomaksi sen sijaan, että arvattaisiin.

Source: github.com/biodream-llc/perfuse/internal/hl7dict

26.53 hl7v3

Paketti hl7v3 lukee HL7 version 3 -viestejä.

Versio 3 on eri asia kuin versio 2, joka käyttää samaa nimeä. Versio 2 on pilkuilla eroteltu segmenttien virta, jonka merkitys on positionaalinen; versio 3 on XML, joka on luotu viiteinformaatiomallista, jossa merkitys on koodattu elementtien nimissä ja pienessä joukossa datatyyppejä, jotka toistuvat kaikkialla. Melkein mitään ei siirretä näiden kahden välillä sen enempää kuin kliininen sanasto.

Käytännössä v3 saapuu yhdessä kahdesta muodosta. Joko se on CDA-dokumentti, joka on v3:sta johdettu ja käsitellään cda-paketissa, tai se on IHE-kauppa - erityisesti PIX- ja PDQ v3, joka on tapa, jolla suuret sairaalat ratkaisevat potilastunnisteet järjestelmien välillä. Tämä paketti kohdistuu jälkimmäiseen.

Miksi datatyypit tulevat ensin

Yksi asia, joka on v3:sta seurannut, on se, että elementti voi olla läsnä ja nimenomaisesti null, määritellyllä syyllä. Syntymäpäivämäärä, joka kantaa nullFlavor="ASKU", tarkoittaa, että potilas kysyi ja kieltäytyi vastaamasta. Yksi, joka kantaa nullFlavor="NAV", tarkoittaa, että arvo on olemassa, mutta ei ole saatavilla tällä hetkellä, joten kysyminen myöhemmin voi toimia. Yksi, joka on yksinkertaisesti poissa, tarkoittaa, että kukaan ei merkinnyt mitään lainkaan.

Näiden tiivistäminen tyhjäksi merkkijonoksi on virhe, jonka tämä paketti on järjestetty estämään. Se ei ole kosmeettinen menetys: alijärjestelmä, joka vastaanottaa tyhjän syntymäpäivämäärän, kun lähde sanoi "potilas kieltäytyi", kohdellaan yleensä puuttuvana datana, jota jaetaan, ja demografinen vastaavuus, joka olisi pitänyt jättää ratkaisematta, ratkaistaan ihmisen arvioiden mukaan. Joten jokainen datatyyppi tässä erottaa poissaolevan, nullin syyn ja läsnäolevan.

Source: github.com/biodream-llc/perfuse/internal/hl7v3

26.54 hl7xml

Paketti hl7xml muuttaa HL7 v2 -viestejä XML-muotoon, jonka Mirth Connect käyttää, ja takaisin ER7-koodaukseen.

Muoto ei ole suunnitteluvaihtoehto. Mirthin skriptit on kirjoitettu sen oman ER7-XML-serialisoijan tulosteiden mukaan, joten ne sisältävät lauseita kuten

msg['PID']['PID.5']['PID.5.1'].toString()

ja lupaus, että olemassa oleva skripti toimii muuttumattomana, säilyy vain, jos puu, jonka se kävelee, on täsmälleen samanlainen elementtien nimissä, sisennetyssä ja toistumiskäyttäytymisessä. Jokainen päätös alla on siis "mitä Mirth tekee", ei "mitä olisi siistimpää".

Kaksi tärkeintä:

Jokainen kenttä on kääritty numeroituihin komponenttialueisiin, vaikka kentällä on vain yksi komponentti, joten PID-5 arvolla "Doe" tuottaa <PID.5><PID.5.1>Doe</PID.5.1></PID.5>. Skriptit viittaavat suoraan .1:een jatkuvasti ja puu, joka asettaa tekstin kenttäelementille, rikkoisi lähes kaikki.

MSH säilyttää standardit HL7-kentännumerot, joissa MSH-1 on kenttäerotin ja MSH-9 on viestityyppi. Parseri internal/hl7 indeksoi MSH:ta offsetilla, koska erotin vie paikan, jota ei mikään erottin jaksa, ja se offset pysähtyy tässä: skripti, joka sanoo MSH.9, tarkoittaa viestityyppiä.

Source: github.com/biodream-llc/perfuse/internal/hl7xml

26.55 ibmmq

Paketti ibmmq lähettää ja lukee IBM MQ -jonoihin jonon hallinnan messaging-REST-rajapinnan (mqweb) kautta, jonka IBM MQ 9.1.5 ja myöhemmät versiot toimittavat jokaiselle alustalle, mukaan lukien z/OS.

Sille ei tarvita MQ-asiakas kirjastoa: alkuperäinen MQI-protokolla on IBM:n ja on asiakirjoitamaton, ja REST-rajapinta on tuettu tapa päästä MQ:hen ilman sitä. (IBM MQ puhuu myös AMQP 1.0:aa AMQP-kanavalla; Perfusen amqp-liittymä kattaa tämän reitin.)

Lukeminen on vähintään kerran: ensimmäinen viesti selataan, annetaan kutsujalle ja poistetaan sen viestin ID:n perusteella vasta kun kutsuja on käsitellyt sen. Viesti, jota ei voitu käsitellä, pysyy jonossa, ensimmäisenä jonossa.

Source: github.com/biodream-llc/perfuse/internal/ibmmq

26.56 identiteetti

Löytäminen viestistä sen perusteella, mitä tiedät siitä, riippumatta siitä, missä muodossa se saapui.

Olemassa oleva sisällön hakutoiminto vastaa metatietoja, tarjoaa merkkijonon osittaisen vastineen payloadiin ja voi arvioida suodatinilmauksen - mutta ilmaus arvioidaan vain HL7 v2:ta vasten, ja jokainen ilmaus vaatii polun tuntemisen. Niinpä yhden potilaan liikenteen löytäminen tarkoitti tietämistä, että identiteetti sijaitsee PID-3:ssa HL7 v2:n vastaanotossa, Patient.identifierissa FHIR-resurssissa, (0010,0020):ssa DICOM-eksemplaarissa ja NM109:ssa NM1*IL-silmukassa 837-vaatimuksessa. Neljä muotoa, neljä sanastoa, ja tapahtuman aikana etsitty viesti saattaa olla missä tahansa niistä.

Tämä paketti kartoittaa pienen joukon käsitteitä - kuka viesti on, mikä vierailu, mikä tutkimus, mikä vaatimus - siihen paikkaan, jossa kunkin muodon säilytetään, jotta hakua voidaan tehdä "MRN 12345" sen sijaan, että polku olisi tiedettävä. Käsitteet on tietoisesti rajattu: nämä ovat asiat, joita ihmiset todella tarvitsevat käsissään, kun he tarvitsevat löytää viestin, joka on numero puhelimesta tai nimi valituksesta.

Miksi poisto tapahtuu kerran, tallennettaessa

Vaihtoehto on kuormien käsittely kyselyajassa, mitä lausekehaun tekee. Se toimii ja se on rehellinen rajoitettu skannaus, mutta se ei voi vastata "jokainen viesti tästä potilaasta neljän syötteen ja kahden kuukauden ajan" ilman, että jokainen rivi luetaan. Kerran poistaminen indeksoituun taulukkoon muuttaa sen indeksihakuksi.

Tämä on yksityisyyden eskalaatio, ja se on valinnainen

Potilaiden nimet ja tunnistimet sijaitsevat tällä hetkellä läpinäkymättömässä payload-sarakkeessa. Niiden indeksointi tekee niistä kysyttyjä, mikä on tarkoitus, ja tekee niistä myös luettavissa, mikä on todellinen muutos altistumisessa: tietokanta, joka voitiin vain grepata, voidaan nyt kysyä "luettele kaikki potilaat". Se on päätös sivustolle, ei tälle paketille, joten poisto on kytkettävissä ja jokainen hakutoimenpide sen kautta on tallennettu PHI-tarkastuslokissa.

Source: github.com/biodream-llc/perfuse/internal/identity

26.57 iis

Paketti iis puhuu jokaista Yhdysvaltain immunisaatiorekisterin jakamaa kuljetusta: CDC:n IIS SOAP-verkkopalvelua.

Vuonna 2011 asiantuntijaryhmä, jonka CDC ja American Immunization Registry Association kutsui koolle, valitsi yhden SOAP-liittymän HL7 v2-viestien lähettämiseen Immunisaatiotietojärjestelmiin, ja rekisterit omaksuivat sen. WSDL on pieni - kaksi toimintoa, connectivityTest ja submitSingleMessage - ja HL7-viesti (VXU ilmoittamaan pistoksesta, QBP^Q11 kysymään potilaan historiasta) matkustaa pakotettuna tekstinä SOAP-rungon sisällä. Vastaus tulee samalla tavalla: ACK tai RSP^K11, joka sisältää historian ja ennusteen.

Yleinen SOAP-kohde voitiin konfiguroida tekemään tämä, mutta jokaisen sivuston olisi pitänyt kirjoittaa sama kirjekuori, saada nimiavaruus oikein, laittaa tunnistetiedot rungon sisään HTTP-autentikoinnin sijaan ja lukea HL7-vahvistus vastauksesta, jotta voitiin oppia, pitikö rekisteri kirjaa. Rekisteri vastaa hylättyä pistosta HTTP 200 ja AR; 200:n käsittely onnistuneena on se, miten immunisaatiot vaikenevat ilmoittamasta. Joten tämä paketti tekee CDC-kirjekuoren ja arvioi vahvistuksen kerran.

Mitä se ei tee: WSDL:n käyttäjänimi ja salasana ovat rekisterin sovellustunnisteet ja ne lähetetään WSDL:n mukaisesti rungon sisällä. Vastavuoroinen TLS, jossa rekisteri vaatii sitä, on kohteen TLS-asetus kuten minkä tahansa HTTPS-tyyppisen puhelun. Mitään tässä ei ole yksittäisen osavaltion mukaista; missä osavaltiot eroavat (laitoksen tunniste vaaditaan tai ei, SOAP 1.1 hyväksytään tai ei, varoitukset lähetetään AE), kohteen asetukset sanovat sen.

Source: github.com/biodream-llc/perfuse/internal/iis

26.58 kafka

Kafka, asiakkaana eikä korvaavana.

Terveysjärjestelmä, jolla on tapahtumaruoste, on Kafkan ruoste, ja järjestelmät, jotka on rakennettu viimeisen vuosikymmenen aikana, julkaisevat siihen sen sijaan, että ne julkaisisivat JMS-välittäjään. Niinpä tämä liitäntä on olemassa, jotta Perfuse olisi terveydenhuollon tietoinen reuna jonkun toisen tapahtumalaitteen reunassa: se lukee kliinisiä viestejä aiheista ja julkaisee niitä aiheisiin, ja se ei yritä olla virtausalusta. Ikkunointi, liitokset, virtauskäsittely ja skeemarekisterit ovat Kafkan ekosysteemiä ja ne pysyvät siellä.

Miksi riippuvuus, kun STOMP ja MLLP kirjoitettiin käsin

Tämän varaston määritelty sääntö on, että riippuvuuden on oltava kyky ostaa, eikä vain mukavuus, ja se on oltava puhdas Go, jotta yksi staattinen binääri edelleen kääntyy kaikkiin kohteisiin. franz-go on puhdas Go ja se ei sisällä cgo:ta, mikä tarkistettiin kaikkia kuutta kohdetta vastaan.

Kafkan protokolla ei ole STOMP. STOMP on tekstiprotokolla, joka sopii muutamaan sataan riviin. Kafka on versionoitu binäärinen protokolla noin seitsemänkymmenen pyynnön tyypin yli, ja se osa, joka on tärkein tässä - kuluttajaryhmät - on jakautunut koordinaatioprotokolla liittymis-, sync-, sydämenlyönti- ja offset-vakausvaiheilla ja tasapainoillessa heidän välillään. Sen saaminen hiukan vääräksi ei tuota ilmeistä epäonnistumista: se tuottaa jaon, jota kukaan ei lue, tai kaksi kuluttajaa lukee samaa jaetta. Kliinisessä syötössä ne ovat puuttuva laboratoriotulos ja monistettu tilaus. Se on kyky, ja se ei ole arvoinen käsin kirjoittamiseen riippuvuuden säästämiseksi.

Source: github.com/biodream-llc/perfuse/internal/kafka

26.59 ldap

Paketti ldap puhuu tarpeeksi LDAP:ia todistamaan henkilön ja lukea hänen ryhmänsä.

Sairaalat käyttävät lähes yleisesti Active Directorya, ja AD puhuu LDAP:ia. OpenID Connect on parempi vastaus, kun se on saatavilla - katso internal/oidc, ja huomautus siellä Mirthin puutteesta yhtenäisessä kirjautumisessa - mutta integraatiomoottori usein sijaitsee eristetyllä VLAN:illa, jossa selain ei voi tavoittaa identiteetin tarjoajaa lainkaan. Tämä on tätä varten.

Käsin tehty BER riippuvuuden sijaan, samasta syystä kuin DICOM ja STOMP: koodaus on pieni, ja se, mitä saapuu tähän sokettiin, päättää, pääseekö joku järjestelmään, joka siirtää potilastietoja.

encoding/asn1 -kirjastossa oleva standardikirjasto ei ole käytettävissä tässä. Se kohdistaa DER:iä ja hylkää kontekstisidonnaiset tunnisteet ja implisiittisen merkitsemisen, joita LDAP käyttää ympäriinsä, joten osat, jotka ovat tärkeitä, vaatisivat käsin tekemistä joka tapauksessa.

Source: github.com/biodream-llc/perfuse/internal/ldap

26.60 postilaatikko

Paketti postilaatikko lukee sähköpostia IMAP4rev1-palvelimilta (RFC 3501) ja POP3-palvelimilta (RFC 1939), kirjautuen sisään salasanalla tai OAuth 2.0:lla (SASL XOAUTH2, kuten Microsoft 365 ja Gmail vaativat), ja purkaa viestit (RFC 5322 ja MIME), jotta liite tai tekstirunko voidaan muuttaa kanavan viestiksi.

Vain se, mitä saapuvalla syötteellä tarvitaan: valitse postilaatikko, etsi lukemattomat viestit, hae ne kokonaisuudessaan, siirrä, merkitse tai poista ne. Vain standardikirjasto; TLS on crypto/tls.

Source: github.com/biodream-llc/perfuse/internal/mailbox

26.61 kartoittaja

Paketti kartoittaja ehdottaa kenttäkartoituksia järjestelmien välillä luottamusluokituksin.

Tämä on sääntöpohjainen älykäs kartoitusmoottori. Ei LLM:ää, ei verkkokutsuja, ei ulkoisia riippuvuuksia. Se toimii offline-samassa binääritiedostossa ja ei lähetä potilastietoja mihinkään.

Moottori yhdistää useita signaaleja - epäselvän merkkijonon vastaavuuden kenttänimissä, terveydenhuollon tunnistetunnusten tunnistamisen, koodijärjestelmien tarkastukset ja historiallinen hyväksymistiedot - yhdeksi luottamusluokituksiksi ehdotuksia kohden. Kun luottamus on alle konfiguroitavassa kynnyksessä, kartoittaja pidättäytyy arvaamasta väärin, koska väärä kartoitus terveydenhuollossa voi ohjata tiedot väärään kenttään, ja se on potilasturvallisuuden puute.

Pidättäytyminen on ydin suunnittelupäätös. Järjestelmä, joka aina tuottaa vastauksen, kouluttaa käyttäjiä lopettamaan tarkastamisen, ja se kerta, kun se on väärä, kukaan ei huomaa sitä, ennen kuin laboratoriotulos päätyy muistiinpanokenttään. Järjestelmä, joka sanoo "en tiedä", pakottaa ihmisen tekemään päätöksen juuri silloin, kun ihminen on tarpeen.

Source: github.com/biodream-llc/perfuse/internal/mapper

26.62 mitta

Paketti mitta arvioi FHIR-mittoja (digitaaliset laatusuureet), joiden väestöperusteet ovat FHIRPath, ja kirjoittaa tuloksen FHIR MeasureReportina: yhteenveto, yksilö- tai aihekohtainen luettelo, stratifioijilla ja suhdelukemalla.

Jokainen kriteeri arvioidaan kerran potilaakohtaisesti, keskittyen potilaan asiakirjasarjaan (heidän osastoonsa) ja näihin muuttujiin: %aihe (Potilas), %jaksoAlku ja %jaksoLoppu (mittausjakso, aikaleimat) ja %"Mittausjakso" (sama kuin jakso). Kriteerit CQL: ssä hylätään syynä: Perfusella ei ole CQL-moottoria.

Source: github.com/biodream-llc/perfuse/internal/measure

26.63 mittarit

Paketti mittarit kerää, mitä moottori tekee, ja pitää tarpeeksi historiaa piirtää se.

Rajapintamoottori valvotaan, ei vain ajeta. Kun osasto sanoo, että tulokset loppuivat saapumasta kahdenkymmenen minuutin kuluttua, kysymys on, mitä muuttui kahdenkymmenen minuutin kuluttua, ja sitä ei voida vastata nykyisillä laskureilla yksin. Siksi tämä pitää sarjoja eikä yhteensopimuksia, muistissa, kiinteällä resoluutiolla.

Kolme päätöstä muotoilee sitä.

Viive pidetään histogrammina eikä keskiarvona. Keskimääräinen toimitusaika on lähes käyttökelvoton tässä alueessa: se luku, joka on tärkeää, on, ovatko hitaimmat prosentit viesteistä hitaita tarpeeksi rikkoakseen käsittelyaikaa, ja keskiarvo piilottaa juuri sen. Lukot ovat eksponentiaalisia ja kiinteitä kokoamisajassa, joten kestoaikaa merkitsemään on vertailu ja kasvatus ilman varauksia.

Sarjat ovat rajattuja rengaspuferia, kooltaan kerääjän tekemisen aikana. Tässä ei kasva mitään rajattomasti, koska rajapintamoottori toimii kuukausien ajan, ja mittausjärjestelmä, joka vaatii uudelleenkäynnistystä, on huonompi kuin ei mitään.

Joukkoa on rajattu. Tunniste, joka on otettu viestin tiedoista - lähettävä sovellus, esimerkiksi - voi ottaa tuhansia arvoja, jos joku virheellisesti määrittää syötteen, ja rajoittamattomat tunnisteet ovat standarditapa, jolla valvonta ottaa alas se, mitä se valvoo. Rajan ylittävät arvot tiivistyvät "muu"-luokkaan, ja raja itsessään ilmoitetaan.

Source: github.com/biodream-llc/perfuse/internal/metrics

26.64 mirth

Java-analyysi tuoduille Mirth-kanaville.

Miksi tämä on olemassa

Mirth ajaa Rhinon JVM:llä, joten Mirth-skripti voi kutsua mitä tahansa Javaa luokkapolulla, myös Mirthin omia palvelinluokkia. Perfuse ajaa goja:ta ja ei ole Java-ajomoottoria. Se hylkää nämä kutsut virheellä, joka nimeää luokan - mutta tämä hylkäys tapahtuu, kun skripti ajetaan, mikä tarkoittaa lähde-liittymälle, kun ensimmäinen oikea viesti saapuu.

Joten migraatio meni aiemmin: tuonti onnistuu hiljaisesti, kanava otetaan käyttöön, ja ensimmäinen viesti langasta epäonnistuu. Migraatio, joka näyttää puhdaslta ja menee rikki ensimmäisellä liikenteellä, on huonompi kuin sellainen, joka hylkää ovella, koska henkilö, joka teki sen, on jo kertonut kollegoilleen, että se toimi.

Tämä löytää ne kutsut tuontiajassa ja kertoo, mitä kullekin tehdään.

Miksi neljä tuomiota eikä kaksi

"Käyttää Javaa" on yksi tieto ja väärä, koska Mirth-kanavan käyttämä Java jakautuu ryhmiin, joissa on täysin eri määrä työtä. Karkeasti puolet siitä, mitä sivustot todella kirjoittavat, on SimpleDateFormat ja HashMap, joita JavaScript tukee luonnostaan. Osa siitä on Mirthin dokumentoitu skripti-API, jonka Perfuse jo toteuttaa samoilla nimillä. Pieni osa haluaa käynnistää ja lopettaa kanavia, mitä Perfuse voi tehdä REST-rajapinnan kautta, mutta ei paljasta skripteille. Ja osa on valmistajan jar-tiedosto, jota ei koskaan suoriteta täällä.

Raportoimalla ne yhtenä luvuna ei kerro mitään siitä, onko kyse iltapäivästä vai neljänneksestä.

Source: github.com/biodream-llc/perfuse/internal/mirth

26.65 mirthlive

Paketti mirthlive löytää suorittavat Mirth-perheen moottorit, joihin yhteentoimivuustestit viittaavat.

Mirth Connect lakkasi olemasta avoimen lähdekoodin ohjelma versiossa 4.6 (maaliskuu 2025). Sivustot, jotka jättävät sen, siirtyvät joko Mirth 4.5.2:een, viimeiseen avoimeen julkaisuun, jota he jatkavat käyttämään; Open Integration Engineen, joka on Eclipse-isäntä; tai BridgeLinkiin, Innovarin forkkiin, joka laskee julkaisunsa vuosittain (26.9.0). Kanava, jonka Perfuse vie, on ladattava kaikkiin näihin, ja kanava, jonka mikä tahansa näistä vie, on tuotava tänne, joten jokainen live-testi suoritetaan kerran kunkin moottorin kohdalla, joka vastaa.

Moottorit löydetään kysymällä, eikä ne ole konfiguroitu: ./scripts/interop-up.sh käynnistää ne kiinteille porteille, ja moottori, joka ei ole käynnissä, ilmoitetaan ohitettavaksi sen sijaan, että se menee hiljaisesti läpi. PERFUSE_MIRTH_ENGINES ohittaa listan nimien ja url-osoitteen pareina, jotka on erotettu pilkuilla.

Vain testit tuottavat tämän. Se elää ulkopuolella _test.go-tiedostoa, koska kaksi pakettia jakaa sen.

Source: github.com/biodream-llc/perfuse/internal/mirth/mirthlive

26.66 mpi

Paketti mpi on potilasrekisteri: se ottaa potilastiedot jokaisesta lähdejärjestelmästä (kunkin tunnisteella ja numerolla), päättää, mitkä kuuluvat samaan henkilöön, ja antaa kullekin henkilölle yritysidentiteetin (EUID).

Tiettyjen vastaavuuksien linkit muodostetaan itse; epävarmat odottavat tarkastusjonossa, kunnes henkilö päättää; jokainen linkki, unlink, yhdistäminen ja päätös on tallennettu, kuka sen teki.

Vastaavuus on deterministinen ensin (tunniste järjestelmästä, jota sivusto luottaa olevan yksilöllinen kullekin henkilölle, kuten kansallinen tunniste tai yritysnumero) ja todennäköisyys muutoin: Fellegi-Sunter-painot nimelle, syntymäpäivämäärälle, sukupuolelle, postinumeroille, puhelinnumerolle ja osoitteelle, Jaro-Winkler-nimellä. Se ei päättäne mitään kliinistä: se kertoo, mitkä tiedot ovat sama henkilö, sen syistä, henkilölle vahvistettavaksi, kun se ei ole varma.

Source: github.com/biodream-llc/perfuse/internal/mpi

26.67 mqtt

Paketti mqtt on MQTT 3.1.1 -asiakas: yhdistä (TLS: n, käyttäjänimen ja salasanan tai asiakasvarmenteen kanssa), julkaise QoS 0 tai 1, tilaa ja tunnusta kullekin vastaanotetulle QoS 1 -viestille vain kerran, kun soittaja sanoo, että se on käsitelty.

Kirjoitettu OASIS MQTT 3.1.1 -standardin mukaan sen sijaan, että se olisi tuotu, kuten Perfusen muut langattomat protokollat. 3.1.1 on versio, jota jokainen välittäjä puhuu: Mosquitto, EMQX, HiveMQ, VerneMQ, RabbitMQ: n MQTT-liitännäinen, IBM MQ: n telemetria-kanava, AWS IoT Core ja Azure Event Grid.

Toimitus: viesti, joka vastaanotetaan QoS 1: ssä, vahvistetaan (PUBACK) vain, kun Ack-kutsu tehdään. Soittaja, joka ei voi käsitellä viestiä, sulkee yhteyden sen sijaan; pysyvän istunnon (CleanSession false) kanssa välittäjä lähettää sen uudelleen, merkittyä kopiona, kun asiakas yhdistää uudelleen. MQTT 3.1.1: ssä ei ole negatiivista vahvistusta, joten tämä on ainoa tapa pyytää viestiä uudelleen.

Source: github.com/biodream-llc/perfuse/internal/mqtt

26.68 msgstore

Löytyminen tallennetusta viestistä sen perusteella, mitä joku tietää siitä.

Haku, jota henkilö todella tarvitsee, on "tässä on numero puhelusta, näytä minulle jokainen viesti siitä". Ennen tätä se tarkoitti joko merkkijonon vastaavuutta payloadeissa, joka on grep ja hidasta, tai suodatinilmaisua, joka vaatii tietämään, että identiteetti elää PID-3:ssa HL7 v2:ssa ja jossain muualla kokonaan samalla palvelimella.

Identiteetti poistetaan kerran, kun viesti on tallennettu ja indeksoitu, joten tämä on hakemisto eikä skannaus. Kustannus maksetaan tallennuspolulla, kerran viestin kohdalla, sen sijaan, että se maksetaan jokaisella haulla.

Source: github.com/biodream-llc/perfuse/internal/msgstore

26.69 natid

Paketti natid tietää Yhdistyneen kuningaskunnan ja Euroopan kansalliset potilas- ja henkilöllisyystunnukset: niiden muodot, niiden tarkistusnumerot, tunnistejärjestelmän, jonka kunkin maan FHIR-opas nimeää niille, ja niiden näyttämisen.

Se on olemassa potilasrekisterin vuoksi. Kansallinen numero on vahvin todiste siitä, että kaksi rekisteriä on sama henkilö, ja se on myös helpoin väärinkäsittää: numeron kirjaaminen kahdesti antaa numeron, joka kuuluu jollekin toiselle, ja yksi lähde lähettää NHS-numeron OID:n alla, kun taas toinen lähettää sen FHIR-URL-osoitteessa. Joten jokainen tunniste, jonka indeksi tallentaa, menee tänne: sen tarkistusnumero testataan (väärä ei koskaan käytetä linkittämiseen), sen välit poistetaan ja sen järjestelmä kirjoitetaan yhdenmukaisesti.

Mikä on vahvistettu ja mikä ei ole, sanotaan kunkin suunnitelman mukaan. Algoritmit ovat julkisia; tunnistejärjestelmän URI:t ovat maan omat, kun kansallinen FHIR-opas nimeää niille (SystemVerified), ja dokumentoitu oletusarvo muutoin, jonka sivusto muuttaa kansalliseen arvoonsa Asetukset → Potilasrekisteri. Mitään tässä ei päättäne mitään kliinistä.

Source: github.com/biodream-llc/perfuse/internal/natid

26.70 ncpdp

Kirjoittaminen kenttään NCPDP-lähetyksessä.

Miksi kirjoitus hylkää epäselvän polun

Lukeminen palauttaa jokaisen arvon, jonka polku osoittaa, koska suodatin, joka kysyy, onko DUR-riita terapeuttinen monistus, pitäisi nähdä kaikki. Kirjoittaminen ei voi toimia samalla tavalla. Jos D7 osoittaa kahden korvauksen tuotekoodit yhdessä lähetyksessä, D7:n asettaminen ei ole yksiselitteistä: kirjoittaminen molemmille muuttaa lääkettä, josta kukaan ei kysynyt, ja kirjoittaminen ensimmäiselle jättää toisen hiljaisesti.

Siksi kirjoitus hylkää polun, joka osoittaa useamman kuin yhden kentän, ja virhe nimeää laadukkaan muodon, joka olisi yksiselitteinen. Tämä on sama syy, joka antaa muunnosvaiheille ei-poistotoiminnon: missä rehellinen vastaus on, että konfiguraatio on epäselvä, sanominen siitä voittaa yhden valitsemisen.

Source: github.com/biodream-llc/perfuse/internal/ncpdp

26.71 oidc

Paketti oidc vahvistaa OpenID Connect -tunnistujen identiteetin.

Kirjoitettu standardikirjastoa vastaan eikä JWT-riippuvuutta. Autentikointi on paikka, jossa unaudittu riippuvuus on vähiten hyväksyttävä, ja allekirjoituksen vahvistus algoritmeille, jotka ovat merkityksellisiä, on noin sata riviä crypto/rsa ja crypto/ecdsa, ja Perfuse jo kantaa tarpeeksi, jotta lisääminen tarvitsee syyn eikä tapaa.

Laajuus on tarkoituksella kapea: vahvistaa, että identiteetin tarjoaja vakuutti henkilön identiteetin, ja raportoi, mitä se sanoi heistä. Kaikki muu - mitä he saavat tehdä, kuinka kauan istunto kestää - pysyy Perfusessa, koska identiteetin tarjoaja tietää, kuka joku on, eikä mitä heille on sallittu tehdä rajapinnassa.

Source: github.com/biodream-llc/perfuse/internal/oidc

26.72 parity

Paketti parity vertaa Perfusen tuottamia tietoja siihen, mitä korvattava moottori tuotti.

Miksi tämä on olemassa

Perfuse voi tuoda Mirth-kanavan ja voi jäljittää, mitä se tekisi viestillä. Kumpikaan näistä ei vastaa kysymykseen, jota joku todella haluaa ennen kuin siirtää live-syötteen, eli: tuottaisiko tämä saman tuloksen kuin se, joka on ollut käynnissä kuusi vuotta?

Mikään suunnittelun laatu ei vastaa tähän. Ainoa rehellinen vastaus on näyttö, ja näyttö on saatava vanhan moottorin omasta tuloksesta sivuston omassa liikenteessä.

Miksi parien on annettava

Tämä ei voi tavoittaa Mirthiin, ja väittäminen muuta olisi pahin ominaisuus. Se, mitä se vaatii, on parit: viesti, joka saapui, ja viesti, jonka vanha moottori tuotti siitä. Molemmat ovat Mirthin omassa viestivarastossa ja voidaan viedä sen viestiselaimesta, joka on asia, jonka hallinnoija jo tietää, miten tehdä.

Tämä rajoitus on ilmoitettu eikä piilotettu. Työkalu, joka väittäisi vahvistavansa siirtymän ilman, että se koskaan näkee vanhan moottorin tulostetta, vahvistaisi mitään.

Miksi erot ovat ryhmiteltyjä eikä lueteltuja

Suoritus 50 000 viestistä, joka raportoi 4 000 eroa, on kertonut kenellekään mitään, jota voi tehdä. Sama suoritus, joka raportoi, että PID-8 eroaa jokaisessa viestissä, koska vanha moottori kartoitti M: n Maleen, on kertonut heille tasan yhden asian, josta voi tehdä päätöksen.

Näin ollen löydökset ryhmitellään kentän mukaan, laskurin, esimerkin ja eri arvoparien kanssa. Yksi päätös per löytö on yksikkö, jonka joku voi työskennellä.

Source: github.com/biodream-llc/perfuse/internal/parity

26.73 pas278

Paketti pas278 kartoittaa Da Vincin priorisoidun autorisoinnin ja X12 278 -transaktion välillä.

Miksi tämä on olemassa

CMS-0057-F edellyttää, että maksajat paljastavat FHIR-priorisoidun autorisointi-API:n 1. tammikuuta 2027 mennessä. Se ei korvaa X12 278:aa, eikä se koskaan tule tekemään: maksajan hyödyntämisen hallintajärjestelmä päättää autorisoinneista ja puhuu 278. Joten maksaja, joka noudattaa sääntöä, kääntää FHIR:ää 278:ksi ja takaisin, ja tarjoaja, joka lähettää 278:tänään, lähettää huomenna FHIR:ää samalle maksajalle, joka hyväksyy molemmat.

Tämä käännös on se, mikä on arvokasta omistaa. Moottori, joka pitää molempia malleja eikä voi muuttaa niitä, jättää vaikeimman osan työstä - ja osan, jossa virheet ovat kalliita - sille, joka integroi sitä.

Säännöt, joita tämä paketti noudattaa, ilmoitetaan eikä neuvota

Kirjoitettu ylös samasta syystä v2fhir kirjoittaa oman ylös: kartoitus on siellä, missä yhteentoimivuushankkeet epäonnistuvat, ja epäonnistumiset ovat hiljaisia.

Source: github.com/biodream-llc/perfuse/internal/pas278

26.74 pdf

Paketti pdf luo yksinkertaisia tekstidokumentteja, käyttäen vain standardikirjastoa.

Mirthin Document Writer renderöi HTML: n PDF: ksi, jolle tarvitaan sivunmuotoilumootorin. Tämä ei ole sitä. Tämä tuottaa yksinkertaisen, sivutetun tekstin asiakirjan monivalintaisella fontilla, ja se on olemassa, koska todellinen vaatimus melkein jokaisessa sivustossa, joka käyttää tätä liitäntää, on "sijoita tämä raportti jakoon, jotta joku voi tulostaa sen" - lopettamisarvio, tuloksen raportti, päivittäinen sovittaminen. Nämä ovat tekstejä.

Ominaisuuden kokonaan kieltäminen jättäisi Tier 2 -siirtymisen esteen paikoilleen. HTML-renderöintimoottorin sisällyttäminen maksaisi enemmän kuin koko loput binääriä ja tuottaisi CVE-virran, mikä kumoaisi laskelman, jonka raaka-aineet tekevät. Joten: teksti, rehellisesti kuvattuna tekstiksi, ja sivusto, joka todella tarvitsee typeset-tulostetta, on paremmin palveltu tiedostokohteella ja työkalulla, joka on rakennettu siihen.

Miksi kirjoittaa PDF: tä lainkaan tekstifilen sijaan

Koska vastaanottavan osapuolen on yleensä henkilö, jolla on tulostin ja Windows-jako, ja .txt-tiedosto, josta tulostetaan jaosta, menettää sivutuksen, marginaalit ja usein rivin päättymisen. PDF tulostaa samalla tavalla kaikkialla, mikä on koko syy, miksi kukaan pyysi sitä.

Source: github.com/biodream-llc/perfuse/internal/pdf

26.75 pgp

Paketti pgp salaa, allekirjoittaa, salaamattomat ja vahvistaa OpenPGP-viestit (RFC 9580 ja RFC 4880 vanhemmille peerille) vakuutusyhtiöille, selvitystoimistoille ja valtion virastoille, jotka vaihtavat tiedostoja SFTP: n tai sähköpostin kautta PGP: n alaisuudessa.

Salaus on github.com/ProtonMail/go-crypto, golang.org/x/crypto/openpgp: n ylläpidetty haara; mitään tässä ei toteuta primitiiviä. Tämä paketti lataa vain avaimet ja päättää, mitä viesti on saatava kantamaan.

Source: github.com/biodream-llc/perfuse/internal/pgp

26.76 pixv3

Paketti pixv3 on HL7 version 3 potilasrekisterin ilme: IHE Potilastunnisteiden ristiviittaus- ja potilastiedustokyselyprofiilit, koska useimmat sairaalat FHIR-maailman ulkopuolella puhuvat niitä.

Vastaukset tulevat samasta potilasrekisteristä kuin PIXm, PDQm, Patient/$match ja rekisterinäytöltä, joten v3:ssa syötetty rekisteri löytyy FHIR:stä ja päinvastoin. Viestit on kirjoitettu käsin, schemajärjestyksessä, hl7v3.Ack-syyn vuoksi.

Source: github.com/biodream-llc/perfuse/internal/pixv3

26.77 priorauth

Paketti priorauth toteuttaa tarjoajan puolen ennakkovaltuutus-työnkulun, joka vaaditaan CMS-0057: n mukaisesti. Se lähettää ennakkovaltuutuspyynnöt vakuutusyhtiön FHIR-rajapinnoille, seuraa vastauksia ja muuttaa sisäisiä tyyppiä ja FHIR-resursseja.

Source: github.com/biodream-llc/perfuse/internal/priorauth

26.78 yksityisyys

Paketti yksityisyys vastaa tietosuojan kohteen pyynnölle GDPR: n ja UK GDPR: n mukaisesti: etsi kaikki, mitä tämä palvelin pitää henkilöstä, anna se heille (artiklat 15 ja 20), poista se (artikla 17) ja pidä, mitä oikeudellinen pidäke kattaa.

Se ulottuu jokaiseen paikkaan, jossa Perfuse säilyttää potilastietoja: viestivarasto (sen tunnistetun hakemiston kautta), toimitusjono, FHIR-kauppa (henkilön Potilas-resursseja ja kaikkea, mikä viittaa niihin, niiden historian kanssa), tallennetut ennakkovaltuutuspyynnöt ja potilasindeksi, jonka linkit laajentavat yhden tunnisteen kaikkiin henkilön numeroihin. Mitä se ei voi tavoittaa, se nimeää: jäljitykset, jotka on lähetetty kerääjälle, audit-merkintä (joka pidetään, koska se on kirjaus siitä, kuka teki mitä), ja varmuuskopiot, jotka säilyttävät, mitä poistettiin, kunnes ne vanhenevat - joten jokainen poistaminen kirjoitetaan kirjaan, suolattujen tunnisteiden tiivisteinä eikä tunnisteina, ja voidaan soveltaa uudelleen palautettuun kopioon.

Se ei tee mitään päätöksiä kenenkään puolesta. Onko pyyntö annettava, ja onko poikkeus sovellettavissa, on kontrollerin päätös; poistaminen vaatii toisen ylläpitäjän hyväksynnän, ja oikeudellinen pidäke kieltää sen suoriltaan.

Source: github.com/biodream-llc/perfuse/internal/privacy

26.79 julkisen terveydenhuollon

Paketti julkisen terveydenhuollon toteuttaa kaksisuuntaisen julkisen terveydenhuollon ilmoittamisen: sähköisen tapausilmoittamisen (eCR), sähköisen laboratoriotutkimuksen ilmoittamisen (ELR) ja rokotusten rekisterikyselyt.

Jokaisen sairaalan on laillisesti pakollista ilmoittaa tiettyjä olosuhteita - tuberkuloosi, tuhkarokko, hepatiitti, COVID-19, sukupuolitaudit, elintarvike-aiheuttama tauti - valtion ja paikallisten terveydenhuollon virastoille. Ilmoittaminen tapahtuu kolmen erillisen rajapinnan kautta:

Paketti on kaksisuuntainen: se ilmoittaa ulospäin (ELR, eCR, VXU) ja kysyy takaisin (VXQ/VXR). Kaikki toiminnot ovat reaaliaikaisia eikä yöaikaisia eräkäsittelyjä.

Lankasuojaus: SubmissionLog on turvallinen rinnakkaiskäytölle. Rakennusfunktiot ovat puhdas ja turvallinen kutsua miltä tahansa gorutiinilta.

Source: github.com/biodream-llc/perfuse/internal/publichealth

26.80 julkaistu

Paketti julkaistu sisältää Perfusen tuotavien pakkauksien vartijat yhdessä paikassa.

hl7 oli ensimmäinen julkaistu paketti ja sisältää oman kopion näistä tarkistuksista. fhir ja pas julkaistiin, jotta päätöspalvelu, kuten Vaglio, lukee FHIR- ja PAS-pyyntöjä täsmälleen samalla koodilla, jonka Perfuse käyttää, eikä kopio, joka ajautuu: neljä X12-toimintokoodin lukijaa tässä varastossa eri aikoina olivat eri mieltä, ja yksi luki kieltämisen hyväksymisenä. Vartijat pidetään täällä eikä kopioida kunkin pakkauksen kanssa, samasta syystä.

Source: github.com/biodream-llc/perfuse/internal/published

26.81 jono

Paketti jono on kestävä, kohdekohtainen toimitusjono.

Ilman tätä menetetään kaikki viestit, jotka lähetetään kahden minuutin aikana, kun kohde on poissa: uudelleenyritykset tapahtuvat muistissa, ja kun ne loppuvat, viesti merkitään epäonnistuneeksi ja poistetaan. Sen avulla viesti säilyy levylle ja pitää paikkansa, kunnes kohde palaa.

Kaksi suunnittelupäätöstä määrittää kaiken muun.

Järjestys säilyy kohdekohtaisesti, ja se tarkoittaa, että jonottava kohde lopettaa nopean polun. HL7 on tapahtumien virta samojen potilaiden kanssa: A01 ottaa potilaan hoitoon, A03 vapauttaa potilaan. Jos epäonnistunut A01 menee jonoon, kun seuraava A03 toimitetaan suoraan, vastaanottava järjestelmä näkee potilaan vapauttamisen, jota se ei ole koskaan ottanut hoitoon. Siksi kun jotain on jonottavaa kohdelle, kaikki kyseiselle kohteelle jonottavat sen perässä, kunnes jono tyhjenee. Se maksaa läpi viennin aikana ja se ei ole valinnainen, koska vaihtoehto on hiljainen kliininen hölynpöly. Se on myös tarkalleen se asia, joka menee pieleen muissa moottoreissa, kun joku kytkee päälle rinnakkaiset jonosiirtoprosessit, jotta jonot voisivat tyhjentyä nopeammin.

Jonottava viesti on hyväksytty viesti. Lähettäjälle ilmoitetaan AA, koska tavut ovat levylle ja fsyncattu ennen kuin vahvistus lähtee. Sanominen AE tekisi oikein toimivan varasto- ja välitysjonon näyttää virheeltä ja kutsuisi lähettäjän uudelleen lähettämään sitä, mitä me jo pidämme.

Source: github.com/biodream-llc/perfuse/internal/queue

26.82 asuinpaikka

Pakkausasuinpaikka kertoo, minne tämän palvelimen tiedot voivat mennä: pilvipalvelualueet, jotka sivusto sallii (EEA, Iso-Britannia, Sveitsi tai alueet, jotka on nimetty yksitellen), ja onko liittymän alue yksi niistä.

Perfuse tarkistaa sen, mitä se voi tietää. AWS-liittymä nimeää alueensa (S3, SQS, SNS), ja AWS-isäntänimi kantaa yhden (sqs.eu-west-2.amazonaws.com); ne tarkistetaan, kun kanava tallennetaan ja ladataan, joten kanava ei voi lähettää potilastietoja Virginian bucketiin palvelimelta, jonka tiedot on pidettävä Frankfurissa. Yksinkertainen isäntänimi (sairaalan oma järjestelmä, kumppanin MLLP-kuuntelija) ei kerro mitään siitä, missä se on, eikä sitä arvioida tässä: käsittelyprosessin tietue sisältää jokaisen isäntänimen, johon kanava lähettää, jotta ohjain voi tarkistaa.

Source: github.com/biodream-llc/perfuse/internal/residency

26.83 rtpb

Pakkaus rtpb vastaa NCPDP Real-Time Prescription Benefit -pyyntöjä lääkityslistasta: mitä lääke maksaa tämän jäsenen tässä apteekissa, tarvitaanko sitä ennen kuin se voidaan myöntää, ja mitkä vaihtoehdot maksavat vähemmän.

CMS-0062-P ehdottaa RTPB:ta vaikuttaville maksajille 1. lokakuuta 2027 alkaen. XML on NCPDP RTPB v13 (PBv13). NCPDP:n schema on lisensoitu, joten elementtien nimet ja järjestys seuraavat julkisia Surescripts RTPB -esimerkkejä ja NCPDP:n julkisia RTPB-toteutussuositukset (kattavuuden rajoituskoodit ja kattavuustilat, joihin ne liittyvät); vastaus ei tarkisteta XSD:tä tässä, ja verkkosertifikaatti on se, missä se tapahtuu.

Source: github.com/biodream-llc/perfuse/internal/rtpb

26.84 s3put

Pakkaus s3put kirjoittaa objekteja S3:een käyttäen vain standardikirjastoa.

Selkein tapa puhua S3:lle on AWS SDK, ja SDK on valtava. Tämä projekti myy staattisen binäärin, jossa on kahdeksan suoraa riippuvuutta ja materiaalin luettelo, joka mahtuu yhdelle ruudulle - se on todellinen argumentti henkilön kanssa, joka arvostelee ohjelmistoa ennen kuin se asennetaan sairaalaan, ja sen vaihtaminen yhden liittymän vuoksi olisi huono kauppa.

Mitä S3 todella tarvitsee, on HTTP-PUT ja allekirjoitus. Allekirjoitusversio 4 on täysin määritelty, se on deterministinen, ja AWS julkaisee testivektoreita sille. Siksi se on toteutettu tässä: noin kaksi sataa riviä crypto/hmac:ia ja net/http:ä vastaan, ilman uutta riippuvuutta ja ilman mitään, mikä pitäisi korjata, kun SDK:lla on varoitus.

Mitä tämä tarkoituksella ei tee

Ei moniosainen lataus, ei omia uudelleenyrityksiä, ei tunnisteketjua statisten avaimien ja standardiympäristömuuttujien lisäksi. HL7-viesti on kilotavuja, joten moniosainen lataus ratkaisee ongelman, jota tämä ei ole; moottori uudelleenyrityksiä jo; ja esiintymäroolien tunnisteketju merkitsisi IMDS-kutsuja, välimuistia ja päivityslogiikkaa, jossa pieni toteutus lopettaa olemasta pieni. Jos joku tarvitsee niitä, rehellinen vastaus on tiedostokohteeseen ja synkronointityökaluun, ei puolivalmiiseen SDK:hen.

Se toimii kaiken kanssa, joka puhuu S3-rajapintaa - MinIO, Ceph, Wasabi, Backblaze - koska se on vain allekirjoitettu HTTP. Se on sivutuote, joka on arvokas, koska sairaalan objektitallennus on usein muu kuin AWS.

Source: github.com/biodream-llc/perfuse/internal/s3put

26.85 saml

Eksklusiivinen XML-kanonisaatio (exc-c14n) osoitteessa https://www.w3.org/TR/xml-exc-c14n/

Tämä on bittitarkka kanoninen muoto, jonka XML-allekirjoitus allekirjoittaa. Sen väärä tulkinta merkitsee, että voimassa olevat allekirjoitukset näyttävät virheellisiltä ja - pahemmin - toteutus, joka saa sen suurimmaksi osaksi oikein, hyväksyy testauksessa omat allekirjoitukset, mutta hylkää todelliset IdP-vastaukset.

Säännöt, jotka ovat tärkeitä SAML:lle: - Nimiavaruuden määritykset renderöidään vain, jos ne ovat näkyvästi käytössä elementissä tai sen attribuuteissa. - Perittyjen nimiavaruuden määritysten renderöinti, joita elementti käyttää, mutta joita se ei ole määritellyt, tapahtuu niin, kuin ne olisivat määritelty kyseisellä elementillä. - Attribuutit lajitellaan: nimiavaruuden määritykset ensin (lajiteltu etuliitteen mukaan), sitten muut attribuutit (lajiteltu laajennetun nimen mukaan: nimiavaruuden URI ja sitten paikallinen nimi). - Tyhjät elementit käyttävät aloitustagi/päätöstagiä, ei koskaan itse sulkeutuvaa. - Tekstisolmut tulostetaan sellaisenaan; CDATA korvataan sen sisällön kanssa, jossa on yksiköiden pakkaus. - Prosessiohjeet ja kommentit asiakirjan ulkopuolella poistetaan.

Source: github.com/biodream-llc/perfuse/internal/saml

26.86 scim

Pakkaus scim toteuttaa SCIM 2.0:n, jonka identiteettitoimittajat käyttävät tilitoiminnossa.

Okta, Entra ID, Google Workspace ja OneLogin kaikki puhuvat sitä. Järjestelmänvalvoja lisää jonkun ryhmään tunnistetietojen tarjoajassa, ja minuutin kuluessa täällä ilmestyy tili oikealla roolilla. He poistavat sen, ja tili katoaa.

Poistaminen on tärkein asia

Käyttäjän luominen on helppoutta. Poistaminen on syy, miksi tämä on rakennettava, ja se on puoli, joka menee pieleen.

Kun joku lähtee organisaatiosta, tunnistetietojen tarjoaja on järjestelmä, joka tietää siitä ensin - yleensä koska HR lopettaa heidät ja tarjoaja ohjataan HR-tiedostosta. Se kertoo sitten jokaiselle kytketylle sovellukselle poistaa tilin. Jos tämä kutsu epäonnistuu tai onnistuu ilman, että se todella poistaa pääsyn, entinen työntekijä pitää työpääsynsä kliiniseen integraatiojärjestelmään, ja kukaan ei huomaa sitä, koska kukaan ei valvo sitä, mitä ei tapahdu.

Joten tämän paketin tärkeimmät osat ovat ne, jotka tekevät poistamisen toimivaksi:

Miksi se on erillinen paketti

SCIM:n muodot eivät ole Perfuse:n muotoja. Sillä on oma virheenmuotonsa, oma listakotelo, oma korjauskieli ja oma mielipide attribuutin kirjaimista. Käännöksen pitäminen yhdessä paikassa tarkoittaa, että käsittelijät voivat olla asiasta, mitä tapahtuu tilille, eikä JSON:sta.

Source: github.com/biodream-llc/perfuse/internal/scim

26.87 skripti

Paketti-skripti suorittaa Mirth Connect JavaScriptiä.

Tavoitteena on, että kanavan skriptit siirtyvät koskemattomina. Se on yhteensopivuusharjoitus, ei suunnitteluharjoitus, joten kaiken tämän muoto on määrätty siitä, mitä Mirth paljastaa: msg ja tmp E4X-puina, kuusi kartaa Java:n Map-metodeilla, $-perheen hakufunktiot, logger ja joukko apuolioita, joiden metodien nimet ja päivämäärämuodot ovat Java:n.

Kolme päätöstä ovat meidän, eivät Mirthin, ja jokainen on tietoinen poikkeus:

Skripti suoritetaan määräajassa ja keskeytetään, kun se ylittyy. Mirth antaa skriptin silmukoida loputtomiin, mikä ottaa kanavan mukaansa; liittymä, joka lopettaa vastaanottamisen typosta muunnoksessa, ei ole hyväksyttävää, joten aina on aikakatkaisu.

Java-yhteensopivuus hylätään virheen nimeämällä, eikä palauta määrittelemätöntä. Skripti, joka ulottuu Packages.java.sql:een, ei voida saada toimimaan täällä, ja hyödyllinen tulos on viesti, joka sanoo täsmälleen sen, missä rivillä se tapahtuu, ei NullPointerException kolmea riviä myöhemmin.

Tiedoston ja tietokannan pääsy on pois, ellei kanava salli niitä. Mirth myöntää molemmat jokaiselle skriptille oletuksena. Muunnin, joka voi lukea mitä tahansa tiedostoa, jonka prosessi voi lukea, on järkevä asia, ja se on epäjärkevä oletus.

Source: github.com/biodream-llc/perfuse/internal/script

26.88 asetukset

Paketti-asetukset on yksittäinen kuvaus kaikista asioista Perfuse-palvelimessa, jotka operaattori voi muuttaa.

Miksi tämä on olemassa

Ennen tätä pakettia noin kolmekymmentä asiaa oli komentorivivirheitä ja ei mitään muuta. Viestien säilyttämisaikojen muuttaminen tarkoitti palvelun määrittelyn muuttamista ja uudelleenkäynnistystä, mikä sairaalassa tarkoittaa muutostietoa - joten käytännössä kukaan ei muuttanut niitä, ja oletus, joka valittiin ensimmäisenä iltapäivänä, tuli asetukseksi ikuisesti.

Miksi yksi rekisteri sen sijaan, että lomake

Selkein tapa rakentaa asetussivu on kirjoittaa lomake. Se tuottaa kaksi kuvausta jokaisesta asetuksesta - yhden palvelimessa, joka validoi sen, ja toisen käyttöliittymässä, joka renderöi sen - ja ne ajautuvat. Ajaus on hiljainen: kenttä, jota palvelin ei enää hyväksy, on edelleen valintanäppäin, joten joku asettaa sen, näkee sen tallennettuna ja se ei tee mitään.

Joten asetus ilmoitetaan kerran, täällä, kaiken kanssa, mitä tarvitaan sekä tarkastaa että piirtää se: mikä arvon tyyppi on, mikä valintanäppäin sopii sille, mihin ryhmään se kuuluu, mitä se tarkoittaa ja vaikuttaako sen muuttaminen välittömästi. Käyttöliittymä pyytää tuota kuvausta ja renderöi sen, mitä se sanoo. Asetuksen lisääminen on yksi merkintä tässä paketissa ja ei lainkaan käyttöliittymän työtä.

TestEverySettingIsFullyDescribed pakottaa osat, jotka ihminen on toimittava, koska asetus, jolla ei ole ohjetekstiä, on asetus, jota joku arvailee.

Miksi tiedosto sen sijaan, että tietokanta

Asetukset sijaitsevat YAML-tiedostossa, jonka käyttöliittymä muokkaa paikallisesti, vastaavasti kuin kanavat ja hälytysäännöt jo toimivat. Kolme syytä, järjestyksessä: sairaalan muutoksenhallinta haluaa konfiguraatiota, jota voidaan diffata ja laittaa versiohallintaan; operaattori, jolla on kone, mutta ei sovellusta, voi lukea tiedoston, eikä tietokantaa; ja eilisen asetusten palauttaminen ei vaadi, että sovellus on toiminnassa.

Miksi vain liput siementävät sen

Tiedosto voittaa, kun se on olemassa, ja liput toimittavat alku sisällön. Vaihtoehto - liput voittavat aina - tekisi käyttöliittymästä valehtelijan, koska mitä tahansa, mitä koskaan välitetään komentorivillä, voidaan muokata ja tallentaa ja hiljaisesti jättää huomiotta.

Lippu, joka ei ole samaa mieltä kuin tiedosto, ilmoitetaan käynnistyksessä, nimeten molemmat arvot, koska muuten lippu pysyy palvelumäärittelyssä vuosia ja seuraava henkilö, joka lukee sen, uskoo siihen.

Source: github.com/biodream-llc/perfuse/internal/settings

26.89 sftpconn

Paketti sftpconn avaa SFTP-yhteydet.

Eroon muista liittimistä, koska mielenkiintoinen osa on todennus ja isäntäavaimen todennus, ja molemmat ovat identtisiä, riippumatta siitä, kerätäänkö kanavaa tai kirjoitetaan niihin. Kaksi kopiota olisi erilaisia, ja se puoli, joka olisi erilainen, olisi se puoli, joka lopettaisi todennuksen.

Source: github.com/biodream-llc/perfuse/internal/sftpconn

26.90 varjokanava

Paketti shadow vertaa ehdokas kanavaa live-kanavaan.

Itse vertailu on helppo osa. Koko arvo on kahdessa takuussa, ja molemmat ovat pakollisia rakenteen sijaan kuin konfiguraation kautta:

Mitä vähemmän kuin tämä, ja varjotila muuttuu tavaksi rikkoa tuotantoa yrittäessä välttää rikkoa tuotantoa.

Source: github.com/biodream-llc/perfuse/internal/shadow

26.91 shl

Paketti shl toteuttaa SMART Health Links ja SMART Health Cards: QR-koodit CMS:n "Kill the Clipboard" pyytää tarjoajia hyväksymään sisäänkirjautumisessa, ja antamaan takaisin käynnin tallenteen.

SMART Health Link (SMART Health Links STU 1) on shlink:/ seurattuna base64url JSON: manifestin URL, 256-bittinen avain, ja valinnaisesti vanhenemisaika, merkintä ja liput (P salasana, L pitkäaikainen, U yksittäinen tiedosto GET:llä). Vastaanottaja lähettää manifestin URL:lle ja saa takaisin tiedostot, joista jokainen on JWE-salaus kyseisellä avaimella - alg dir, enc A256GCM, valinnaisesti DEFLATE-pakattu - sisältäen FHIR JSON, SMART Health Cards tai SMART-käyttöoikeustoken. Palvelin, joka isännöi tiedostot, ei näe avainta: se matkustaa ainoastaan linkissä, joka on potilaan.

SMART Health Card (SMART Health Cards Framework 1.4) on allekirjoitettu FHIR-paketti: compact JWS, ES256, DEFLATE-pakatulla payloadilla, joka nimeää sen myöntäjän, jonka julkisen avaimen on <iss>/.well-known/jwks.json. Se matkustaa numerona shc:/ QR-koodina tai .smart-health-card-tiedostona.

Vain standardikirjasto: crypto/aes, crypto/cipher, crypto/ecdsa ja compress/flate kattavat kaiken, ja JOSE-kirjasto tuottaisi paljon suuremman pinnan kahdelle algoritmille.

Source: github.com/biodream-llc/perfuse/internal/shl

26.92 smartauth

Paketti smartauth on SMART App Launch -käyttöoikeusservi: se myöntää käyttöoikeustunnisteet, joita Perfuse FHIR-päätepiste hyväksyy.

Kirjoitettu standardikirjastoa vastaan, kuten internal/oidc, joka vahvistaa, mitä tämä allekirjoittaa. Käyttöoikeustunnisteet ovat JWT:t, allekirjoitettu RS256, yksi algoritmi, johon jokainen SMART-asiakas ja määrittelyn ID-tunniste säännöt voivat luottaa.

Source: github.com/biodream-llc/perfuse/internal/smartauth

26.93 snmp

Paketti snmp on pieni luettava SNMPv2c-väylä: GET, GETNEXT ja GETBULK yli UDP:ta taulukkoa arvoja, jotka soittaja täyttää, ja SNMPv2-virheet.

Viestit ovat BER (X.690) koodattu täällä; ei mitään siinä ole salakirjoitusta (v2c:n yhteisömerkkijono on selvätekstisalasana, joka on syy, miksi väylä vastaa vain verkkoja, joille se on kerrottu).

Source: github.com/biodream-llc/perfuse/internal/snmp

26.94 soap

Paketti soap lähettää SOAP-pyynnöt ja lukee SOAP-virheitä, käyttäen ainoastaan standardikirjastoa.

SOAP on reilusti seremoniaa ympäröivää HTTP-lähetystä, ja se on edelleen tapa, jolla suuri osa sairaaloiden middleware hyväksyy dataa - potilas hallintajärjestelmät, asiakirja repositorio, alueelliset rekisteripalvelut, mitä tahansa määritelty vuosikymmen, jolloin tämä oli vastaus. Mirthilla on Web Service -liittimä, joten tämä on Tier 2 -siirtäjä esteen sijaan miellyttävä.

Miksi ei generoitu asiakas

Tavallinen lähestymistapa on ottaa WSDL ja generoida Go-tyypit siitä. Se on oikea vastaus sovellukselle, joka puhuu yhteen tunnettuun palveluun, ja väärä täällä: integraatio moottorin kohde on määritelty jollakulla, joka muokkaa kanavaa, ei uudelleenkäännety, joten kirje on koottava suoritusaikana mallista, jonka he voivat nähdä ja muuttaa. Se myös tarkoittaa, että ei ole koodin generointivaihetta ja ei mitään uudelleen generoitavaa, kun etäpää julkaista uuden WSDL:n.

Mitä tämä tarkoituksella ei tee

Ei WSDL-parsingia, ei WS-Security, ei MTOM, ei WS-Addressing. Nämä ovat kaikki omat määrityksensä, ja yhden yksityiskohdan väärinkäsittely on pahempi kuin sen tarjoamatta jättäminen - allekirjoitus, joka melkein vahvistaa, on erottumaton hyökkäyksestä toisessa päässä. WS-Security on erityisesti se, missä puolivälisen toteutuksen tekeminen voi aiheuttaa oikean vahingon.

Tässä on: SOAP 1.1 ja 1.2 -kuoret, mallipohjainen runko, SOAPAction-otsake ja virheen havaitseminen, joka lukee virhesanan sijaan "500":n.

Source: github.com/biodream-llc/perfuse/internal/soap

26.95 sof

Paketti sof suorittaa SQL:ää FHIR v2 ViewDefinitions: näkymä muuttaa jokaisen FHIR-resurssin yhdestä tyypistä riveiksi nimetyistä sarakkeista FHIRPathin avulla, jotta FHIR-data voidaan lukea tauluina SQL-moottoreilla, taulukkolaskentaohjelmilla ja laadun mittauksilla.

Se noudattaa ViewDefinitionin prosessointialgoritmiä (sarake, valitse, forEach, forEachOrNull, toista, unionAll, missä, vakiot, %rowIndex, getResourceKey ja getReferenceKey) ja tarkistetaan virallisia sql-on-fhir-testejä vasten.

Source: github.com/biodream-llc/perfuse/internal/sof

26.96 sqldb

Paketti sqldb avaa tietokantayhteyksiä tietokannan lähde- ja kohdepaikkaan.

Ajurit on rekisteröity tähän ja mihinkään muuhun, joten on vain yksi paikka, joka päättää, mihin Perfuse voi muodostaa yhteyden.

Source: github.com/biodream-llc/perfuse/internal/sqldb

26.97 sqlitedb

Paketti sqlitedb avaa SQLite-tietokannan siten, kuin palvelimen tarvitsee: yksi yhteys kirjoittamiseen ja useita lukemiseen.

Syy on vikamuoto, joka ilmenee vasta, kun käyttöönotto on ollut toiminnassa jonkin aikaa. SQLite WAL-tilassa lukijat voivat suorittaa kirjoittajan rinnalla, mutta Go:n yhteyspohja on SQLite:n yläpuolella, joten yhden yhteyden puskuri serialisoi kaiken riippumatta siitä, mitä tietokanta sallii. Viestin selaus, joka skannaa payload-sarakkeen, pitää ainoan yhteyden, ja jokainen saapuva viesti odottaa sen jälkeen.

Mitattuna tässä laitteessa, kirjoitus kestää 104 µs, kun varasto on tyhjä, ja 2,6 ms, kun haku skannaa neljätuhatta viestiä: 25 kertaa hitaammin. Se skaalautuu taulun mukaan, joten muutamien sadastuhannen tallennetun viestin kohdalla raportti muuttuu sekunneiksi toimitusviivettä, ja kirjoitus on vahvistusreitillä. Lähettäjä näkee aikakatkaisun, lähettää uudelleen, ja joku viettää aamun etsimällä ongelmaa verkkoon.

Yhteyspohjien jakaminen ei maksa mitään ja poistaa vuorovaikutuksen: raportit saavat omat yhteytensä, ja kirjoittaja pitää yhden itselleen, koska SQLite sallii vain yhden kirjoittajan joka tapauksessa.

Source: github.com/biodream-llc/perfuse/internal/sqlitedb

26.98 steps

Deklaratiiviset muunnosvaiheet kaikille viestiformaateille.

Miksi tämä on jaettu

Vaihekielen sanasto - aseta, kopioi, tyhjennä, kartoita, korvaa, trimmaa, tapaus, jokainen kuvaus ja valinnainen ehto - ei liity mihinkään tiettyyn formaattiin. Vain kolme asiaa eroaa formaateista: miten polku kirjoitetaan, miten arvo luetaan ja miten se kirjoitetaan takaisin.

Tämä on sama johtopäätös, johon suodatin kieli päätyi internal/expr:ssä, ja samasta syystä. X12:lla oli vaihemoottori, ja NCPDP tarvitsi yhden; sen kopiointi olisi tuottanut toisen neljäsadan rivin moottorin, jonka olisi pidettävä käsi kädessä, ja sitten kolmannen rajatulle. Arvokas käyttäytyminen on niin hienovarainen, että kopiointi ei pitäisi sitä - esimerkiksi syy, miksi tulos luetaan uudelleen jokaisen kirjoittamisen jälkeen, vaati oikean virheen löytämisen.

Mitä formaatti tarjoaa

Accessor: polun kääntäjä, ehtojen kääntäjä ja valinnainen veto-oikeus vaiheisiin, joita se ei voi hyväksyä. Mitään muuta.

Source: github.com/biodream-llc/perfuse/internal/steps

26.99 stomp

Paketti stomp puhuu STOMP 1.2:ta viestinvälittäjälle.

Tämä on, mitä "JMS-tuki" tarkoittaa ohjelmassa, joka ei ole Java. JMS on API eikä protokolla, joten sitä ei ole mitään toteutettavaa: se, mitä sivusto todella tarvitsee, on, että Perfuse puhuu viestinvälittäjälle, joka on JMS-sovellusten takana.

STOMP sen sijaan kuin OpenWire, ja syyt on syytä merkitä, koska ilmeinen vastaus on väärä. OpenWire on ActiveMQ:n alkuperäinen protokolla ja JMS-komentojen binäärisarjallistus - useita viikkoja työtä, yksinomaan yhdelle välittäjäperheelle, ja dokumentoimaton muuten kuin toteutuksensa kautta. ActiveMQ tunnistaa automaattisesti STOMP:in, AMQP:n ja MQTT:n samalla portilla, jolla se palvelee OpenWire:ia, joten tekstiprotokolla saavuttaa samat välittäjät. STOMP kattaa ActiveMQ Classicin, Artemiksen ja RabbitMQ:n; AMQP 1.0 lisäisi Azure Service Busin ja IBM MQ:n, ja se on järkevin seuraava vaihtoehto OpenWiren sijaan.

Kirjoitettu standardikirjastoa vasten. Välittäjäasiakas ei ole paikka, jossa riippuvuuden epäonnistumistilat ovat jonkun toisen selitettävissä, ja kehys tässä on tarpeeksi pieni, jotta sen omistaminen maksaa vähemmän kuin toisen henkilön issue-seurantaa lukea.

Source: github.com/biodream-llc/perfuse/internal/stomp

26.100 varasto

Paketti varasto sisältää tiedot, jotka ovat todella tilallisia: käyttäjät, istunnot ja auditointiraita.

Kanavat on tietoisesti jätetty tähän. Ne sijaitsevat tiedostoissa, koska se antaa gitin, diffit, koodin tarkastelun ja ympäristön edistämisen ilmaiseksi. Kanavien sijoittaminen tietokantaan on päätös, joka pakottaa jokaisen näistä ostettavaksi erikseen, ja se on syy siihen, että kolmannen osapuolen tuote on olemassa yksinomaan siirtämään Mirth-kanavia sen tietokannasta git-repositorioon.

Jako on siis: konfiguraatio tiedostoissa, identiteetti ja historia SQLite:ssä.

Source: github.com/biodream-llc/perfuse/internal/store

26.101 tefca

Paketti tefca toteuttaa TEFCA-osallistumisen osat, jotka eivät vaadi QHIN-yhteyttä.

Mitä on reaaliaikainen

Käyttötarkoituksen validointi, konfiguraation validointi ja auditointiraita - mukaan lukien sen pysyvyys, sen kyselyliittymä ja sen velvollisuus merkitä epäonnistuneet yritykset sekä onnistuneet. Viimeksi mainittu ei ole teknisyyttä: epäonnistuneiden toimitusten sarja yhdelle vastaanottajalle on tapa, jolla väärin konfiguroidun kumppanin havaitsee, ja eri potilaiden epäonnistuneiden kyselyjen sarja on tapa, jolla havaitaan tietojen etsintä.

Mitä ei ole

Verkko. Tässä koostumuksessa ei ole QHIN-kuljetusta, joten vaihtoa ei tapahdu, ja jokainen vaihtofunktio kieltäytyy virheellä ErrExchangeNotImplemented sen sijaan, että se palauttaa onnistumisen.

Tämä ero ei aina ollut piirretty, ja se, miten se meni pieleen, on syytä pitää. Kaikki neljä vaihtofunktiota validoivat aiemmin syötteensä, eivät tehneet verkkokutsua ja palauttivat onnistumisen; Toimitus palautti hyväksytyn vastauksen seurantatunnisteella, joka koostui kellonlyömästä. Auditointikerros merkitsi jokaisen valmiina vaihtona - lokissa, joka on olemassa osoittamaan, mitä vaihdettiin, kun joku kysyy kuukausien kuluttua. Neljä testiä vahvisti tämän käyttäytymisen ja läpäisi.

Mitä sen valmistaminen vaatii

Rekisteröinti laadukkaan terveydenhuollon tietoverkon (Qualified Health Information Network) kanssa, keskinäisesti todennettu TLS sertifikaateilla, jotka on myönnetty tämän prosessin kautta, ja joko IHE-profiilit, joilla yhteinen sopimus aloitettiin, tai Facilitated FHIR, kuten Sequoia Projectin standardioperaatio määrittelee, voimaan 8. maaliskuuta 2026. Mitään näistä ei voida kirjoittaa spekulatiivisesti: sitä testataan todellista QHIN:ää vastaan tai sitä ei testata, ja testaamaton vaihtototeutus on sama virhe kuin toteutus, joka ei ole olemassa, mutta jolla on parempi naamiointi.

Source: github.com/biodream-llc/perfuse/internal/tefca

26.102 vuokralainen

Paketti vuokralainen tarjoaa identiteetin ja eristysregelit monen vuokralaisen toiminnalle.

Terveysinformaatiovaihtopalvelu, välittäjä tai hallitun palvelun tarjoaja ajaa yhtä moottoria useiden organisaatioiden puolesta. Mirth ei voi tehdä tätä - yksi instanssi palvelee yhtä organisaatiota, ja MSP joutuu ajamaan viisikymmentä JVM:ää ja viisikymmentä tietokantaa.

Mitä vuokralainen omistaa

Omat kanavansa tiedostohakemistona. Omat käyttäjänsä. Omat viestinsä, jononsa, auditointiraitansa ja FHIR-resurssinsa. Omat mittausmerkintänsä. Mitään ei jaeta muuta kuin prosessi, kuunteluportit, joille se on varattu, ja alustan ylläpitäjät.

Eristys on rakenteellinen, ei muistettu

Vaarallinen virhe tässä on ei ole kaatuminen. Se on vuokralainen A, joka näkee vuokralaisen B:n viestit, mikä on ilmoitettava rikkomus eikä bugi. Suunnittelu, jossa jokainen kysely ottaa vuokralaisen_tunniste-parametrin, epäonnistuu ensimmäisen kerran, kun joku kirjoittaa kyselyn ja unohtaa sen, ja kysely näyttää täydelliseltä tarkastelussa.

Vuokralainen ei siis ole parametri. Tietojen käyttö tapahtuu käsittelijän kautta, joka jo kantaa sitä, eikä ole mahdollista päästä tauluihin ilman sitä. Unohdus ei ole mahdollista.

Source: github.com/biodream-llc/perfuse/internal/tenant

26.103 terminologia

Paketti terminologia pitää julkaisuja koodijärjestelmiä (LOINC, SNOMED CT, RxNorm, ICD-10-CM, CPT ja paikallisia) koodien etsimiseksi ja arvojen mäppäystauluja, joita ei ollut aiemmin, jotta joku voisi kartoittaa.

Koodijärjestelmät tuodaan niiden julkaisijoiden jakamista tiedostoista. Useat ovat lisensoituja (LOINC tarvitsee ilmaisen tilin, SNOMED CT affiliate-lisenssin, RxNorm UMLS-lisenssin, CPT AMA-lisenssin), joten mikään ei toimita Perfusen kanssa: järjestelmänvalvoja, joka omistaa lisenssin, lataa tiedoston, ja Perfuse merkitsee, kuka lataa sen ja milloin.

Source: github.com/biodream-llc/perfuse/internal/terminology

26.104 tlsconf

Paketti tlsconf luo TLS-määrityksiä tiedostoista ja kuvaa varmenteita.

Tämä on ilmaisversio Mirth-laajennuksesta, jota Mirth nyt laskuttaa. Suurin osa arvosta ei ole salausta, joka on vain muutamia rivejä, vaan osa, joka estää jonkun käyttämästä jotain, mikä ei ole turvallista: kieltäytyminen ohittamasta verifiointia hiljaisesti, vaatimalla asiakasvarmenteen tarkistusta, kun sellaista pyydetään, ja ilmoittamalla selvästi, kun varmenne on lähellä vanhenemista.

Vanhenemisajan päässä oleva varmenne rajapinnan syötteessä on todellinen sairaaloiden katko, ja se johtuu siitä, että kukaan ei ole ilmoittanut siitä.

Source: github.com/biodream-llc/perfuse/internal/tlsconf

26.105 tomirth

Paketti tomirth kirjoittaa Perfuse-kanavan takaisin Mirth-kanavan XML:ksi.

Syy, miksi tämä on olemassa. Vastustus uuden integraatioympäristön omaksumiselle ei yleensä ole "onko se hyvä", vaan "mitä jos olemme väärässä ja jäämme jumiin", ja edullisin vastaus tähän on kyky palata takaisin. Perfuse on pystynyt lukemaan Mirthin kanavia alusta alkaen; tähän asti se ei kuitenkaan voinut kirjoittaa yhtään, mikä teki takaisinvarmistuksen yksisuuntaiseksi ja siten ei kovin vakuuttavaksi.

Tapa, jolla se välttää ansan, joka teki ensimmäisen yrityksen hyödyttömäksi. Mirthin XML on XStreamin tuotosta, ja XStream lukee luokka- ja versioattribuutteja ohjeina: tuntematon elementti poistetaan ilman sanaa, ja kanavaa, jota ei voida koota, tallennetaan kuvaus korvattuna "Tämä kanava on virheellinen. Varmista, että kaikki vaaditut laajennukset on ladataan oikein" ja kohteet poistetaan. Mitään vastauksessa ei mainita virheellistä elementtiä. Viejä, joka kokoaa ominaisuuslohkoja formaatin lukemisesta, epäonnistuu kalliissa diagnosoinnissa, mikä tapahtui: tämä varasto sisälsi viejän, jolla oli yhdeksän läpi menevää testiä, jonka tuotosta Mirth hylkäsi, koska jokainen testi vertasi sitä omaan parseriimme sen sijaan, että palvelimeen.

Joten mikään ominaisuuslohkoja ei koosteta täällä. scripts/mirth-dump-connector-templates.sh sisältää Mirthin ObjectXMLSerializerin, joka sarjallistaa jokaisen liittymän oletusominaisuudet, ja nämä asiakirjat on sitoutettu templates/-kansioon. Tämä paketti korvaa arvot niihin, ja mirth.SetRawProperty kieltää polun, jota mallipohja ei jo sisällä - virhe on virhe polun nimeämisessä vientimomentin, ei kanava, joka katoaa tuonnissa.

Mitä se ei tee. Kuljetus, jolla ei ole Mirthin vastinetta, hylätään nimen perusteella eikä se pyritä likimääräiseen arvoon. Vienti, joka hiljaisesti muuttaa S3-kohteen tiedostokirjoittajaksi, olisi huonompi kuin ei vienti ollenkaan, koska kanava tuontaisi puhtaasti ja toimittaisi väärään paikkaan.

Source: github.com/biodream-llc/perfuse/internal/tomirth

26.106 trace

Paketti trace tuottaa hajautettuja jäljityksiä viesteille, jotka liikkuvat kanavassa, ja vie ne OTLP/HTTP:n kautta JSON-koodauksella.

Syy, miksi tämä on olemassa OpenTelemetry SDK:n sijaan: SDK plus OTLP-viejä vetää noin kuuskympin moduulin ja lisää yhtä paljon binääriin kuin koko muu ohjelma. Se, mitä todella tarvitaan tässä, on kapea - W3C-jäljityskontekstin propagointi, kehysmalli, pääsarjatutkimus ja erätetty HTTP-POST - ja OTLP/JSON on dokumentoitu vakaampi koodaus, jota voidaan tuottaa standardikirjastolla. Sama kauppa kuin valinta lib/pq:n sijaan pgx: ottaa pieni asia, kun vain osa suuremmasta asiasta on haluttu.

Seuraus, joka on mainittava: ei ole auto-instrumentaatiota eikä valmistajan määrittelemää viejää. Kehykset ovat ne, jotka tämä ohjelma luo tarkoituksella, ja ne menevät mihin tahansa OTLP-päätepisteeseen - kerääjään, Jaegeriin, Grafana Tempoon, Honeycombiin, Datadogin OTLP:n syöttöön.

Ominaisuus, joka on tärkeämpää kuin kehykset

Viesti saapuu usein kantavana jäljitys-ominaisuutta sisältävällä otsikolla järjestelmästä, joka lähetti sen, ja poistuu järjestelmään, joka tallettaa yhden oman. Jäljityksen jatkaminen uuden sijaan on se, mikä tekee yhden näkymän "Tietokanta lähetti tämän, moottori muunsi sen, rekisteri hylkäsi sen" mahdolliseksi.

Jäljitys ei saa vaikuttaa toimitukseen

Jokainen toiminto täällä on parhaimman pyrkimyksen mukainen. Kehykset poistetaan, kun puskuri on täynnä, vientihäiriöt lasketaan ja ne eivät koskaan jäädytä viestireittiin, eikä kutsu estä verkkoa. Pudotettu kehys on harmi. Viesti, joka on viivästynyt tai kadonnut, koska jäljitys-tausta oli hitaampi, on kliininen tapaus, joten kauppa ei ole koskaan kyseessä.

Source: github.com/biodream-llc/perfuse/internal/trace

26.107 transform

Paketti transform soveltaa julistavia muutoksia viestiin.

Tämä on kerros, joka on tarkoitettu kantamaan tavallinen työ, ja skriptaus on säilytetty merkittynä päästöreikänä. Ero ei ole tyylinen. Vaihe, joka on julistettu YAML:ssa, voidaan validoida ennen sen suorittamista, näytetään erossa, tarkastetaan jonkun toimesta, joka ei lue JavaScriptiä, ja raportoida; skripti voidaan vain suorittaa ja toivoa parasta. Suurin osa siitä, mitä Mirthin muunnokset todella tekevät, on tylsää - kopioida kenttä, täydentää tunniste, kartoittaa koodi taulukkoon, tyhjentää jotain, joka ei saa poistua rakennuksesta - ja kaikki tämä kuuluu tänne.

Jokainen vaihe nimeää kohdettaan nimenomaisesti, ja jokainen vaihe on kääntäen suoritettavissa siinä mielessä, että se kertoo, mitä se teki, koska kallein epäonnistuminen rajapinnassa on muunnos, josta kukaan ei tiennyt.

Source: github.com/biodream-llc/perfuse/internal/transform

26.108 translate

Paketti translate muuntaa Mirth-kanavan Perfuse-kanavamääritykseksi.

perfuse explain raportoi, mitkä osat estävät migraation. Tämä suorittaa suurimman osan migraatiosta, joka on erilainen ja paljon laajempi väite, joten se on tietoisesti varovainen siinä, mitä se on valmis väittämään.

Kolme sääntöä muotoilee koko järjestelmän.

Mitään ei hävitetä hiljaisesti. Jokainen osa lähdereitistä käännetään, siirretään sellaisenaan käsikirjoituksena tai ilmoitetaan vaativan ihmisen toiminnan. Kääntäjä, joka vaikenee yhden vaiheen, tuottaisi reitin, joka alkaa, suorittaa ja menettää dataa — huonoin mahdollinen tulos ja syy, miksi ihmiset epäilevät migraatiotyökaluja.

Julistava, kun se on varma, käsikirjoitus, kun se ei ole. Mapper-vaihe, joka kopioida kentän, muuttuu julistavaksi vaiheeksi, koska se on luettava ja tarkistettava. JavaScript-vaihe muuttuu käsikirjoitukseksi, koska Perfuse suorittaa Mirthin JavaScriptin muuttumattomana ja sen uudelleenkirjoittaminen joksikin, joka näyttää siltä, on täsmälleen se, missä kääntäjä esittää eron, jota kukaan ei huomaa.

Tuloste on tarkoitettu lukemiseen. Se sisältää kommentit, jotka selittävät, mistä se tuli ja mitä jätettiin ihmisen tehtäväksi. Migraatio tarkistetaan jonkun toimesta, joka on allekirjoittanut sen, ja annotoimaton YAML-muuri ei voida tarkistaa.

Source: github.com/biodream-llc/perfuse/internal/translate

26.109 udap

Paketti udap toteuttaa HL7-turvan Scalable Registration, Authentication and Authorization -määrityksen asiakaspuolen — määritys, jota TEFCA:n Facilitated FHIR-vaihto perustuu.

UDAP on julkisen avaimen infrastruktuuri, joka on kiinnitetty OAuth 2.0:aan. Luottamuksellinen yhteisö myöntää X.509-varmenteita jäsenilleen; jäsen osoittaa, kuka se on, allekirjoittamalla JWT:t yksityisavaimella ja liittämällä varmenneketjun JWT-otsikkoon. Se korvaa tavallisen OAuthin jaetun asiakassalaisuuden, joka ei skaalautu tuhansiin organisaatioihin, jotka eivät ole koskaan tavanneet.

Miksi tämä paketti on olemassa oikeastaan. TEFCA-vaihtoa ei voida täysin vahvistaa ilman oikeaa QHIN:ia: sen liittäminen vaatii käyttöönoton ja myönnettyjä varmenteita, eikä sitä voida väärentää. Mutta turvaprofiili sen alla on julkaistu HL7-määritysopas, jolla on julkiset viitepalvelimet, ja yksi niistä vastaa avoimella internetissä. Joten se osa, joka voidaan vahvistaa, vahvistetaan täällä, ja se osa, jota ei voida vahvistaa, hylätään rajalla sen sijaan, että sitä arvaillaan.

Ero on tärkeä johtuen siitä, mitä tapahtui SAML:lle tässä varastossa: tuhannet testirivit hyväksyttiin, viisi niistä erityisesti allekirjoituksen kanonisoimisesta, kun kukaan todellinen tunnistepalvelu ei voinut todentaa ketään. Molemmat puoliskot oli kirjoitettu täällä ja ne sopivat toisiinsa. Opittu oppi on, että turvamääritys on arvoton, kunnes joku toisen kirjoittama on hyväksynyt tai hylännyt sen.

Määritysviittaukset: - HL7 UDAP Security STU 1: http://hl7.org/fhir/us/udap-security/STU1/ - TEFCA SOP Facilitated FHIR Implementation v2.0, voimassa 8. maaliskuuta 2026

Source: github.com/biodream-llc/perfuse/internal/udap

Paketti umlink siirtää X12 278:t käyttöön hallintajärjestelmään ja takaisin, tavoilla joilla nämä järjestelmät toimivat käytännössä: X12 HTTPS POST -pyynnön sisällä; CAQH CORE:n SOAP -kuori (yhteyden sääntö vC2.2.0, jota useimmat maksajat ja CMS:t käyttävät esMD: ssä, ja vC4.0.0); CAQH CORE:n HTTP MIME -moniosainen kuori (vC2.2.0); ja erä tiedostoja SFTP: n kautta.

Kirjoitettu CAQH:n julkaisemista yhteyden säännöistä (vC2.2.0 ja vC4.0.0), niiden XML -skeema ja WSDL, ja CMS:n esMD X12N 278 Companion Guide. Se ei ole CORE -sertifioitu: sertifioinnin suorittavat CAQH:n valtuutetut testaajat.

Reaaliaikaiset linkit palauttavat vastauksen, jonka UM -järjestelmä antoi, joka voi olla 278 -vastaus tai, kun se ei voinut lukea pyynnön, 999 tai TA1: soittaja lukee sen. Erälinkki palauttaa ErrAnswerLater, kun tiedosto on toimitettu, ja Poll kerää mitä se palauttaa.

Source: github.com/biodream-llc/perfuse/internal/umlink

26.111 v2fhir

Paketti v2fhir kartoittaa HL7 v2 -viestit FHIR-resursseihin.

Kartoitus on se, missä yhteentoimivuushankkeet todella epäonnistuvat, joten tämän paketin noudattamat säännöt on ilmoitettu sen sijaan, että ne olisivat implisiittisiä:

Source: github.com/biodream-llc/perfuse/internal/v2fhir

26.112 vcs

Paketti vcs lukee kanavatiedostojen historian git:stä.

Kanavahistoria on muualla maksullinen laajennus, ja se on maksullinen laajennus, koska ne moottorit säilyttävät kanavat tietokannassa, joten muutosten seuraaminen tarkoittaa muutosten seurantajärjestelmän rakentamista. Perfuse säilyttää kanavat tiedostoissa, joten historia on olemassa ja on ollut siitä lähtien, kun ensimmäinen commit tehtiin. Tämä paketti vain lukee sitä.

Se käyttää git:iä sen sijaan, että se upottaisi git-kirjaston. Kirjasto lisäisi suuren riippuvuuden binääriin, jonka myyntipiste on neljä, ja se ei ostaisi mitään: käyttöönotto, joka pitää kanavat versiohallinnassa, on asennettu git, ja sellainen, joka ei ole, saa selkeän "ei git-repositorio" sen sijaan, että se olisi hienovarainen samaa asiaa.

Source: github.com/biodream-llc/perfuse/internal/vcs

26.113 vfs

Paketti vfs on pieni joukko tiedostotoimintoja, joita tarvitaan pollausliittimelle.

Miksi rajapinta sen sijaan, että neljä liittimaa

Perfuse kerää tiedostoja paikalliselta levykkeeltä, SFTP-palvelimelta, FTP-palvelimelta, Windows-jakamiselta ja WebDAV-palvelimelta. Siirto eroaa jokaisessa tapauksessa. Kaikki, mitä todella päättää, selviävätkö viestit, ei:

Kirjoitetaan kerran kulkuliikenteessä, nämä säännöt olisivat hienoisesti erilaisia viisi kertaa, ja eroavaisuudet ilmestyisivät ainoastaan viesteinä, jotka katosivat yhdellä sivustolla. Niinpä ne kirjoitetaan kerran, täällä, pienimmän rajapinnan yli, joka tukee niitä.

Mitä ei ole tarkoituksella täällä

Ei kirjoittamista, mitä hävittäminen tarvitsee. Tiedostojen lähettäminen on erilainen ongelma erilaisilla virheillä - osittain kirjoitettu tiedosto kaukana päässä, jota olemassa olevat lähettäjät käsittelevät kirjoittamalla väliaikaiseen nimeen ja uudelleennimeämällä. Kumpaankin suuntaan taittaminen yhteen rajapintaan tekee kummastakin hankalammaksi.

Ei rekursiota. Häämöttäjä, joka laskee alihakemistoihin, kerää arkistohakemiston, johon se juuri siirsi tiedoston.

Source: github.com/biodream-llc/perfuse/internal/vfs

26.114 vpn

Paketti vpn raportoi sivuston välisen VPN-tunnelin tilan, jonka kautta kumppanin liikenne kulkee - AWS Site-to-Site VPN, Azure VPN Gateway -yhteydet ja strongSwan - ja pitää kunkin kumppanin yhteysvihkon: molempien puolien tunneliasetukset ja ovatko ne sopimassa.

Tunneli, joka on alas, näyttää interface-moottorilta täsmälleen kuin kumppani, jonka moottori on pysähtynyt: yhteydet vanhenevat. Sanomalla "tunneli on alas" sen sijaan, että "kumppani on pysähtynyt", on ero siinä, kutsutaanko verkko- vai kumppanitiimiä.

Vain luku. Mitään täällä ei muuteta tunnelia, eikä jaettua salasanaa lueta, säilytetä tai näytetä koskaan.

Source: github.com/biodream-llc/perfuse/internal/vpn

26.115 web

Paketti web palvelee kokoamisen eteenpäin sisään binääriin.

Varat ovat upotettuina eikä niitä lähetetä erikseen, joten käyttöönotto pysyy yhtenä tiedostona. Se on sama syy, miksi moottori välttää cgo: a operaattori pitäisi pystyä kopioida binääri palvelimelle ja suorittaa sitä ilman JVM: ä, asentajaa tai varadirektoria, joka on poissa tasapainosta suoritettavien kanssa.

Kokoonpanotulos on sitoutunut, jotta go build toimii tarkistuksella ilman Nodea asennettuna. Rakenna se uudelleen make web -käskyllä.

Source: github.com/biodream-llc/perfuse/internal/web

26.116 webauthn

Paketti webauthn vahvistaa passkeyt.

Passkey on avainpari, jonka todentaja pitää - Touch ID, Windows Hello, YubiKey, puhelin - jossa yksityinen puoli ei koskaan jää laitteeseen. Kirjautuminen tarkoittaa, että palvelin lähettää satunnaisen haasteen, todentaja allekirjoittaa sen käyttäjän ollessa läsnä, ja palvelin vahvistaa allekirjoituksen julkisella avaimella, jonka se tallensi rekisteröintiin.

Se ominaisuus, joka on tärkeää, ei ole se, että se on kätevää. Se on, ettei ole mitään kalastelua. Salasana voidaan kirjoittaa vakuuttavaan kopioon kirjautumissivusta; passkey -allekirjoitus on sitoutunut alkuperään, josta se luotiin, joten kopiosta tulee allekirjoitus, jonka palvelin ei voi käyttää. Integration-moottorille, joka pitää sairaalan liittymiä, se on ero, josta on arvo.

Mitä tämä toteutus kieltäytyy tekemästä

Määritys on myöntäväissä kohdissa, joissa myöntäminen on se, miten toteutukset rikkoutuvat. Tämä ei ole:

Source: github.com/biodream-llc/perfuse/internal/webauthn

26.117 winservice

Paketti winservice ajaa Perfuse -moottorin Windows-palveluna.

Tämä tiedosto on kaikkialla muualla puoli. Se on olemassa, jotta cmd / perfuse voi kutsua tähän pakettiin ilman kääntämisen merkin kietoutumista kutsupaikkaan: alikomennus on aina käännöksessä, ja Linuxilla tai macOS: llä se selittää, että palvelut ovat Windowsin idea eikä epäonnistu.

Kieltäytyminen selkeällä lauseella on parempi kuin piilottaa alikomento. Joku, joka seuraa Windowsin ohjeita väärällä koneella, kerrotaan, mitä todella tapahtuu, ja vastaava heidän alustansa.

Source: github.com/biodream-llc/perfuse/internal/winservice

26.118 x12

Arvojen lukeminen ja kirjoittaminen polkuun.

Miksi tämä on erillinen polusta

Tiedosto path.go päättää, mitä polkuilmaisu tarkoittaa. Tämä tiedosto ratkaisee yhden todellisen vaihdon vastaan. Ne on pidetty erillään, koska parsimissäännöt ovat lukemisen arvoisia ilman bittien käsittelyä, ja koska parseria käytetään konfiguraation validointiin, jolla ei ole viestiä, jota vastaan se voidaan ratkaista.

Miksi kirjoitus uudelleenparsii sen sijaan, että se muokkaa bittiä paikallaan

Segmentin alkiot ovat Segment.raw:n alijoukkoja, ja Message.segs indeksoi Message.raw:hen. Arvon muokkaaminen paikallaan muuttaa kaiken sen jälkeen olevan pituuden, joten kaikki nämä alijoukot täytyy säätää, ja mikä tahansa niistä, jota ei huomata, lukee oikein, kunnes se ei lueta.

Niinpä kirjoitus rakentaa segmentin uudelleen, rakentaa vaihdon uudelleen ja parsii sen uudelleen. Se maksaa parsennan kunkin muutetun viestin kohdalla ja ostaa takuun, että Message, joka palautetaan täältä, on täsmälleen se, minkä sen omat bittit tuottavat. Ei ole tilaa, jossa indeksit ja bittit eroavat, koska se tila on edustamaton.

Source: github.com/biodream-llc/perfuse/internal/x12

26.119 x12xml

Paketti x12xml muuntaa X12:n (ja muut erotellut EDI) XML: ksi, jonka Mirth Connect ja Open Integration Engine kirjoittavat siitä, ja takaisin.

Miksi tuo XML ja ei joku omista

X12:n XML-muodon tarkoitus on järjestelmät, jotka jo käyttävät sitä. Sivusto, joka siirtyy Mirthista, vastaanottajat, jotka on rakennettu Mirthin EDI/X12-tietotyyppiä vastaan, skriptit, jotka kävelevät msg['CLM']['CLM.05']['CLM.05.1']: ää, ja ylävirtaan moottorit, jotka lähettävät X12: tä tämän XML:nä. Oma siistimpi muoto ei palvelisi niitä. Siksi tämä kirjoittaa täsmälleen sen, mitä Open Integration Engine 4.6 kirjoittaa, ja lukee täsmälleen sen, mitä se lukee, ja testit vertaavat kahta byte kerrallaan OIE:n oman serialisoijan kanssa.

Aikaisempi versio tästä paketista keksi oman muotonsa (X12Interchange-juuri, elementit nimetty CLM05) ja sanoi, että se vastasi Mirthin muotoa. Se ei vastannut; se ei ollut koskaan verrattu Mirthiin, ja mikään Perfusessa ei käyttänyt sitä.

The format

Juuri on X12Transaction, kun viesti alkaa ISA-segmentillä ja EDIMessage muutoin, joka sisältää kolme erotinta (segmentDelimiter, elementDelimiter, subelementDelimiter) attribuutteina. Jokainen segmentti on elementti, joka on nimetty tunnistajansa mukaan. Jokainen tietoelementti on SEG.NN, joka on numeroitu 01: stä (ISA.01, CLM.05), ja sisältää komponenttinsa SEG.NN.1, SEG.NN.2 jne.: aina vähintään SEG.NN.1 arvolle, ei tyhjälle.

Eriotinmerkit luetaan ISA: sta, kun sellainen on: elementtierotin paikasta 3, komponenttierotin paikasta 104 ja segmentin päättäjä paikasta 105, johon liittyy rivinvaihto, joka lasketaan osaksi sitä. Muutoin ne ovat ~ * ja:. Toistomerkin (ISA11) tulkinta ei ole, mikä on myös OIE:n käyttäytyminen: toistuva elementti pitää sisällään ^ yhden arvon sisällä.

Tämä on uudelleen toteutus käyttäytymisestä, kirjoitettu havainnoimalla OIE:n tulostetta ja sen dokumentoidusta muodosta; ei Mirthin koodia ole siinä.

Source: github.com/biodream-llc/perfuse/internal/x12xml

26.120 xds

Paketti xds on IHE:n cross-enterprise-dokumenttien jakaminen: XDS.b-dokumenttirekisteri ja -varasto (ITI-41 Tarjoa ja rekisteröi, ITI-18 Rekisterin tallennettu kysely, ITI-43 Nouda dokumenttijoukko), XCA-vastausportaali samassa varastossa (ITI-38, ITI-39), ja kummankin asiakaspuoli, joten kanava voi julkaista dokumentin toisen organisaation varastoon ja konsoli voi kysyä rekisteriä tai yhteisöä.

Metatiedot ovat ebXML-rekisteri 3.0 (ebRIM), kuten XDS.b määrittelee sen IHE ITI TF-3 luvussa 4. Se on mallinnettu täällä Go-rakenteina, joiden XML-tunnisteet kantavat nimiavaruudet, joten viesti luetaan samalla tavalla riippumatta siitä, mitä etuliitettä lähettäjä valitsi, ja kirjoitetaan nimiavaruuden mukaisesti.

Source: github.com/biodream-llc/perfuse/internal/xds

26.121 xmldsig

Paketti xmldsig toteuttaa XML-digitaalisen allekirjoituksen ja XAdES-profiilin siitä.

Miksi tämä on kirjoitettu sen sijaan, että se on lainattu

Allekirjoitettu kliininen dokumentti on oikeudellinen artefakti. Se väittää, että nimetty henkilö, nimettynä ajankohtana, otti vastuun tietystä bittijoukosta. Sen saaminen väärin kummassakin suunnassa on vakavaa: allekirjoitus, jota ei voida vahvistaa, tekee voimassa olevan dokumentin näyttämään väärennetyltä, ja vahvistaja, joka on liian antelias, hyväksyy dokumentin, jonka joku on muuttanut.

Kanonisaatio on koko ongelma

XML:llä on monia bittijonoja, jotka tarkoittavat samaa asiaa. Attribuuttien järjestys ei ole merkittävää, nimiavaruuden etuliitteet voidaan uudelleennimetä, tyhjät alkiot voidaan kirjoittaa kahdella tavalla, ja valkoinen tila sisällä tagissa on vapaa. Allekirjoitus on bittien yli, joten ennen kuin mitään hashataan, molemmat päät ovat sopineet täsmälleen yhdestä bittijonosta annetun dokumentin kohdalla. Tämä sopimus on kanonisaatio, ja se on siellä, missä toteutukset menevät väärin, koska jokainen virhe tuottaa allekirjoituksen, joka vahvistaa oman tulostuksensa ja epäonnistuu kaikkien muiden tulostusten kohdalla.

Niinpä tämä tiedosto on kanonisaatio, erillään, omilla testeillään. Mitään allekirjoitusta ei näy täällä.

Eksklusiivinen sen sijaan, että se olisi inkluusiivinen, oletuksena

Inkluusiivinen kanonisaatio vetää kaikki nimiavaruuden määritykset, jotka ovat voimassa, mukaan lukien ne, joita allekirjoitettu elementti ei koskaan käytä. Se rikkoaa allekirjoituksen, kun dokumentti upotetaan myöhemmin johonkin, joka määrittelee sille vierasta nimiavaruutta esivanhemmalle, mikä on tarkalleen se, mitä tapahtuu, kun CDA asetetaan SOAP-kirjekuoreen tai IHE-metadatakuoriin. Eksklusiivinen kanonisaatio sisältää vain määritykset, joita elementti todella käyttää, ja se on se, mitä dokumenttien vaihtoprofiilit määrittelevät tästä syystä.

Source: github.com/biodream-llc/perfuse/internal/xmldsig

26.122 xtree

Paketti xtree on muuttuva XML-puu.

Kolme erilaista ominaisuutta tarvitsee muokata XML:ä: HL7-muunnokset, jotka Mirth mallintaa XML:ksi, koska sen skriptit toimivat siitä; kliiniset asiakirjat, jotka ovat luonnostaan XML; ja deklaratiiviset muunnosvaiheet. Ne jakavat tämän yhden puun sen sijaan, että kukin kasvattaisi oman, koska vaihtoehto on kolme mallia, jotka ovat eri mieltä siitä, mitä tyhjä elementti tarkoittaa.

Suunnittelutavoitteena on uskollisuus E4X-semantiikkaan, koska Mirth-skriptit ovat E4X:ää ja koko pointti skriptien suorittamisessa muuttumattomina on, että ne käyttäytyvät samalla tavalla. Tämä johtaa kahteen päätökseen, jotka muuten näyttäisivät outoilta: solmu pitää osoitinta vanhempaansa, koska E4X paljastaa parent():n, ja lapset ovat järjestyksessä, jossa sallitaan duplikaatit, koska HL7-kentän toisto on kirjaimellisesti toistuva elementti ja skriptit indeksoida niitä aseman mukaan.

Source: github.com/biodream-llc/perfuse/internal/xtree

26.123 paketti pas

Paketti pas lukee Da Vinci Prior Authorization Support (PAS) -pyyntöpaketteja.

Se on lukija, jonka Perfuse:n oma PAS-palvelin käyttää, julkaistu siten, että mikä tahansa päättää ennakkovaltuutuksesta - maksajan säännöt, hyödyntämishallintajärjestelmä, päätöspalvelu kuten Vaglio - lukee pyynnön samalla koodilla, ja siten samat vastaukset siitä, mitä pyynnössä on. Kaksi lukijaa yhdestä viestiformaatista ovat kaksi mielipidettä siitä.

Sillä ei ole riippuvuuksia standardikirjaston ulkopuolella. Pyyntö säilytetään purettuna JSON:na (map[string]any) sen sijaan, että se olisi tyypitetty resursseina, koska PAS-paketti sisältää mitä tahansa tukiresursseja, jonka tarjoaja on valinnut lähettää, ja lukija, joka pudottaa sen, mitä se ei mallinna, piilottaisi todisteita päätöksestä.

req, problems := pas.Read(bundle, false) if len(problems) > 0 { // kieltäydy: pyyntöä ei voida vastata oikein } for _, svc := range req.Services() { // svc.Codes, svc.Item, ja req.Resolve kaikelle, mihin kohta viittaa }

Source: github.com/biodream-llc/perfuse/pas

27 Määritysavainluettelo

Jokainen avain aakkosjärjestyksessä, blokeissa, joissa se voi esiintyä. Avain, joka esiintyy useissa blokeissa, tarkoittaa samaa asiaa kussakin; siellä, missä se ei, blokit on dokumentoitu erikseen ja ero on mainittu siellä.

27.1 Kaikki avaimet

AvainNäkyy
access_key_idAWS Access, FHIR Auth, S3 Destination
accountAzure Blob Access
ackHTTP Source, SOAP Source, Source
ack_sender_idX12 Options
ack_sender_qualifierX12 Options
acknowledgeEDIFACT Options, HL7v3 Options, X12 Options
acksKafka Destination
actionSOAP Destination
addrAMQP Connection, Broker Destination, Broker Source, MQTT Connection
addressAMQP Connection, DICOM Destination, DICOM Query Source, Destination, Direct Address, TCP Dest
ae_titleDICOM Source
after_queryDatabase Source
after_readAzure Blob Source, Direct IMAP, Email Source, File Poll, GCS Source, S3 Source, SFTP Source
allowScripts
allow_clear_passwordFTP Destination
allow_unencryptedAS2 Partner, PGP Receive
allow_unsignedAS2 Partner
allowed_calling_aeDICOM Source
allowed_sendersEmail Source
amqpDestination, Source
anchors_fileDirect Address
api_versionIBMMQ Connection
appendDestination, SFTP Destination
applicationAck
armorPGP Send
arrives_asX12 Options
as2Destination, Source
attachSMTP Destination
attach_nameDirect Destination, SMTP Destination
attachment_namesEmail Source
attachmentsChannel
attemptsRetry
authFHIR Destination, PAS Destination
authoritiesMPI Destination
azure_blobDestination, Source
backoffQueue Config, Retry
base64SOAP Source
batch_sizeDatabase Source, File Poll
baudSerial Source
bccSMTP Destination
bearer_tokenCDA Destination, FHIR Destination, HTTP Destination, PAS Destination
big_endianTCP Framing
blobAzure Blob Destination
bodySMTP Destination, SOAP Destination
brokerDestination, Source
brokersKafka Destination, Kafka Source
bucketGCS Access, S3 Destination, S3 Source
bundle_scriptFHIR Destination
called_aeDICOM Destination, DICOM Query Source
calling_aeDICOM Destination, DICOM Query Source
ccSMTP Destination
cdaDestination
cert_fileAS2 Destination, AS2 Partner, AS2 Source, Direct Address
channelDestination, Shadow
check_everyContract Ref
cityECR Facility
claim_us_coreFHIR Destination
classXDS Destination
client_ca_fileDirect XDR
client_idEmail O Auth, FHIR Auth, MQTT Connection
client_secretEmail O Auth, FHIR Auth
codeXDS Code
columnDatabase Source
columnsDelimited
commentDelimited
commit_after_deliveryKafka Source
compareShadow
compressAS2 Destination
compressionKafka Destination
configELR Destination
containerAzure Blob Access
content_typeAMQP Destination, AS2 Destination, Azure Blob Destination, Broker Destination, GCS Destination, HTTP Destination, S3 Destination, XDS Destination
contractChannel
credentials_fileGCP Access
dataTypeChannel
data_bitsSerial Source
databaseDestination, Source
decrypt_withPGP Receive
default_identifier_systemFHIR Destination
delimitedChannel
delimiterDelimited, TCP Framing
deployScripts
descriptionChannel
destinationBroker Destination, Broker Source
destinationsChannel
dicomChannel, Destination, Source
dicom_querySource
dicomwebDestination, Source
dirCDA Destination, Destination, Document Destination, FTP Destination, File Poll, SFTP Destination, SFTP Source
directDestination, Source
direct_fromXDS Destination
direct_toXDS Destination
displayXDS Code
dnsDirect Destination
documentDestination
domainSMB Source
driverDatabase Destination, Database Source
dsnDatabase Destination, Database Source
duplicate_windowAS2 Source
ecrFHIR Destination
edifactChannel
elementSOAP Source
elrDestination
emailSource
emit_on_first_pollDICOM Query Source
enabledChannel, Destination, Queue Config
encrypt_toPGP Send
endpointAWS Access, Azure Blob Access, GCP Access, S3 Destination
envelopeEDIFACT Options, X12 Options
error_dirFile Poll, SFTP Source
error_folderDirect IMAP, Email Source
error_prefixAzure Blob Source, GCS Source, S3 Source
expect_replyTCP Dest
extractAttachments
facilityAck, ECR Destination
facility_idSOAP Destination
facility_typeXDS Destination
fail_on_bodyHTTP Destination
fault_is_successSOAP Destination
fault_on_nakSOAP Source
fhirDestination
fileContract Ref, Source
file_nameAS2 Destination, Destination, Document Destination, FTP Destination, PGP Send, SFTP Destination
file_rootsScripts
filterChannel, Delimited, Destination, HL7v3 Options, Scripts
flow_controlSerial Source
follow_redirectsHTTP Destination
follow_symlinksFile Source
font_sizeDocument Destination
formatDocument Destination, S3 Destination
framedAzure Blob Source, FTP Destination, File Poll, GCS Source, S3 Destination, S3 Source, SFTP Destination, SFTP Source
framingTCP Framing
fromAS2 Destination, SMTP Destination
from_beginningKafka Source
ftpDestination, Source
gcsDestination, Source
groupChannel, Kafka Source
group_bySNS Destination, SQS Destination
has_headerDelimited
headerSOAP Destination
headersBroker Destination, CDA Destination, DICO Mweb Destination, FHIR Destination, HTTP Destination, Kafka Destination, SOAP Destination, XDS Destination
heartbeatBroker Source
hl7v3Channel
hostBroker Destination, Broker Source, Direct IMAP, Email Source, FTP Destination, FTP Source, SFTP Destination, SFTP Source, SMB Source, SMTP Destination
hostnameAMQP Connection
httpDestination, Source
ibm_mqDestination, Source
idAS2 Partner, AS2 Source
id_typeMPI Destination
identifier_systemsCDA Destination, FHIR Destination
idle_timeoutDICOM Source, Source, TCP Source
ignoreShadow
imapDirect Source
includeScripts
include_trigger_eventAck
insecure_skip_host_key_checkSFTP Destination, SFTP Source
insecure_skip_verifyFTP Destination, FTP Source, SMTP Destination, Web DAV Source
intervalDICOM Query Source
javascriptDestination, Source
kafkaDestination, Source
keep_aliveTCP Dest
keep_blank_linesDelimited
keep_delimiterTCP Framing
keyAzure Blob Access, Kafka Destination, S3 Destination
key_columnDatabase Source
key_fileAS2 Destination, AS2 Source, Direct Address, SFTP Destination, SFTP Source
key_passphraseSFTP Destination, SFTP Source
known_hosts_fileSFTP Destination, SFTP Source
landscapeDocument Destination
languageScripts
ldapDirect Destination
length_bytesTCP Framing
length_includes_headerTCP Framing
levelDICOM Query Source
limitDICOM Query Source
lineECR Facility
listenAS2 Source, DICO Mweb Source, DICOM Source, Direct Source, Direct XDR, HTTP Source, SOAP Source, Source, TCP Source
loginBroker Destination, Broker Source
mailboxDirect IMAP, Email Source
matchDICOM Query Source
max_attemptsDatabase Source, Queue Config
max_backoffQueue Config, Retry
max_bytesDirect Source
max_connectionsSource, TCP Source
max_depthQueue Config
max_differencesShadow
max_file_sizeFile Poll, SFTP Source
max_message_sizeAS2 Source, Email Source, HTTP Source, Kafka Source, SOAP Source, Serial Source, Source, TCP Dest, TCP Source
max_messagesPub Sub Source, SQS Source
max_object_bytesDICO Mweb Source, DICOM Source
max_object_sizeAzure Blob Source, GCS Source, S3 Source
max_open_connsDatabase Destination
mechanismKafka SASL
methodHTTP Destination
move_toAzure Blob Source, Direct IMAP, Email Source, File Poll, GCS Source, S3 Source, SFTP Source
mpiDestination
mqttDestination, Source
nameChannel, Channel Destination, Destination, ECR Facility
ncpdpChannel
no_compressPGP Send
no_mergeMPI Destination
non_persistentIBMMQ Destination
npiECR Facility
oauthEmail Source
objectGCS Destination
on_no_documentCDA Destination
order_byPub Sub Destination
overContract Ref
overlapDICOM Query Source
paramsDatabase Destination
paritySerial Source
partner_cert_fileAS2 Destination
partnersAS2 Source
pasDestination
pass_plainPGP Receive
passcodeBroker Destination, Broker Source
passphrasePGP Receive, PGP Send
passwordAMQP Connection, AS2 Destination, DICO Mweb Destination, DICO Mweb Source, Direct Destination, Direct IMAP, Direct Source, Email Source, FTP Destination, FTP Source, HTTP Destination, IBMMQ Connection, Kafka SASL, MQTT Connection, SFTP Destination, SFTP Source, SMB Source, SMTP Destination, SOAP Destination, SOAP Source, Web DAV Source, XDS Destination
pathAS2 Source, DICO Mweb Source, HTTP Source, SOAP Source
path_styleS3 Destination, S3 Source
patient_domainXDS Destination
patient_rootDICOM Query Source
patternFile Poll, SFTP Source
payerPAS Destination
persistentBroker Destination
pgpDestination, Source
phoneECR Facility
poll_intervalAzure Blob Source, Database Source, Direct IMAP, Email Source, File Poll, GCS Source, IBMMQ Source, Java Script Source, S3 Source, SFTP Source
portDirect IMAP, Email Source, Serial Source
postal_codeECR Facility
postprocessorScripts
practice_settingXDS Destination
prefetchAMQP Source
prefixAzure Blob Source, GCS Source, S3 Source
preprocessorScripts
profileSOAP Destination, SOAP Source
projectGCP Access
protocolEmail Source
providerEmail O Auth
pubsubDestination, Source
purposeTEFCA Destination
qosMQTT Connection
queryDatabase Source
query_timeoutDatabase Source
queueDestination, IBMMQ Connection
queue_managerIBMMQ Connection
queue_urlSQS Destination, SQS Source
quiet_afterSerial Source
quoteDelimited
rawFile Poll
rctcECR Destination, ELR Destination
read_timeoutHTTP Source, SOAP Source
reassembleAttachments
receiptAS2 Destination
receipt_urlAS2 Destination
recipient_certs_dirDirect Destination
reconnectAMQP Source, Broker Source, MQTT Source, Pub Sub Source
record_lengthTCP Framing
refresh_tokenEmail O Auth
regionAWS Access, FHIR Auth, S3 Destination
reject_on_warningFHIR Destination
relaxedDelimited
reopen_afterSerial Source
replySerial Source, TCP Source
reply_textSerial Source, TCP Source
request_mdnDirect Destination
require_agreementCDA Destination
require_signaturePGP Receive
response_elementSOAP Source
response_namespaceSOAP Source
response_transformerDestination
results_toPAS Destination, TEFCA Destination
retainMQTT Destination
retain_hoursDestination, Queue Config
retryDestination
returnDICOM Query Source
rootFTP Source, File Source, SMB Source
s3Destination, Source
sampleShadow
sasAzure Blob Access
saslKafka Destination, Kafka Source
schemeXDS Code
scopeEmail O Auth, FHIR Auth
scriptChannel, Java Script Destination, Java Script Source
scriptsChannel
secret_access_keyAWS Access, FHIR Auth, S3 Destination
securityDirect IMAP, Email Source, FTP Destination, FTP Source
selectorBroker Source
sender_deviceHL7v3 Options
sender_oidHL7v3 Options
serialSource
server_side_encryptionS3 Destination
session_timeoutKafka Source
session_tokenAWS Access, FHIR Auth, S3 Destination
sftpDestination, Source
shadowChannel
shareSMB Source
sign_withPGP Send
smbSource
smtpDestination
smtp_hostDirect Destination, Direct Source
snsDestination
soapDestination, Source
sop_classesDICOM Source
sort_byFile Poll
sourceChannel, ECR Destination
source_idXDS Destination
splitDelimited, EDIFACT Options, X12 Options
sqsDestination, Source
ssn_systemMPI Destination
stable_forFile Poll, SFTP Source
start_blockTCP Framing
starttlsSMTP Destination
stateECR Facility
statementDatabase Destination
stop_bitsSerial Source
storage_classGCS Destination, S3 Destination
subjectAS2 Destination, Direct Destination, SMTP Destination, SNS Destination
subscriptionPub Sub Source
subscription_idBroker Source
success_on_undefinedJava Script Destination
success_statusHTTP Destination
suffixAzure Blob Source, GCS Source, S3 Source
tablesChannel
takeEmail Source
tcpDestination, Source
tefcaDestination
temp_suffixDestination, Document Destination, FTP Destination, SFTP Destination
templateDatabase Source, Document Destination
tenantEmail O Auth
tenant_idFHIR Auth
textDirect Destination
tierAzure Blob Destination
timeoutAMQP Connection, Broker Destination, Broker Source, DICO Mweb Destination, DICOM Destination, DICOM Query Source, Database Destination, Destination, Direct Destination, Document Destination, FTP Destination, FTP Source, IBMMQ Connection, Java Script Destination, Java Script Source, Kafka Destination, Kafka Source, MQTT Connection, S3 Destination, SFTP Destination, SFTP Source, SMB Source, SMTP Destination, SOAP Destination, Scripts, Shadow, TCP Dest, Web DAV Source, XDS Destination
timezoneFHIR Destination
titleDocument Destination
tlsAMQP Connection, AS2 Destination, AS2 Source, Broker Destination, Broker Source, DICO Mweb Destination, DICO Mweb Source, DICOM Destination, DICOM Query Source, DICOM Source, Destination, Direct IMAP, Email Source, HTTP Destination, HTTP Source, IBMMQ Connection, Kafka Destination, Kafka Source, MQTT Connection, SOAP Destination, SOAP Source, Source, TCP Dest, TCP Source, XDS Destination
tls_certDirect Source, Direct XDR
tls_keyDirect Source, Direct XDR
toAS2 Destination, Direct Destination, SMTP Destination
tokenDICO Mweb Destination, DICO Mweb Source, HTTP Source, SOAP Source, XDS Destination
token_urlEmail O Auth, FHIR Auth
topicKafka Destination, MQTT Destination, MQTT Source, Pub Sub Destination
topic_arnSNS Destination
topicsKafka Source
transfer_syntaxesDICOM Destination, DICOM Source
transformationsChannel, DICOM Options, Delimited, HL7v3 Options, NCPDP Options, Script Options, X12 Options
transformerScripts
trim_paddingTCP Framing
trim_spaceDelimited
typeDestination, FHIR Auth, Source
undeployScripts
unencryptedAS2 Destination
unsignedAS2 Destination
unsigned_receiptAS2 Destination
urlAS2 Destination, CDA Destination, DICO Mweb Destination, FHIR Destination, HTTP Destination, IBMMQ Connection, SOAP Destination, Web DAV Source, XDS Destination
userFTP Destination, FTP Source, SFTP Destination, SFTP Source, SMB Source, Web DAV Source
usernameAMQP Connection, AS2 Destination, DICO Mweb Destination, DICO Mweb Source, Direct Destination, Direct IMAP, Direct Source, Email Source, HTTP Destination, IBMMQ Connection, Kafka SASL, MQTT Connection, SMTP Destination, SOAP Destination, SOAP Source, XDS Destination
validate_before_sendFHIR Destination
verify_withPGP Receive
versionCDA Destination, FHIR Destination, SOAP Destination, SOAP Source
visibility_timeoutSQS Source
wait_secondsSQS Source
warnings_are_errorsSOAP Destination
webdavSource
whenAck
windowDICOM Query Source
writeCDA Destination
wsdlSOAP Source
x12Channel
x12_asDestination
xdmDirect Destination
xdm_source_idDirect Destination
xdrDirect Source
xdsDestination