Skip to content

Instantly share code, notes, and snippets.

@vlindhol
Last active February 20, 2018 15:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vlindhol/5db24675c5c6f45b6df4f7ef489d6bc0 to your computer and use it in GitHub Desktop.
Save vlindhol/5db24675c5c6f45b6df4f7ef489d6bc0 to your computer and use it in GitHub Desktop.
Villen ehdotus templaattien rakenteesta. Pohjana Erkan ehdotus.
<!-- Tämä PlanDefinition on templaatin "juuri". Se sisältää koko templaatin kaikki mahdollisuudet, eli tässä on listattu kaikki templaattifragmentit ja niiden väliset riippuvuudet, riippumatta siitä minkä "polun" yksittäinen potilas tekee. -->
<PlanDefinition xmlns="http://hl7.org/fhir" id="T0">
<url value="https://duodecim.fi/fhir/templates/blood-pressure">
<title value="Verenpainepotilaan vuosiseuranta">
<!-- muut metadatat skipattu tässä esimerkissä -->
<action id="loop-yearly-check">
<title value="Laita pyörimään ikuinen looppi joka kerran vuodessa laukaisee fragmentin T2"/>
<definition>
<!-- Tässä viitataan PlanDefinitioniin. Se sijaitsee omassa paikassaan, mutta tässä esimerkissä se on listattu tässä samassa tiedostossa, alempana. -->
<reference value="https://duodecim.fi/fhir/templates/blood-pressure-year-loop"/>
</definition>
</action>
<action id="launch-yearly-check">
<title value="Laukaise kerran vuodessa instanssin templaattifragmentista T1, joka kestää maksimissaan kuukauden ja jolloin halutaan että potilas mittaa verenpaineensa 8 kertaa."/>
<relatedAction>
<actionId value="loop-yearly-check"/>
<relationship value="concurrent"/>
</relatedAction>
<definition>
<!-- Tässä viitataan PlanDefinitioniin. Se sijaitsee omassa paikassaan, mutta tässä esimerkissä se on listattu tässä samassa tiedostossa, alempana. -->
<reference value="https://duodecim.fi/fhir/templates/blood-pressure-yearly-check"/>
</definition>
</action>
<action id="order-some-lab">
<title value="Oletettavasti potilaalle ehkä joudutaan tilaamaan joku labra jos verenpaine on huono."/>
<relatedAction>
<actionId value="launch-yearly-check"/>
<relationship value="after-end"/>
</relatedAction>
<definition>
<!-- Tässäkin viitataan PlanDefinitioniin, en kirjoittanut sitä auki tänne mutta se sisältää ainoastaan yhden actionin, joka taas viittaa ActivityDefinitioniin joka tilaa jonkun labran. Huomioitavaa että tämä action on asetettu tapahtuvan edellisen actionin jälkeen, mutta tämä on vain teoreettinen mahdollisuus: voi olla että potilas ei tarvitse labraa, jolloin päätöksentuki ei ohjaa häntä tähän actioniin. -->
<reference value="https://duodecim.fi/fhir/templates/blood-pressure-lab-order"/>
</definition>
</action>
</PlanDefinition>
<PlanDefinition xlmns="http://hl7.org/fhir" id="T1">
<url value="https://duodecim.fi/fhir/templates/blood-pressure-year-loop"/>
<title value="Fragmentti jonka ainoa tehtävä on loopata ikuisesti ja kerran vuodessa laukaista fragmenttia T2"/>
<action>
<timingTiming>
<!-- Tämä action jatkuu "ikuisesti", eli kunnes esim. joku ammattilainen manuaalisesti sulkee sen. -->
<repeat>
<frequency value="1"/>
<period value="12"/>
<periodUnit value="mo"/>
</repeat>
</timingTiming>
<definition>
<reference value="https://duodecim.fi/fhir/templates/blood-pressure-yearly-check"/>
</definition>
</action>
</PlanDefinition>
<!-- Yllä mainittu https://duodecim.fi/fhir/templates/blood-pressure-yearly-check -->
<PlanDefinition xmlns="http://hl7.org/fhir" id="T2">
<url value="https://duodecim.fi/fhir/templates/blood-pressure-yearly-check"/>
<title value="Vuosittainen sarja verenpainemittauksia, lähetetään päätöksentukeen.">
<!-- muut metatiedot taas skipattu -->
<action id="call-ebmeds-about-bp">
<title value="On vuosikontrollin aika. Yritä päivittäin kutsua päätöksentukea halutuilla arvoilla, tai jos järjestelmä havaitsee että uusi mittaustulos on saapunut."/>
<!-- Tässä viestimme, että tämä action on erikoinen, sillä se on päätöksentukikutsu. -->
<code>
<coding>
<code>call-cds</code>
<system>jotain</system>
</coding>
</code>
<!-- Tämä action laukeaa kerran päivässä, eli päätöksentukea yritetään kutsua kerran päivässä -->
<triggerDefinition>
<type value="periodic"/>
<eventTimingTiming>
<repeat>
<frequency value="1"/>
<period value="1"/>
<periodUnit value="d"/>
<timeOfDay value="07:00"/>
</repeat>
</eventTimingTiming>
</triggerDefinition>
<!-- Spekulatiivisena esimerkkinä laitoin myös että päätöksentukea kutsutaan heti kun kutsuva järjestelmä huomaa että mittaus LOINC-koodilla 123 on lisätty järjestelmään (tämä on keksitty verenpainekoodi). En tiedä onko tämä välttämättä käytännöllistä ODA2:ssa, mutta jos toimii niin tältä se näyttää. -->
<triggerDefinition>
<type value="data-added"/>
<eventData>
<type value="Observation"/>
<codeFilter>
<path value="code"/>
<valueCodeableConcept>
<coding>
<code value="123"/>
<system value="http://loinc.org"/>
</coding>
</valueCodeableConcept>
</codeFilter>
</eventData>
</triggerDefinition>
<!-- Koska tälle actionille on määritelty "call-cds" koodi yllä ja sillä on duration määritelty alla, se tarkoittaa että se "vanhenee" 30 päivän jälkeen. Tämä on virhetila johon ammattilainen täytyy ottaa kantaa, esim katkaista templaatti tai manuaalisesti valita seuraava fragmentti templaatista. -->
<timingDuration>
<value value="30"/>
<unit value="days"/>
<system value="http://unitsofmeasure.org"/>
<code value="d"/>
</timingDuration>
<!-- Tämä input-elementti kertoo mitä tietoja päätöksentuki tarvitsee. Tämä ilmaisutapa ei ehkä taivu kaikkiin tilanteisiin, silloin pitää erikseen sopia ODA2:n kanssa-->
<input>
<type value="Observation"/>
<codeFilter>
<path value="code"/>
<valueCodeableConcept>
<coding>
<code value="123"/>
<system value="http://loinc.org"/>
</coding>
</valueCodeableConcept>
</codeFilter>
</input>
<definition>
<!-- Tässä viittaus ActivityDefinitioniin, eli nyt oikeasti tehdään jotain. ActivityDefinitionin määritelmä alla. -->
<reference value="https://duodecim.fi/fhir/templates/blood-pressure-action-call-cds">
</definition>
</action>
</PlanDefinition>
<!-- Alla ActivityDefinition joka on tarkempi kuvaus päätöksentuen kutsusta. Käytetty yllä. Päätöksentuki palauttaa muistutteita jotka näytetään potilaalle/ammattilaiselle. Se voi myös palauttaa ActivityDefinitionin joka kehottaa järjestelmää siirtymään eteenpäin seuraavaan templaattifragmenttiin eli PlanDefinitioniin. Tämä tarkoittaa että se PlanDefinition joka sisältää actionin (action on tässä "call-ebmeds-about-bp" ja PlanDefinition "T1") loppuu, ja kaikki sen sisältämät actionit loppuvat myös.
Erikoistapaukset päätöksentuen "templaattipalautuksille":
1. Ei palauta mitään = mitään ei tapahdu, action jatkaa looppaamista.
2. Palauttaa jonkun "end"-komennon = Sama kuin jos siirryttäisiin seuraavaan fragmenttiin, paitsi että seuraavaa fragmenttia ei ole.
-->
<ActivityDefinition>
<!-- Päätöksentukea kuvataan "logiikkakirjastona", mutta itse kutsumistapa täytyy sopia ODA2:n kanssa, FHIR ei anna sitä meille suoraan. -->
<contained>
<Library>
<url value="https://oda.ebmedscloud.org"/>
<type>
<coding>
<code>logic-library</code>
<system>http://hl7.org/fhir/ValueSet/library-type</system>
</coding>
</type>
</Library>
</contained>
<url value="https://duodecim.fi/fhir/templates/blood-pressure-action-call-cds"/>
<!-- Koodiksi annetaan tämän ActDefin sisältävä PlanDefinitionin ID. Tämä ID laitetaan myös mukaan itse päätöksentuen kutsuun (sen formaatti ei ole täällä kuvattu). -->
<code value="https://duodecim.fi/fhir/templates/blood-pressure-yearly-check"/>
<library>
<reference value="oda1"/>
<display value="EBMeDS 2.0 Clinical decision support (ODA1)"/>
</library>
</ActivityDefinition>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment