| Version 8 (modified by henk, 15 years ago) (diff) |
|---|
Decursus Inrichten
Met de decursusmodule kunnen aantekeningen worden gemaakt over het ziekteverloop van een patient. De aantekeningen kunnen worden ingedeeld in verschillende thema's, elk thema kan zijn eigen invoervelden definiëren.
Sommige thema's presenteren een sidebar met briefteksten of testscores. De briefteksten kunnen kunnen worden gebruikt door erop te klikken. Ze komen automatisch in het goede, gekoppelde invoerveld terecht. De testscores zijn briefteksten met invoervelden. De scores kunnen worden ingevuld en vervolgens kan de bijbehorende brieftekst worden ingevoegd in een invoerveld.
Dit hoofdstuk beschrijft het naar eigen wensen inrichten van de decursusmodule.
Thema's
Decursus thema's kunnen worden toegevoegd via codetabellen --> Module kern.s080_decursus --> Thema. Nieuw ingevoerde thema's kunnen gelijk gebruikt worden. De invoervelden die standaard horen bij een nieuw thema zijn:
- Datum
- Onderzoeker
- Notities
- Documenten
Additionele velden kunnen aan een thema worden toegevoegd door middel van een stukje code in de adaptatie. Zie verder het kopje "Invoervelden".
Briefteksten
Briefteksten zijn standaardteksten die horen bij een thema. Ze worden in OpenAC gepresenteerd in een zogenaamde sidebar. Van daaruit kunnen de briefteksten worden ingevoegd in een bijbehorend invoerveld. Briefteksten kunnen worden ingevoerd via codetabellen --> Module kern.s080_decursus --> Brief-tekstfragment. Het invoerscherm kent de volgende velden:
- Brief-tekstfragment. Dit is de code die de brieftekst identificeert. In sidebars worden briefteksten gegroepeerd op code, met een visuele scheiding tussen de groepen. Dus alle codes die beginnen met een S worden bijelkaar gezet, codes beginnend met een T ook, etc.
- Sortering: hier kan een volgnummer worden opgegeven. Briefteksten worden per groep gesorteerd op dit volgnummer.
- Thema's: een brieftekst kan worden gekoppeld aan één of meerdere thema's. Briefteksten worden alleen gepresenteerd in sidebars van gekoppelde thema's.
- Doelveld: als op een brieftekst wordt geklikt, dan wordt de tekst ingevoegd in het invoerveld dat hier is opgegeven. Doelvelden kunnen worden aangemaakt via codetabellen --> Module kern.s080_decursus --> Brief-doelveld.
- Scoreveld: van belang voor testscores, zie het gelijknamige kopje. Voor standaard briefteksten op "nee" laten staan.
- Tekst: De eigenlijke brieftekst. De variabelen {patient} en {leeftijd} zijn beschikbaar en worden tijdens het invoegen van de tekst vervangen door de naam en leeftijd van de patient.
Testscores
Testscores zijn briefteksten die in de sidebar zijn voorzien van een invoerveld om een testscore in te voeren. Ze kunnen in hetzelfde scherm worden ingevoerd als briefteksten, maar in tegenstelling tot briefteksten moet bij testscores de optie Scoreveld op "ja" worden gezet. In de tekst van testscores kunnen buiten {patient} en {leeftijd} ook de variabelen {test}, {beoordeling} en {score} worden gebruikt. Deze worden bij het invoegen van de tekst vervangen door de overeenkomstige waarden.
Een belangrijke aanvullende voorwaarde voor het correct functioneren van de testscorefunctionaliteit, is dat de code van de testscore exact gelijk moet zijn aan de decursus veldnaam waar de score in moet worden opgeslagen.
Invoervelden
Zoals onder het kopje "Thema's" staat beschreven, is het aantal invoervelden bij een nieuw thema beperkt. Alle decursus invoervelden kunnen in principe bij elk thema worden gebruikt, eventueel voorzien van een ander label dan het default label. Om de standaardfunctionaliteit van de decursus module te wijzigen of uit te breiden, moet een stukje code worden geschreven in de eigen adaptatie. Het AMC is één van de AC's met een eigen decursus.py in de adaptatie.
Het zichtbaar maken of aanpassen van velden bij een thema, gebeurt in twee stappen. Allereerst moet een defaults-functie worden geschreven die de standaard defaults-functie van de decursusmodule uitbreidt met nieuwe functionaliteit. Onderstaand een voorbeeld uit de adaptatie van het AMC:
def decursus_defaults(
cursusentry,
**kwargs
) :
"""
Decursus: regel zichtbaarheid van de velden.
"""
layouts = cursusentry.meta.layouts
layouts["team"] = "-"
layouts["bespreken"] = "-"
layouts["aanleiding"] = "-"
layouts["teamvraag"] = "-"
layouts["teambesluit"] = "-"
if cursusentry.thema.startswith("pb-aanm") or \
cursusentry.thema.startswith("pb-team"):
layouts["actie_administratie"] = "-"
layouts["status_naar"] = "-"
layouts["notities"] = "-"
layouts["advies_afspraak"] = "-"
layouts["team"] = "02:08"
layouts["bespreken"] = "02:02"
layouts["aanleiding"] = "02:08"
layouts["teamvraag"] = "2:8x8"
if cursusentry.thema.startswith("pb-team"):
layouts["teambesluit"] = "2:8x8"
if cursusentry.thema.startswith("aantek"):
layouts["aanleiding"] = "02:08"
if cursusentry.thema.startswith("consult"):
layouts["anamnese"] = "2:8x3"
if cursusentry.gehoor or cursusentry.spraaktaal:
layouts["gehoor"] = "2:8x3"
layouts["spraaktaal"] = "2:8x3"
else:
layouts["onderzoek"] = "2:8x3"
layouts["conclusie"] = "2:8x3"
layouts["afsluiting"] = "2:8x3"
layouts["notities"] = "2:8x2"
cursusentry.meta.veldlabels["notities"] = "Notities OpenAC"
In bovenstaand voorbeeld worden eerst velden verborgen door de layout van het veld in te stellen op een streepje. Vervolgens worden afhankelijk van het thema velden zichtbaar gemaakt. Ook laat dit voorbeeld zien dat bestaande velden een nieuw label kunnen krijgen. Het veld "notities" krijgt het label "Notities OpenAC".
Na het coderen van de defaults-functie moet deze worden geregistreerd bij het systeem, waardoor de functie door OpenAC zal worden aangeroepen.
logica.callbacks.registreer(
"tabel.cursusentry.defaults", decursus.decursus_defaults, "z090.adaptatie")
Sidebars
Ook voor tonen van een sidebar bij een thema is wat code nodig in de eigen adaptatie. In dit geval gaat het om een opbouwfunctie die functionaliteit toevoegt aan de standaard decursus opbouwfunctie, en een functie die de sidebar implementeert. De opbouwfunctie:
def dossierscherm_opbouw(
scherm,
**kwargs
) :
"""
Zet een box met knoppen rechts
"""
patient = scherm.entry
# oude_dossierscherm_opbouw wordt gezet in __init__.py
#
oude_dossierscherm_opbouw(scherm, **kwargs)
if scherm.entry:
for behandeling in scherm.entry.behandelingen.values():
behandelpad = "entry/behandelingen(%s)" % behandeling.key
for cursusentry in behandeling.cursusentries.values():
cursuspad = "%s/cursusentries(%s)" % (behandelpad, cursusentry.key)
cursusbox = scherm.boxen.get(cursuspad)
sidebarpad = "%s-sidebar" % cursuspad
if not cursusbox \
or scherm.box_cursor not in [cursuspad, sidebarpad]: continue
if not cursusentry.thema.startswith("consult"): continue
sidebar = scherm.box(
sidebarpad,
kolom_op_scherm = 20,
breedte_in_vakjes = 6,
achtergrondkleur = "#d0c8d8")
scherm.boxen._keys = reduce(lambda list1, list2: list1 + list2,
[[key] + (key == cursuspad and ["%s-sidebar" % cursuspad] or [])
for key in scherm.boxen._keys
if not key.endswith("-sidebar")],
[])
cursusbox.heeft_subboxen_rechts = True
sidebar.is_subbox = True
sidebar.label(6, "<b>Brieftekst</b>")
if cursusentry.thema.startswith("consult"):
sidebar_consult(scherm, patient, cursusentry, sidebar, cursusentry.thema)
Bovenstaande code voegt een sidebar toe bij thema's waarvan de code begint met "consult".
Implementatie van de sidebar:
def sidebar_consult(
scherm,
patient,
cursusentry,
sidebar,
thema
) :
"""
Vul de sidebar met knoppen voor consults
"""
gebruikte_keys = s080_decursus.thema_standaardzinnen(thema)
vorig_kenmerk = ""
for fragmentcode in gebruikte_keys:
fragment = logica.datamodel.tabellen["brief_tekstfragment"].coderijen[fragmentcode]
label = fragment.code
doelveld = fragment.doelveld
tekst = fragment.tekst.replace("{patient}", patienttekst(patient))
kenmerk_match = s080_decursus.exp_kenmerk.match(label)
if kenmerk_match: kenmerk = kenmerk_match.group(1)
else: kenmerk = None
if kenmerk and vorig_kenmerk and kenmerk != vorig_kenmerk:
sidebar.separator()
else:
sidebar.newline()
vorig_kenmerk = kenmerk
on_select = {
"actie": "invoegen",
"entry": cursusentry,
"doelveld": doelveld,
"tekst": tekst}
if len(tekst) > 140: tekst = tekst[:138] + "..."
sidebar.label(
1, "<b>%s</b>" % label,
celhoogte_in_units = logica.opbouw.compacte_regelhoogte)
sidebar.label(
15, "<i>%s</i>" % tekst,
on_select = on_select,
celhoogte_in_units = logica.opbouw.compacte_regelhoogte)
Ook hier is code nodig die ervoor zorgt dat de opbouwfunctie wordt uitgevoerd door het systeem:
(decursus.oude_dossierscherm_opbouw, decursus.oude_dossierscherm_dispatch) = \
logica.opbouw.herdefinieer_scherm(
"tabelscherm_patient",
nieuwe_opbouwfunctie = decursus.dossierscherm_opbouw,
nieuwe_dispatchfunctie = decursus.dossierscherm_dispatch)
FENAC ICT
Dit hoofdstuk laat zien dat het mogelijk is de decursus functionaliteit volledig naar eigen wensen in te richten. Natuurlijk kan FENAC ICT helpen met advies of implementatie.
Attachments (5)
- decursusthema1.png (18.4 KB) - added by adriaan 13 years ago.
- decursusthema2.png (13.4 KB) - added by adriaan 13 years ago.
- decursusthema3.png (10.5 KB) - added by adriaan 13 years ago.
- codetabellen_decursus.png (4.2 KB) - added by henk 8 years ago.
- decursusthemaveld.png (10.2 KB) - added by henk 8 years ago.
Download all attachments as: .zip