Aalborg Universitet Institut for Sundhedsteknologi TITEL: Vægtning af penaltyfunktioner til et intelligent ventilatorsystem ved anvendelse af utilityteori. TEMA: Design af sundhedsteknologiske systemer PROJEKTPERIODE: 6. semester 2/2-2004 - 27/05-2004 PROJEKTGRUPPE: 691 GRUPPEMEDLEMMER: Mads Hylleberg Nlandu Kamavuako Line Michelsen Mogens Nielsen Brynjar Vatnsdal Pálsson Signe Stougård Pedersen VEJLEDERE: Stephen Rees Nico Rijkhoff ANTAL KOPIER: 10 RAPPORT SIDEANTAL: 144 APPENDIKS SIDEANTAL: 40 SAMLET SIDEANTAL: 184 SYNOPSIS Når en kliniker skal indstille en respirator for en kritisk syg patient, skal klinikeren vægte forskellige kliniske surrogatmål som indikatorer for det kliniske effektmål. Denne tradeoffproblematik kan beskrives teoretisk ved hjælp af utilityteori. Der er taget udgangspunkt i en intelligent respirator INVENT, der indeholder én vægtning af fem kliniske surrogatmål, der er beskrevet som penaltyfunktioner. I projektet er der udarbejdet et softwaresystem Dr. Know, der skal producere forskellige vægtninger for penaltyfunktionerne. Dette gøres ved at indsamle og formalisere klinikeres subjektive holdninger til de mest rationelle respiratorindstillinger. Der er med udgangspunkt i objektorienteret analyse og design og i samarbejde med rekvirenten og klinikere implementeret et vidensindsamlingssystem Dr. Know. Systemet kan formalisere en præferencestruktur for penaltyfunktionerne for tre udvalgte patientgrupper: Hjernetraumepatienter, post-operative hjertepatienter og intensivpatienter. Det konstruerede system Dr. Know vurderes til at kunne producere vægtninger for de forskellige patientgrupper, og det vurderes således, at disse vægtninger kan anvendes til at kalibrere INVENT. Systemets beregning af vægtningskonstanterne for penaltyfunktionerne tager lang tid, hvilket ses nødvendigt at optimere i en senere version af systemet. Forord Denne rapport er det skriftlige resultat af et 6. semesters projekt på Civilingeniøruddannelsen Sundhedsteknologi på Aalborg Universitet foråret 2004. Rapporten henvender sig til medstuderende på AAU og de tilknyttede vejledere samt fagpersoner, der beskæftiger sig med udvikling af INVENT. Temaet for dette semester er: Design af Sundhedsteknologiske systemer. Dette er specielt med henblik på en konkret sundhedsteknologisk problemstilling og de biologiske og brugermæssige grænseflader. Med udgangspunkt i dette tema er der arbejdet med at konstruere et vidensindsamlingssystem til anvendelse i et allerede konstrueret intelligent respiratorsystem. I forbindelse med projektet vil projektgruppen rette en tak til Dr. Med Charlotte Allerød for hjælp til konstruktion af patientcases, en tak til Dr. Tech Steen Andreassen for hjælp til at stille brugermæssige krav til det konstruerede system, en tak til Dr. Med. Per Thorgaard for at give brugermæssige krav til det konstruerede system samt for at give projektgruppen en forståelse for anvendelsen af respiratorer på intensivafdelingen på Aalborg Sygehus, og en tak til Dr. Med Søren Kjærgaard for at teste det konstruerede system. Aalborg Universitet d. 27. maj 2004. ———————————– Mads Hylleberg ———————————– Nlandu Kamavuako ———————————– Line Michelsen ———————————– Mogens Nielsen ———————————– Brynjar Vatnsdal Pálsson ———————————– Signe Stougård Pedersen Læsevejledning Rapporten er opbygget således, at den første del af rapporten belyser problemområdet i projektet, mens anden del af rapporten udgør dokumentationen af det konstruerede system. Rapporten er inddelt i følgende områder: Problemanalyse, systemanalyse, systemdesign, implementering og test samt diskussion. Der vil desuden være et appendiks indeholdende uddybninger til rapporten samt et bilag indeholdende de foretagede interviews. I rapporten er kildehenvisningerne angivet [X], hvor X angiver nummeret på kilden i kildelisten. Ligninger er angivet i parentes (Y.Z), hvor Y henviser til kapitlet hvori ligningen er angivet, og Z betegner ligningens nummer. Kapitler i appendiks er nummereret med bogstaver, og kildehenvisninger hertil vil ligeledes indeholde bogstaver. Figurer og tabeller angives med numre uden parentes. Grunden til, at rapporten er omfattende med hensyn til dokumentationen af systemanalyse og -design, skyldes studieordningens krav til 6. semester på Sundhedsteknologi, hvor temaet er Design af sundhedsteknologiske systemer. Analysen og designet af det konstruerede system er foretaget efter objektorienteret analyse og design, hvor der i rapporten er anvendt UML-terminologi til dette, hvilket omfatter et stort antal figurer og tabeller, hvilket gør rapporten omfattende. Desuden har analysen, designet og implementeringen af det konstruerede system været en retrospektiv proces, således at f.eks. dele af dokumentationen af systemdesignet i rapporten er blevet redigeret efter implementeringen, da systemet undervejs har udviklet sig. Idet rapporten ikke nødvendigvis skal læses i kronologisk rækkefølge og på grund af rapportens omfang, vælges det at inddele læsere af rapporten i forskellige interesseområder, således læser ikke nødvendigvis bør læse hele rapporten: - For læseren der udelukkende er interesseret i systemanalyse og -design og ikke vægter den tilgrundliggende problembaggrund, anbefales det at springe problemanalysen over og gå direkte til systemanalysen i kapitel 3. - For den klinisk interesserede med interessere for fysiologisk modellering anbefales det at læse problemanalysen samt diskussion og appendiks A og B. Desuden kan kapitel 17 omhandlende konstruktion af patientcases læses. - For læseren der allerede er bekendt med utilityteori anbefales det at springe over afsnittet om utilityteori i kapitel 2. Der findes en projektcd som dokumentation og tillæg til rapporten. Denne cd indeholder følgende: En pdf-version af rapporten En brugermanual til det konstruerede system En eksekvérbar fil af det konstruerede system. Dokumentation af kildekoden i form af et javadoc. Javadoc er en del af JavaT M 2 SDK standarden og giver en oversigt over udviklede klasser i det konstruerede system. Javadoc genererer en html-kode som output, som indeholder information om klasserne. INDHOLD Indhold Del I - Problemanalyse 1 1 Indledning 1.1 Respiratorbehandling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.1 Tilpasning af respiratorindstillinger . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Surrogatmål . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3 4 5 2 Problemområde 2.1 Utilityteori . . . . . . . . . . . . . . . . . . 2.1.1 Multiattribut værdiproblem . . . . . 2.1.2 Formalisering af præferencestruktur 2.1.3 Utilityteori i praksis . . . . . . . . 2.2 INVENT . . . . . . . . . . . . . . . . . . . 2.2.1 Simulering . . . . . . . . . . . . . 2.2.2 Optimering . . . . . . . . . . . . . 2.2.3 Penaltyfunktioner . . . . . . . . . . 2.3 Vægtning af penaltyfunktioner . . . . . . . 2.3.1 Problemformulering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Del II - Systemanalyse 7 7 7 9 10 10 11 12 12 13 14 15 3 Behovsbeskrivelse og strategi 3.1 Behovsbeskrivelse . . . . . . . . . . . . . . . . . . . . . . 3.1.1 Afgrænsninger . . . . . . . . . . . . . . . . . . . 3.1.2 Patientcases . . . . . . . . . . . . . . . . . . . . . 3.1.3 Penaltyfunktioner og simulering af patientvariable 3.1.4 Input til systemet . . . . . . . . . . . . . . . . . . 3.1.5 Plot af fejl . . . . . . . . . . . . . . . . . . . . . . 3.2 Løsningsstrategi . . . . . . . . . . . . . . . . . . . . . . . 3.2.1 Kritérier . . . . . . . . . . . . . . . . . . . . . . . 3.2.2 Løsningstrin . . . . . . . . . . . . . . . . . . . . 3.2.3 Bland Altmann-plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 17 17 19 19 19 20 20 21 21 23 4 Usecases 4.1 Tekstuel beskrivelse af funktionalitetskrav 4.1.1 Detaljeret beskrivelse af Dr. Know 4.2 Definition af aktører . . . . . . . . . . . . 4.3 Definition af usecases . . . . . . . . . . . 4.4 Beskrivelse af de enkelte usecases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 25 26 27 27 28 . . . . . . . . . . v . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . INDHOLD 5 Deploymentdiagram 5.1 INVENT vs. Dr. Know . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Applikationsområde . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 31 31 6 Aktivitetsdiagrammer 6.1 Inddeling efter stereotyper . . 6.2 Fælles aktiviteter . . . . . . . 6.2.1 Vælg brugertype . . . 6.2.2 Vælg patientgruppe . . 6.2.3 Hjælp . . . . . . . . . 6.2.4 Afslut . . . . . . . . . 6.3 Klinikeraktiviteter . . . . . . . 6.3.1 Skift bruger . . . . . . 6.3.2 Vælg patient . . . . . 6.3.3 Simulér patientvariable 6.3.4 Godkend indstilling . . 6.4 Udvikleraktiviteter . . . . . . 6.4.1 Vælg kliniker . . . . . 6.4.2 Beregn lambda . . . . 6.4.3 Gem lambda . . . . . 6.4.4 Åbn gemt lambda . . . 6.5 Samlet funktionsoversigt . . . . . . . . . . . . . . . . . . . . 33 33 34 34 35 36 36 37 37 38 39 40 41 41 42 43 44 45 . . . . . 47 47 48 49 50 51 8 Klassediagram 8.1 Objektkandidater . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2 Definition af klasser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.3 Klassediagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 53 54 56 Del III - Systemdesign 59 9 Designkriterier 9.1 Vægtning af designkriterier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 61 10 Komponentarkitektur 10.1 Udvidelse af klassediagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2 Illustration af klynger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.3 Revideret klassediagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 65 68 68 11 GUI-klasser 11.1 LoginVindue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 KlinikerVindue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 71 72 7 Grafiske brugergrænseflader 7.1 Loginvindue . . . . . . . 7.2 Klinikervindue . . . . . 7.3 Udviklervindue . . . . . 7.4 Grafvindue . . . . . . . 7.5 Hjælpvindue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . INDHOLD 11.3 UdviklerVindue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.4 HjaelpVindue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.5 GrafFunktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Kontrol-klasser 12.1 PatientState . . . 12.2 InitialState . . . . 12.3 Settings . . . . . 12.4 ErrorData . . . . 12.5 Lambda . . . . . 12.6 LambdaPlusError 12.7 Penalties . . . . . 12.8 Kliniker . . . . . 73 73 74 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 75 76 76 76 77 78 78 78 13 Entity-klasser 13.1 Database . . . . . . . . . . . . 13.1.1 Overordnet struktur . . 13.1.2 Klinikerdata . . . . . . 13.1.3 Respiratorindstillinger 13.2 Database-klassen . . . . . . . 13.3 LambdaGem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 81 81 82 83 83 84 14 Procesarkitektur 14.1 Sekvensdiagrammer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.2 Klinikerfunktionaliteter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.3 Udviklerfunktionaliteter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 87 87 88 Del IV - Implementering og Test 91 15 Implementeringsstrategi 15.1 Programmeringssprog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.2 Databasesprog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.3 Programmeringsværktøj . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 93 93 94 16 Implementering versus design 16.1 Jar-filer . . . . . . . . . . 16.1.1 VisualNumerics . . 16.1.2 ChartDirector . . . 16.2 Implementerede klasser . . 16.2.1 Scattering . . . . . 16.2.2 DemoModule . . . 16.2.3 DatabaseSetup . . 16.3 Klasser fra INVENT . . . 16.3.1 Predictions . . . . 16.3.2 o2model . . . . . . 16.3.3 co2model . . . . . 16.3.4 IO2Constants . . . 16.3.5 Blood . . . . . . . 95 95 95 95 95 96 96 96 97 97 97 97 97 97 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . INDHOLD 17 Patientcases 17.1 Strategi for udarbejdelse af patientcases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17.2 Standardværdier for patientcases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 99 99 18 Dokumentation af Dr. Know 103 18.1 Screenshots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 19 Test 19.1 Typer af tests . . . . . . . . . . . . 19.2 Integrationstest: Test af usecases . . 19.2.1 Vælg brugertype . . . . . . 19.2.2 Vælg patientgruppe . . . . . 19.2.3 Hjælp . . . . . . . . . . . . 19.2.4 Metoder . . . . . . . . . . . 19.2.5 Afslut . . . . . . . . . . . . 19.2.6 Skift bruger . . . . . . . . . 19.2.7 Vælg patientcase . . . . . . 19.2.8 Simulér patientvariable . . . 19.2.9 Godkend indstilling . . . . . 19.2.10 Vælg kliniker . . . . . . . . 19.2.11 Beregn lambda . . . . . . . 19.2.12 Gem lambda . . . . . . . . 19.2.13 Åbn gemt lambda . . . . . . 19.3 Test af DatabaseSetup . . . . . . . . 19.4 Test af systemeffektivitet . . . . . . 19.4.1 Optimering af beregningstid 19.5 Systemtest . . . . . . . . . . . . . . 19.5.1 Brugertype: Kliniker . . . . 19.5.2 Brugertype: Udvikler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Del V - Diskussion 20 Diskussion 20.1 Vurdering af Dr. Know 20.1.1 Effektivitet . . 20.1.2 Testoutput . . . 20.2 Konklusion . . . . . . 107 107 108 108 109 109 110 110 111 112 113 113 114 115 116 117 118 119 119 120 120 120 123 . . . . . . . . . . . . . . . . . . . . . . . . 21 Perspektivering 21.1 Forbedring og optimering . . . . . 21.1.1 Tidligere login . . . . . . 21.1.2 Tilføjelse af patientgrupper 21.1.3 Gem grafdata . . . . . . . 21.1.4 Online database . . . . . . 21.2 Integrering med INVENT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 125 125 126 127 . . . . . . 129 129 129 130 130 130 131 INDHOLD Del VI - Appendiks 135 A Fysiologi i INVENT A.1 Respiratorindstillinger . . . A.2 Patientparametre . . . . . . A.3 Patientvariable . . . . . . . . A.4 Surrogatmål . . . . . . . . . A.4.1 Barotraume . . . . . A.4.2 Acidose/alkalose . . A.4.3 Atelektase . . . . . . A.4.4 Oxygentoxicitet . . . A.4.5 Dårlig Oxygenering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B Modellerne integreret i INVENT B.1 O2 -modellen . . . . . . . . . . . . . . . . B.1.1 Ligninger indeholdt i O2 -modellen B.2 CO2 -modellen . . . . . . . . . . . . . . . B.2.1 Interstitiel væske og væv . . . . . B.2.2 Blod . . . . . . . . . . . . . . . . B.3 Model af lungedynamikken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 137 137 138 139 139 139 140 140 140 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 141 141 144 145 145 145 C GUI-elementer samt underliggende funktioner C.1 LoginVindue . . . . . . . . . . . . . . . . C.1.1 GUI-elementer . . . . . . . . . . . C.2 KlinikerVindue . . . . . . . . . . . . . . . C.2.1 GUI-elementer . . . . . . . . . . . C.3 UdviklerVindue . . . . . . . . . . . . . . . C.3.1 GUI-elementer . . . . . . . . . . . C.4 HjælpVindue . . . . . . . . . . . . . . . . C.4.1 GUI-elementer . . . . . . . . . . . C.5 Liste over funktioner . . . . . . . . . . . . C.5.1 Loginvindue: level 1 funktioner . . C.5.2 Loginvindue: level 2 funktioner . . C.5.3 Klinikervindue: level 1 funktioner . C.5.4 Klinikervindue: level 2 funktioner . C.5.5 Udviklervindue: level 1 funktioner . C.5.6 Udviklervindue: level 2 funktioner . C.5.7 Hjælpvindue: level 1 funktioner . . C.5.8 Hjælpvindue: level 2 funktioner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 147 147 148 148 151 151 152 152 153 153 154 154 158 159 160 161 161 . . . . 163 163 164 167 168 D Attributter i GUI-klasser D.1 LoginVindue . . . . D.2 KlinikerVindue . . . D.3 UdviklerVindue . . . D.4 HjaelpVindue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . E Bilag 1: Interview med Per Thorgaard 171 F Bilag 2: Interview med Steen Andreassen 173 ix Del I Problemanalyse Formålet med denne del af rapporten er at introducere den problemstilling, der er blevet taget udgangspunkt i. Kapitel 1 er indledningen til projektet. Her præsenteres kort, hvad der ligger til grund for projektet. Kapitel 2 indeholder en videre analyse af problemstillingen. Her uddybes desuden den teori, som den videre analyse bygger videre på. Afslutningsvis vil der forefindes en problemformulering. 1 KAPITEL 1 Indledning I dette kapitel foreligger der en redegørelse for de grundlæggende principper og problemstillinger med hensyn til respiratorbehandling. Der bliver lagt særlig vægt på problematikken vedrørende respiratorbehandling af kritisk syge patienter. Formålet med kapitlet er, at give læseren et indblik i de forudsætninger klinikeren har for at kunne give en patient den mest rationelle respiratorbehandling. 1.1 Respiratorbehandling Respirationsinsufficiens er forårsaget af manglende evne til at ventilere alveolerne, hvilket er karakteriseret ved en forhøjet PaCO2 , eller manglende oxygeneringsevne, karakteriseret ved et lavt PaO2 . Behandlingen af manglende ventilationsevne er som oftest at øge patientens alveolære ventilation, enten ved at reversere den tilgrundliggende sygdom eller ved at benytte mekanisk ventilation. Behandling af manglende oxygeneringsevne bygger på gendannelse og vedligeholdelse af lungevolumen, og kritisk syge patienter med behov for hjælp til opretholdelse af respirationen placeres således i en respirator. Definitionen på en respirator beskriver denne som en maskine, der kan generere et kontrolleret flow af gas ind i en patients luftveje, hvorved gasudveksling i alveolerne gøres mulig. Gassen er en blanding af atmosfærisk luft og O2 , der modtages af respiratoren enten fra gasudtag indbygget i patientstuens vægge eller fra ophængte cylindre på patientstuen. Gastrykket i disse cylindre er for højt til direkte brug i behandlingen af patienten, så trykket skal sænkes og blandes med atmosfærisk luft i henhold til den foreskrevne inspirerede O2 -fraktion. Blandingen af gassen vil typisk ske i en beholder inde i respiratoren. [11] I dag benytter de fleste respiratorer sig af en standardteknik inden for mekanisk ventilation kaldet Continuous Positive Pressure Ventilation (CPPV). Det centrale præmis for CPPV er, at den indgivne gas har et flow i den retning som trykgradienten mellem de øvre luftveje og alveolerne foreskriver, hvilket vil sige, at luften strømmer mod et lavere tryk. [11] 3 Indledning 1.1.1 Tilpasning af respiratorindstillinger Klinikeren har alene ansvaret for at indstille respiratoren, så den ventilerer patienten på den mest hensigstmæssige måde. Nogle typiske respiratorindstillinger er fraktion af inspireret O2 (FiO2 ), tidalvolumen (Vt), respirationsfrekvens (f), Positive End Expiratory Pressure (PEEP) samt forholdet mellem inspirationstid og ekspirationstid (I:E). I respiratoren eller i eksternt monitoreringsudstyr findes diverse biomedicinske sensorer, der måler specifikke parametre og variable for den tilkoblede patient, hvilket giver klinikeren et billede af patientens patofysiologiske tilstand. Indstillingen af respiratoren for den enkelte patient sker bl.a. på baggrund af den enkelte klinikers erfaring og ekspertviden, og herudover har hospitaler verden over udformet guidelines, som kan støtte klinikeren i indstilling af respiratoren. [17] Tilpasning af respiratorindstillinger til den enkelte patients behov sker typisk på den måde, at klinikeren evaluerer patientens tilstand på stuegang, hvorefter vedkommende indstiller respiratoren med den antagelse, at patientens tilstand ikke ændrer sig i et 24 timers interval for stabile patienter. Dette er muligt, da de fleste respiratorer i dag har indbygget en form for autopilot, som er et mode respiratoren kan sættes i. Automode indstilles f.eks. til, at der skal leveres et vist volumen pr. minut, og hvis patientens behov ændres, kan automode korrigere for dette. Ved at sætte respiratoren i dette mode, betyder det, at klinikeren ikke selv behøver at tilpasse respiratorindstillingerne hele tiden. (Se Bilag 1) Processen vedrørende tilpasning af respiratorindstillinger er illustreret på Figur 1.1. Som det ses af Figur 1.1 :<;!=.> ? ;/@ A@CB ]^_` b ^a&bc d c !"$#&%('!%()*"!#+% "$#&%,-%."/#&%0%/1 !% 2 3-"54%()*6%,*7879 RST U V+W W X YZ [ TU Y S+T U W V Z O-P > =.> QA@CB \MN?+> A=(?&B efgh i j i fk g l IJAK.L.> @ MN? ;/@CB D/ (6& ( m.n+o o pq r s nt 2E "F#&%(G %()%!H!H!!%E1 H Figur 1.1: En illustration af respiratorbehandlingen samt klinikerens arbejdsproces i korrektionen af respiratorindstillingerne. Der monitoreres nogle udvalgte patientparametre og -variable, som visualiseres for klinikeren. Klinikeren kan ud fra kliniske guidelines og egen erfaring give en vurdering af patientparametrene og -variable og tilpasse respiratorindstillingerne, så de tilpasses den enkelte patients behov. kan processen for tilpasning af respiratorindstillinger betragte som en cyklus, hvor klinikeren er hovedaktøren. Patientens fysiologiske tilstand visualiseres indirekte på diverse monitorer på patientstuen i form af talværdier og kurver samt fra diverse blodprøveanalyser. Disse værdier fortolkes af klinikeren, som dernæst bestemmer 4 Indledning sig for en behandlingstrategi for patienten. Til sidst implementeres denne strategi i form af indstilling af respiratoren. Ifølge [14] kan en strategi for ventilationen af den kritisk syge patient inddeles i de tre følgende trin: En vurdering af den enkelte patients patofysiologiske tilstand, på baggrund af patientparametre for følgende tilstande: Gasudveksling, lungemekanisk tilstand, metabolisk tilstand, cirkulation og blodets tilstand. En vurdering af hvorledes respiratorindstillingerne vil påvirke patientens fysiologiske tilstand, da en ikke rationel respiratorindstilling vil kunne forværre en patients kritiske tilstand. Valg af respiratorindstillingerne, som vurderes at være de mest fordelagtige for patienten og som tager højde for de konsekvenser, der kan følge af respiratorbehandlingen. Der er foretaget undersøgelser som viser, at patienter ofte føler ubehag og modarbejder respiratoren under den mekaniske ventilation grundet fejlagtige eller uhensigtsmæssige respiratorindstillinger. Dette fører til udmattelse og eventuelle uønskede kliniske tilstande hos patienten. Dette skyldes, at klinikeren skal søge at finde en hårfin balance mellem at få ventileret patienten tilstrækkeligt og mindske de gener der påføres patienten. Disse gener kan eksempelvis opstå i form af, at der gives for meget eller for lidt ilt. Dette har den følgevirkning, at pH-værdien i blodet bliver enten for høj eller for lav. Denne balancering handler om tradeoff. Det vil sige at klinikeren, i det førnævnte tilfælde, skal vægte de konsekvenser der opstår ved at give patienten mere eller mindre ilt. Denne balancering er vanskelig at finde. 1.2 Surrogatmål Et essentielt begreb i klinikerens vurdering af patientens tilstand og ventilation af den kritisk syge patient er surrogatmål. Med et surrogatmål menes, at der ikke vælges det klinisk relevante effektmål, men i stedet vælges et andet effektmål, surrogatmål, som formodes at være en tilstrækkelig god indikator for det kliniske relevante effektmål. Dette kan være tilladeligt, men kan volde problemer. Et eksempel på dette er i behandlingen af mavesår (ulcus), hvor effektmålet er at helbrede patienterne for deres mavesår. Surrogatmålet er udryddelsen af helicobactor pylori-bakterien, der er skyld i det fleste tilfælde af mavesår, og udryddelsen af denne bakterie vil således være en god indikator for at effektmålet, behandlingen af mavesår, opnås. [18] I de tilfælde hvor klinikeren står over for at skulle vurdere multiple surrogatmål og samtidig bibeholde det klinisk relevante effektmål, vil vedkommende ofte skulle gå på kompromis med et eller flere af surrogatmålene. Ved at prioritere et enkelt surrogatmål, vil andre surrogatmål ofte blive nedprioriteret. Dette kunne eksempelvis være, at klinikeren i et tilfælde ville acceptere en højere acidose mod at få en bedre oxygenering. Problemstillingen for klinikeren er således, hvordan surrogatmålene skal vægtes over for hinanden. Denne vægtnings- eller tradeoff-problematik, omkring vurdering af multiple surrogatmål og konsekvenserne ved at prioritere et surrogatmål frem for et andet, kan beskrives teoretisk ved hjælp af utilityteori, hvilket er beskrevet i det efterfølgende kapitel. 5 KAPITEL 2 Problemområde I dette kapitel gennemgås problemområdet i projektet, her bliver klinikerens problemstilling i forbindelse med tradeoffs teoretiseret, og der gives et eksempel på et allerede eksisterende system, der bygger på denne problematik. Afslutningsvis vil der foreligge en problemformulering for projektet. Afsnittet om utilityteori er udarbejdet på baggrund af [8]. 2.1 Utilityteori Utilityteorien finder anvendelse i flere forskellige brancher, eksempelvis medicin og økonomi, hvor vigtige beslutninger skal tages ud fra givne eller indsamlede data. Essensen af en utilityanalyse er at fastsætte utilityværdier til de konsekvenser, der affødes af et bestemt valg. I en reel problemstilling kan der eksempelvis være utallige økonomiske, psykologiske og livskvalitetsmæssige forhold (cost and benefit) relateret til det enkelte valg. Indvirkningen af disse forhold bestemmes ved at associere en konsekvens til ethvert valg. Konsekvensen beskriver valgets implikation. Det kan eksempelvis være at afgøre, hvordan en beslutning vil påvirke en patients tilstand. Efter bestemmelse af disse indvirkninger skal beslutningstageren indkode sine præferencer over for konsekvenserne i form af talværdier, hvor størrelsen af en talværdi vil afbilde graden af indvirkninger og dermed også præferencen. Bestemmelse af utilityværdier udføres med henblik på at maksimere den forventede utility, som dernæst bliver det centrale kriterium for den mest fornuftige og rationelle beslutning. 2.1.1 Multiattribut værdiproblem Såfremt der skal tages højde for flere valg, der indebærer forskellige konsekvenser, opstår et multiattribut værdiproblem. Disse komplekse beslutninger implicerer flere forskellige overvejelser, da det er næsten umuligt at udpege ét enkelt alternativ, som altid vil være bedst egnet til forskellige effektmål. Det vil sige, at det ikke er muligt at maksimere multiple mål samtidig. Det er således ikke muligt at maksimere benefits og minimere costs på en gang. Dette er et spørgsmål om tradeoffs. 7 Problemområde Systematisk strukturering af ovenstående form for problemstilling er essentielt for forståelsen af utilityteorien. Essensen er således, at beslutningstagerne ofte støder på problemer med at afveje mellem det ene mål frem for det andet. I tilfældet af at konsekvenserne for ethvert muligt valg kendes, da bliver problemstillingen således: Hvor meget udførelse af mål 1 er man villig til at ofre, for at kunne forbedre udførelsen af mål 2 en vis grad? Tradeoff-problematikken bliver ofte et individuelt værdispørgsmål, og i nogle tilfælde kræver det beslutningstagerens subjektive opfattelse. Der eksisterer to strategier for besvarelse af dette spørgsmål: 1. Beslutningstageren kan informelt vægte disse tradeoffs. 2. Beslutningstageren kan eksplicit formalisere sin præferencestruktur, som skal bruges til at evaluere alternativerne. Det vil sige, at beslutningstageren enten kan vælge at udføre en subjektiv tradeoff af de konsekvenser der eksisterer, eller at beslutningstageren kan formalisere de præferencer vedkommende har og herudfra anvende dette til at evaluere konsekvenserne af de forskellige handlinger. Utility-problematik Lad a være et muligt valg, og lad A være en samling af alle mulige valg. Til enhver handling a i A associeres n værdier: X1 (a),..., Xn (a). Udtrykkene kan betragtes som evalueringer eller transformationer af handlinger. X1 ,...,Xn afbilder enhver handling a fra handlingsrummet A over i et n-dimensionelt konsekvensrum som vist på Figur 2.1. Det skal bemærkes, at hvis x=(x1 , x2 ,...,xn ) er et punkt i konsekvensrummet, da sammenlignes -+ /& - 7 C Ew|z(+(zNwN|N} ~ uvxwNyzN{ |z|(} ~ Figur 2.1: Afbilding af a over i konsekvensrummet.[8] størrelser af xi og x j for i j ikke, idet attributterne Xi og X j sandsynligvis er målt i forskellige enheder. Det handler derfor om at vælge den handling a i A, som giver det største payoff X1 (a),..., Xn (a). Sidstnævnte kan kombineres i en skalár af præferencer eller værdier. Dette kan gøres ved at specificere en skalár-værdi funktion v defineret i konsekvensrummet med følgende egenskab: v x1 x2 ! xn v x1 x2 ! xn x1 x2 ! xn x1 x2 ! xn / hvor symbolet betyder ”foretrukket eller ligegyldig”, og hvor v betegnes som en værdifunktion eller en utilityfunktion. Idéen med en utilityfunktion er at kunne vælge a i A, således at v maksimeres. Utilityfunktionen 8 Problemområde v bruges indirekte til at sammenligne forskellige niveauer af forskellige attributter. Dette gøres ved at sammenligne de effekter, som xi , i=1,...,n, har på utilityfunktionen v. Af det ovenstående forbliver problemet at kunne strukturere og bestemme utilityfunktionen v. Dette kan simplificeres ved at finde en funktion f med udtrykket: v x1 x2 ! xn f v1 x1 / v2 x2 /! vn xn hvor vi er en utilityfunktion for den enkelte attribut Xi . 2.1.2 Formalisering af præferencestruktur Såfremt der eksisterer adskillige konsekvenser til de valg, der skal træffes, og disse ikke umiddelbart kan vægtes subjektivt, kan det være tilrådeligt at udarbejde en formaliseret præferencestruktur. En måde at repræsentere konsekvenserne af de valg der træffes, er at benytte en additiv utilityfunktion, også kaldet en additiv værdifunktion. Additiv værdifunktion Såfremt der er givet nogle præferenceuafhængige evalueringer eller attributter X1 ,...,Xn af et valg, eksisterer der en additiv værdifunktion: n ∑ vi xi / v x1 x2 ! xn (2.1) i 1 hvor vi er en værdifunktion for Xi . I stedet for at benytte sig af ovenstående repræsentation, kan det være mere praktisk at skalere v og hver attribut værdifunktion fra 0 til 1, således at den additive værdifunktion bliver af formen: v x1 x2 ! xn n ∑ λi vi xi / (2.2) i 1 hvor v og vi , i=1,2...,n, i ligning (2.2) er skaleret fra 0 til 1 og n ∑ λi i 1 1 λi 0 (2.3) Bestemmelse af en additiv værdifunktion Det antages, at der skal vælges mellem n alternativer, og at hvert alternativ kan udtrykkes ved hjælp af m attributter. For alternativet Ai eksisterer størrelserne x1i ! xmi . Der gælder følgende for en additiv værdifunktion: v j (værst x j ) = 0, v j (bedst x j ) = 1 j 1 ! m; 0 ¡ λj ¡ 1, j 1 ! m n ∑ λi 1. i 1 9 Problemområde Her betegner v j den j´te komponent af værdifunktionen v, og λ j er vægten der associeres til attributten X j . Værdifunktionen v j findes ved at udregne den subjektive middelværdi flere gange i træk. Hvis det antages, at vm er en middelværdi, skal der gælde, at punkterne (værst x j , vm ) og (vm , bedst x j ) er differentielt værdiækvivalente. Dette betyder, at man er villig til at ofre lige meget, om man går fra værst x j til vm eller fra vm til bedst x j . λværdierne, hvilke er vægtningerne associeret til den enkelte attribut, bestemmes ud fra værdifunktionerne. Utilityteori omhandler således bl.a. disse to aspekter: Utilityfunktionerne samt bestemmelse af disses kurveformer Vægtningen af utilityfunktionerne og hermed bestemmelse af lambdaværdier 2.1.3 Utilityteori i praksis Der findes adskillige softwarebaserede systemer, som bygger på utilityteori. Et eksempel på et softwarekonstrueret system er et intelligent respiratorsystem INVENT, der bygger på utilityteori i forbindelse med indstillingen af respiratorer. INVENT er et beslutningsstøttesystem, der anvender tradeoff-problematikken i de kliniske konsekvenser, der kan opstå i klinikerens indstilling af respiratoren ved en kritisk syg patient. INVENT har utilityfunktionskurveformer implementeret og har én vægtning af disse utilityfunktioner integreret for én patientgruppe. INVENT mangler dog en formaliseret præferencestruktur for utilityfunktionerne. 2.2 INVENT INVENT, som er udviklet på Aalborg Universitet, er et softwarebaseret beslutningsstøttesystem udviklet med det formål at understøtte klinikeren i at foretage respiratorindstillinger. INVENT bygger på de i indledningen tre nævnte trin (se afsnit 1.1.1 på side 5): Vurdering af patientens patofysiologiske tilstand, forudsigelse af hvorledes ændringer i respiratorindstillingerne påvirker patientens fysiologiske tilstand, samt valg af respiratorindstillinger til den individuelle patient. [14] På Figur 2.2 ses en overordnet illustration af INVENT. INVENT er således udviklet til at indgå i processen omkring indstillingen af respiratorer, og på Figur 2.3 på næste side gives en illustration af, hvorledes INVENT fra udviklerens side er tiltænkt at skulle indgå i processen. For at Ý5ÖÞ*Ø-Õ ÙCÓEÔCß5ÙÕ ×à*Þ.ÔÕ á á Õ ×â*Ö-ÙÜ Þ Õ ß5á ß-â5Õ Þ*åÖ ãä * ÚÛß*à*Ö-á á Ö*ÙÜ ÒFÓÔÕ Ö*×.Ôì/Ó/Ù&Õ Ó!í*á Ö$Ü ¤ ϦJÀ<¤ÏпJ¸ µ °J·E¸³JºÑ³J´!·J¶ ´ ¹ °·E¸J³²!¶ !¾Jµ ³ J §x³J·.ê/¯½$¾µ ¿± ë ½³J¶ ³Jµ ½$¾µ ¿± ¢F£ ¤7¥-¦!¢*¦E§5¨5¦-£ © ª5¦!«5ª5ª5« ÒFÓEÔÕ Ö*×.ÔØ/Ó!Ù+Ó!ÚÛÖ.ÔÙÖ$Ü ¬®J¯E°E±E².³J´¯.µ ¶ ·E¸ ¹°·.¸³º»³´!·¶ ´ ¼®³½!¾E¿/µ ¶ ¯.´½C¶ µ ¯(½!·E± ÀÁ¶ ´°Jµ ½C¶ ¿!· Ã5µ ¿±J³½¯7½C¶ µ ¯½!·.± æç ÙÙß*âFÓÔÚéè/á Ü ¤ÅÄ·.ÆǽC¶ µ ¯(½C ÈÉ´´³µ ¶ ¸»¿ÊËE¸J³·E³J¶ ·E¸ ¢/¿!Â̶ ·.±! ³»¾E! ¿E½C !°º»³ ¢/¿!Â̶ ·.±! ³Å½³µ ³´N½¯³ ¢/¿!Â̶ ·.±! ³ÅÍE¶ ±¿¯³Î/µ ´/µ ¿¯³ ¢/¿!Â̶ ·.±! ³Å¿ÊË.¸³J·8½¿EÊ.¶ Í.¶ ½³½ Figur 2.2: En illustration af INVENT. Klinikerens foreslåede respiratorindstillinger samt de konstante patientparametre er input til INVENT. Matematiske modeller over fysiologien for O2 - og CO2 -transporten i blodet samt lungedynamikken er funktioner af førnævnte inputs. Klinikeren kan simulere patientvariable for lungefunktionen og blodet, der simuleres på baggrund af modellerne og førnævnte inputs. Surrogatmålene kan betragtes som output for INVENT, hvilket er de surrogatmål som ønskes opnået med respiratorbehandlingen af patienten. Modificeret fra [1] kunne støtte klinikeren i at foretage respiratorindstillinger gør INVENT som beskrevet brug af utilityfunktioner. I INVENT kaldes de penaltyfunktioner, hvilket er negative utilityfunktioner. Disse penaltyfunktioner er i 10 Problemområde ! "#! $ M N(OPNQ$ îï&ð ñ òóCð ô&ïNõ ïNöFò+ð õ ò-÷ø ô&ï&ð ñ òóCð ùï(õ ñ ï(úû òü 2 354 6 387 9 :;: 9 ÷Nõ þû ïø*ð òýCþüÿï îï.úÿù Nî î ò ô ï5ö$ ö ñû õ ò&þôñ õ ï&ð ÷Nõ ñ óþCð ñ û û ñ óøòõ ü Z [ \] ^ _ \] _`a k bc [ \] a _ ^b g i j g l mo g f ii de f g h k n l lm h &DFE î''î#Dxñ ( ñ DHGI ü 'JDK ð#DL -. /0"! $ 1#, "$ < =5> )"*+# ! , ! $ ?@A = B > @ C %òþôñ õ ïð ÷(õ ñ óþð ñ û û ñ ó&øòõ ü R(S T T U V W X SY (ñ & ð Nî(''î ü ' Figur 2.3: Illustration af respiratorbehandling samt klinikerens arbejdsproces i tilpasningen af respiratorindstillingerne ved brugen af INVENT. Der monitoreres nogle udvalgte patientparametre som visiualiseres for klinikeren. Klinikeren kan ud fra en vurdering af patientparametrene tilpasse respiratorindstillingerne, så de er tilpasset den enkelte patients behov. Til tilpasningen kan klinikeren få støtte ved at simulere patientvariable for patientens lungefunktion og blodets tilstand. Inden den endelige respiratorindstilling foretages, kan klinikeren sammenholde sin indstilling med de respiratorindstillinger, som INVENT foreslår for den pågældende patient. INVENT funktioner for fem definerede kliniske tilstande, der skal undgås, og surrogatmålene bliver således at skulle undgå dem: Barotraume, acidose/alkolose, atelektase, oxygentoxycitet og dårlig oxygenering. Klinikerens problemstilling i processen omkring indstillingen af respiratorer er som beskrevet at skulle vægte disse surrogatmål over for hinanden, idet en prioritering af ét surrogatmål vil kunne nedprioritere et andet surrogatmål. Som INVENT er konstrueret nu, skal klinikeren subjektivt foretage denne vægtning, idet INVENT ikke har nogen formaliseret præferencestruktur for vægtningen af de forskellige kliniske tilstande, som i praksis skal prioriteres forskelligt, afhængig af hvilken tilstand den kritisk syge patient er i. INVENT indholder to overordnede funktionaliteter til at kunne støtte klinikeren i indstillingen af respiratorer: Simulering Optimering 2.2.1 Simulering For at kunne vurdere patientens patofysiologiske tilstand har INVENT et sæt patientparametre visualiseret for klinikeren. Disse patientparametre er parametre for gasudveksling, lungemekanisk tilstand, metabolisk tilstand, cirkulation og blodets tilstand, og udgør patientparametrene: shunt, FA2, Vd, compliance, modstanden ˙ DPG, Hb, COHb, MetHb og temperatur. Disse patientparametre er i INi respirationsvejene, VO2 , VCO2 , Q, VENT værdier, der monitoreres af andet apparatur, og sættes i INVENT til at være konstante. Dette skyldes, at de antages at være statiske for patienten, idet en ændret respiratorindstilling ikke vil ændre parameterværdien markant. Respiratorindstillingerne i INVENT er FiO2 , Vt, f, PEEP og I:E. INVENT har matematiske modeller for O2 , CO2 og lungedynamik integreret (se appendiks B på side 141), som anvendes til at kunne forudsige effekten 11 Problemområde af at ændre på respiratorindstillingerne. Dette er i INVENT en simulering af patientvariable. Patientvariablene er således variable, der simuleres på baggrund af respiratorindstillingerne, patientparametre og de matematiske modeller over fysiologien. Patientvariablene er variabler for lunger og hhv. arterielt og venøst blod og udgør patientvariablene: FeCO2 , FeO2 , SaO2 , PaO2 , PaCO2 , pHa, BE, SvO2 , PvO2 , PvCO2 , pHv. 2.2.2 Optimering INVENT er udviklet således, at klinikeren kan optimere respiratorindstillinger og patientvariable, og klinikeren får hermed INVENTs forslag til, hvilke respiratorindstillinger og patientvariable der findes mest fordelagtige for patienten. Denne optimering sker i INVENT ved en optimeringsfunktion, hvilket foreslås på baggrund af de fem integrerede penaltyfunktioner for de fem kliniske tilstande: Barotraume, atelektase, acidose/alkalose, oxygentoksitet og dårlig oxygenering. Optimeringsfunktionen er specificeret til at kunne foreslå de mest rationelle respiratorindstillinger for en post-operativ CABG-patient1 , dvs. de indstillinger der minimerer de fysiologiske skadevirkninger og således optimerer denne type patients tilstand. Optimeringsfunktionen i INVENT giver klinikeren de respiratorindstillinger med den laveste samlede penalty for de fem penaltyfunktioner, og klinikeren får således systemets forslag til de mest fordelagtige respiratorindstillinger. I det følgende uddybes de penaltyfunktioner, der er integreret i INVENT. 2.2.3 Penaltyfunktioner I INVENT definerer penaltyfunktionerne de formåede risici, der er forbundet med en bestemt respiratorindstilling eller simuleret variabel for patientgruppen post-operativ CABG. Penaltyfunktioner er funktioner, der beskriver den negative utility og er derved en specialisering af utilityfunktioner. Hvor der i utilityteorien søges at opnå en høj utility, søges der for penaltyfunktionerne at finde en lav penalty for de enkelte kliniske tilstande. Figur 2.4: Penaltyfunktionerne inkluderet i INVENT. Penalty er skaleret op ad ordinaten. (a) Barotraume er plottet som en funktion af PIP. Der er illustreret penalties for forskellige respirationsfrekvenser hhv. 5, 10, 15, 20, 25, 30. (b) Atelektase er plottet som en funktion af Vt. (c) Acidose/alkalose er plottet som en funktion af venøs pH (d) Forringet oxygenering er plottet som en funktion af venøs oxygensaturation. (e) Oxygentoxicitet er plottet som en funktion af FiO2 , og her er der repræsenteret penalties for varierende timer efter FiO2 -indstillingen er foretaget. [14] 1 CABG = Coronary Artery Bypass Grafting 12 Problemområde Penaltyfunktionerne er produktet af en dialog mellem udvikleren af INVENT og klinikere. Formålet med dialogen er at tilskrive nogle værdier til de forskellige tilstande, som kan karakterisere hvor alvorlige tilstandene er. Kurverne på Figur 2.4 på forrige side afbilder klinikeres opfattelse af, hvor fejlagtige respiratorindstillinger er. Kurverne er subjektive, idet de afbilder klinikerens personlige holdning til, hvor kritisk en tilstand er, hvilket betyder, at penaltykurveformerne ikke er konstruerede ud fra formaliserede data. Dette skyldes, at der findes mange individuelle fysiske og psykologiske faktorer, som kan have indflydelse på disse kurver. [2] Eksempelvis ved klinikeren, at det er skadeligt for en patient, hvis SvO2 kommer under 60% og derved skal der knyttes en høj penalty til denne tilstand. Dog er den risiko patienten løber når iltmætningen er lidt under 60 ikke den samme som hvis den er langt under 60. Resultatet af dialogen mellem udvikleren af INVENT og klinikeren bliver, at der knyttes nogle penaltyværdier til parameterværdierne. Disse penaltyværdier er klinikerens vurdering af hvor kritisk en tilstand er, samt hvor meget skade tilstanden vil påføre patienten. Herved er det muligt at knytte en penaltyværdi til den pågældende parameterværdi. Et eksempel på resultatet af en dialog mellem udviklereren af INVENT og klinikere kan ses i tabel 2.1. Tabellen viser klinikerens vurdering af, hvor kritiske forskellige iltmætningsniveauer er for patienten. Penaltykurveformerne i INVENT er fundet ved brug SvO2 (%) Penalty 0 100 50 5 52 3.6 54 2.2 56 1.4 60 0.6 66 0.18 70 0.05 72 0.02 74 0 80 0 95 0 100 0 Tabel 2.1: Tabellen er et resultat af dialogen mellem udvikler og kliniker. Her er illustreret forskellige niveauer af venøs iltmætning samt klinikerens forslag til en tilsvarende penalty. Det ses, at en iltmætning på 0% giver den højest mulige penalty (100), mens en iltmætning på 74% giver den lavest mulige penalty (0), idet klinikeren har vurderet denne iltmætning til at være tilfredsstillende. af lineær interpolation ud fra de penaltyværdier klinikeren har oplyst. Lineær interpolation anvendes således til at finde koordinaterne for penaltykurven for punkterne der ligger mellem de punkter som et opgivet af klinikeren. Idet kurverne repræsenter negative utilties, sigter INVENT mod stabiliseringen af en patient ved at foreslå den respiratorindstilling som giver den laveste penalty. Dette gøres ved at undersøge gradientretningen af kurveformerne. INVENT betragter den respiratorindstilling med den laveste total penaltyværdi som den mest optimale. Til dette formål har INVENT en total penaltyfunktion defineret, der er en additiv værdifunktion, som er summen af den enkelte penalty for henholdsvis pH, SvO2 , PIP, FiO2 og Vt. Minimeringen af denne funktion giver den mest optimale respiratorindstilling. 2.3 Vægtning af penaltyfunktioner Ifølge utilityteori skal der skabes en dialog mellem kliniker og udvikler, hvor beslutningstageren subjektivt vægter konsekvenserne ved et bestemt valg. En anden mulighed er, at beslutningstageren kan formalisere en præferencestruktur. Dette projekt vil fokusere på at udarbejde en matematisk løsning for en formaliseret præferencestruktur. Projektet vil beskæftige sig med at få produceret et softwaresystem, der kan producere en formaliseret præferencestruktur for de allerede udarbejdede penaltyfunktioner i INVENT. Softwaresystemet skal producere forskellige vægtninger af penaltyfunktionerne ved at indsamle og indirekte registrere klinikeres holdning til, hvordan penalties skal vægtes ved forskellige patientgrupper med forskellige tilgrundliggende sygdomme. Det tænkes, at INVENT kan kalibreres ved at inkludere formaliserede vægtninger for forskellige patientgrupper, således at INVENT kan anvendes på flere patienttyper end post-operative CABG-patienter. Disse vægtninger er de beskrevne lambdaværdier. 13 Problemområde 2.3.1 Problemformulering Ud fra problemanalysen og med tanke på at skulle konstruere et softwaresystem formuleres følgende problemformulering til projektet: Hvorledes er det muligt at konstruere et vidensindsamlingssystem, som kan indsamle og formalisere klinikeres subjektíve holdninger til, hvordan respiratorindstillinger indstilles mest fordelagtigt for en kritisk syg patient, med henblik på en rationel vægtning af penaltyfunktioner? I resten af rapporten bliver softwaresystemet, der ønskes konstrueret, refereret til som Dr. Know. 14 Del II Systemanalyse Formålet med denne del af rapporten er at dokumentere, at der eksisterer et behov for systemet, samt at udføre en videre analyse af det softwaresystem der ønskes konstrueret. Kapitel 3 indeholder en beskrivelse af behovet for softwaresystemet, som udarbejdes i samarbejde med en rekvirent af systemet. Desuden forefindes en løsningsstrategi. Kapitel 4 beskriver de funktionaliteter, der er fundet til systemet. Disse beskrives i dette kapitel som usecases. Kapitel 5 beskriver den fysiske arkitektur af softwaresystemet samt relationen til INVENT og applikationsområdet. Kapitel 6 indeholder en beskrivelse af de aktiviteter, der forekommer i systemet, i form af aktivitetsdiagrammer. Kapitel 7 indeholder mock-ups af de forskellige brugergrænseflader, der forventes at eksistere i Dr. Know. Kapitel 8 indeholder en beskrivelse af de forskellige klasser, der er fundet i forbindelse med analysen af Dr. Know. 15 KAPITEL 3 Behovsbeskrivelse og strategi I dette kapitel foreligger en behovsbeskrivelse af Dr. Know, som er udarbejdet på baggrund af dialog med en potentiel rekvirent og brugere af Dr. Know. Behovsbeskrivelsen indeholder hvilke krav og herunder hvilke begrænsninger, der sættes til Dr. Know. Efterfølgende foreligger en løsningsstrategi for Dr. Know. 3.1 Behovsbeskrivelse Behovsbeskrivelsen er udarbejdet på baggrund af samtaler med en potentiel rekvirent af Dr. Know samt nogle klinikere, der er potentielle brugere af systemet. Der er i beskrivelsen anvendt uddrag fra referater, og disse er således ikke direkte citeret af kilden. Udvikleren ønsker at få konstrueret et system, der kan producere forskellige vægtninger tilsvarende forskellige patienttyper. Ud fra dialog med en udvikler og klinikere og efterfølgende overvejelser er det muligt at opstille visse rammer for Dr. Know. 3.1.1 Afgrænsninger Efterfølgende er der beskrevet en række afgrænsninger til Dr. Know. Det drejer sig om afgrænsninger i de patientgrupper, respiratorindstillinger og penaltyfunktioner, der ønskes anvendt. Patientgrupper Antallet at patientgrupper, der skal produceres vægtninger for, sættes til tre, hvilket vurderes at være et passende antal at arbejde ud fra. I dialogen med udvikleren argumenteres der for at skulle vægte penalties for forskellige patientgrupper: ”Argumentet for at vægte penalties forskelligt til forskellige patientgrupper er, at penalties gør forskellig ”ondt” på forskellige patientgrupper. Patientgrupperne har underliggende forskellige organproblemer, og det er derfor forskellige organer, man ønsker at skåne hos patienten.” (se Bilag 2) 17 p Behovsbeskrivelse og strategi Patientgrupperne post-operative hjertepatienter, hjernetraumepatienter og intensivpatienter vælges ud fra den overvejelse, at der ligger forskellige organproblemer til grund for, at respiratorbehandling er nødvendig, og at det derfor forventes, at respiratorindstillingerne er væsentlig forskellige for de tre patientgrupper. Patienterne vil alle være intensiv patienter, i den forstand at de alle er under respiratorbehandling. Patientgruppeinddelingen udgør udelukkende en inddeling i den primære årsag til at patienten er intensivpatient. Hjernetraumepatienter karakteriseres som patienter, derenten har været udsat for åbent kraniebrud, hvor dele af hjernen beskadiges, eller også kan der være tale om et lukket kranietraume, hvor hjernen stødes mod kraniet eller rystes. Dette kan føre til blødninger i selve hjernevævet eller uden for hjernen, der kan trykke på hjernen og beskadige den. Patienten observeres for forhøjet tryk i hjernen og desuden skal der forsøges at opretholde et normalt CO2 -niveau i hjernen. For patientgruppen hjernetraume kan patienten f.eks. have et velfungerende hjerte, og hjertet vil derfor kunne tåle at blive belastet gennem længere tid og ved for dårlig oxygenering kunne respondere ved at arbejde hårdere. Postoperative patienter karakteriseres som enhver patient, der har undergået en hjerteoperation, med efterfølgende behov for respiratorbehandling. For post-operative hjertepatienter vil patienten typisk have et svækket hjerte, hvor de andre organer derimod kan være velfungerende og derfor tåle at blive belastet hårdere end hjertet. Intensivpatienter karakteriseres som almen intensivpatienter med respirationsproblemer, herunder ikke patienter med ARDS 1 og KOL idet disse patienter beskrives ud fra lungedynamik modellen, som ikke er implementeret fuldkomment i INVENT. Disse patienter er karakteriseret ved et højt shunt og et stort deadspace. En patient med en kollapset lunge vil således have en højere shunt, mens en patient med lungeødem vil have et større deadspace. Ved intensivpatienter med lungefunktionsproblemer vil andre organer, såsom hjertet, kunne tåle at blive belastet hårdere for at opnå tilstrækkelig gasudveksling, så organerne iltes tilstrækkeligt. Det er således de underliggende organproblemer, der skal være afgørende for vægtningen af penalties for forskellige kritiske tilstande, hvilke forventes at være forskellige for de valgte patientgrupper. Respiratorindstillinger INVENT indeholder fem respiratorindstillinger: FiO2 , Vt, f, PEEP og I:E. I Dr. Know ønsker udvikleren, at der kun skal fokuseres på de tre respiratorindstillinger FiO2 , Vt og f. Dette skyldes, at respiratorindstillingerne PEEP og I:E på nuværende tidspunkt ikke anvendes i INVENT, på grund af at de fysiologiske modeller for disse er knap så anvendelige, og det er ikke en del af projektet at udarbejde modeller for PEEP og I:E (Se Bilag 2). Til dette kommenterer udvikleren: ”Det er ikke en realistisk simulering at udelade PEEP og I:E, idet PEEP stort set altid anvendes i praksis, men ved at fastholde PEEP og I:E kan de andre værdier/indstillinger observeres.” (se Bilag 2) Penaltyfunktioner Som beskrevet indeholder INVENT fem penaltyfunktioner for henholdsvis barotraume, acidose/alkalose, oxygentoxicitet, dårlig oxygenering og atelektase, der alle beskriver en kritisk klinisk tilstand hos patienten. I 1 Acute Respiratory Distress Syndrome 18 Behovsbeskrivelse og strategi INVENT er den integrerede lungedynamikmodel for atelektase ikke opdateret, hvilket ifølge udvikleren skyldes: ”Atelektase, som den er integreret i INVENT nu, er en funktion af tidalvolumen. Den bygger på en ældre forståelse af lungedynamikken, hvilken er ringere end forståelsen nu.” (se Bilag 2) I Dr. Know foretages der derfor den afgrænsning, at penaltyfunktionen for atelektase ikke medtages, og der anvendes derfor kun de fire resterende penaltyfunktioner. 3.1.2 Patientcases Til at kunne producere en vægtning for hver af penaltyfunktionerne i hver af de tre definerede patientgrupper foreslår udvikleren, at der skal udarbejdes et bestemt antal patientcases. En patientcase skal indeholde på forhånd definerede patientparametre, da disse som beskrevet er statiske i INVENT. De på forhånd definerede patientparametre og en indtastning af de tre respiratorindstillinger indgår i en simulering, og give et output i form af patientvariable. Udvikleren ønsker, at patientparametrene skal udarbejdes som værende realistiske for kritisk syge patienter, og ikke med tanke på at patienten f.eks. er post-operativ hjertepatient. Det vurderes, at 20 patientcases er tilstrækkeligt for hver patientgruppe. 3.1.3 Penaltyfunktioner og simulering af patientvariable Formålet med udviklingen af Dr. Know er som beskrevet at producere forskellige vægtninger af de fire penaltyfunktioner for hver af de tre udvalgte patientgrupper. Til at simulere patientvariablene vil der derfor blive anvendt fysiologiske modeller til simulering fra INVENT, idet formålet med Dr. Know ikke er at kunne reproducere disse. Penaltyfunktionerne i INVENT vil ligeledes blive anvendt. 3.1.4 Input til systemet Klinikere, som i det daglige foretager respiratorindstillinger for de respektive patientgrupper, skal komme med input til Dr. Know, hvilke kan producere de ønskede vægtninger. I det eksisterende INVENT kan brugeren af systemet se patientparametre for henholdsvis gasudveksling, cirkulation, lungedynamik, metabolisme og blod, som klinikeren skal foretage respiratorindstillingerne ud fra. I en dialog med en kliniker er vedkommende blevet præsenteret for muligheden for, at kunne se de enkelte patientparametrene inddelt efter de ovennævnte undergrupperinger af patientparametre, og adspurgt hvorledes dette vil have indflydelse på klinikerens vurdering af patientens tilstand. Klinikeren fortæller, at der i praksis kun er adgang til et fåtal af alle de patientparametre som klinikeren er blevet præsenteret for; nogle er online, nogle kan fås med mellemrum, mens andre sjældent er tilgængelige. I den sammenhæng giver klinikeren udtryk for, at det at kunne se alle patientparametrene vil kunne understøtte klinikeren bedre i respiratorindstillingen. (Se Bilag 1) Ud fra dialogen med klinikeren er det besluttet, at klinikeren skal kunne se samtlige patientparametre, som også er visualiseret i INVENT, samt konsekvensen af de respiratorindstillinger, der foretages. Det vil kunne understøtte klinikeren i vurderingen af patienttilstanden og således støtte klinikeren i at foretage den bedste respiratorindstilling. Klinikeren skal ud fra patientgruppe og patientparametre give en vurdering af patientens tilstand og på baggrund heraf kunne indstille respiratoren og simulere patientvariable, og ud fra patientvariable vurdere om respiratorindstillingen er acceptabel. 19 p Behovsbeskrivelse og strategi Information om/til klinikeren Udvikleren ønsker at kunne få information om den kliniker, der har givet input til Dr. Know, idet klinikere har forskellig erfaring og ekspertviden, som danner grundlag for indstilling af en respirator. Der skal dog ikke udarbejdes statistik over klinikeroplysningerne. ”Det kunne være interessant at få information om klinikeren, men statistikken er ikke nødvendigvis så interessant.... ” (se Bilag 2) Det vurderes, at den information, som klinikeren skal give systemet, er fornavn, efternavn, afdeling, anciennitet og stillingsbetegnelse, og der skal således være en oprettelse af klinikeren i systemet. 3.1.5 Plot af fejl Udvikleren ønsker at kunne få illustreret, hvor god overensstemmelse der er mellem Dr. Knows forslag til respiratorindstillinger og klinikerens forslag til respiratorindstillinger. Der gives således udtryk for et ønske om at få visualiseret, hvor godt et fit systemet har, dvs. hvor god en tilpasning Dr. Know har opnået til klinikerens respiratorindstillinger. Dette ønskes gjort for hver af de tre valgte respiratorindstillinger FiO2 , Vt og f. 3.2 Løsningsstrategi Der udarbejdes her en løsningsstrategi for Dr. Know, herunder hvordan lambdaværdierne beregnes samt hvorledes udvikleren skal få illustreret, hvor godt et fit Dr. Know har. Utilityteorien (2.1) anvendes til udarbejdelse af løsningsstrategien. Der defineres et handlingsrum H, hvori der findes forskellige kombinationsvalg; i dette tilfælde respiratorindstillinger for FiO2 , Vt og f. Eksempelvis vil en manipulation med indstillingen for FiO2 resultere i en evaluering af denne handling, h1 , og der gives således fire præferenceuafhængige konsekvenser af handlingen h1 i konsekvensrummet. Følgende er værdifunktionerne for de kliniske tilstande illustreret: v1 = vFiO2 h1 = oxygentoxicitet v2 = vSvO2 h1 = dårlig oxygenering v3 = vPIP h1 = barotraume v4 = v pH h1 = acidose/alkalose For at formalisere en præferencestruktur for konsekvenserne af handlingerne, anvendes en additiv værdifunktion kaldet total penaltyfunktion v, som er givet ved: v v1 v2 v3 v4 4 ∑ vi h1 (3.1) i 1 Det vælges at skalere v og de fire penaltyfunktioner fra 0 til 1, hvilket betyder at ligning (3.1) kan omskrives til v v1 v2 v3 v4 4 ∑ λi vi h1 i 1 (3.2) hvor λi er vægten associeret til penaltyfunktionen vi . Det gælder endvidere at: 4 ∑ λi i 1 20 1 (3.3) Behovsbeskrivelse og strategi 3.2.1 Kritérier Summen af de fire lambdaværdier skal altid give 1, og en lambdaværdi kan ikke antage værdien 0 eller 1. Dette hænger sammen med, at en penaltyfunktion aldrig kan udelades, hvilket vil sige at den altid vil have et bidrag til den totale penaltyfunktion v i ligning ( 3.1 på forrige side). Hvis en lambdaværdi f.eks. er 1, udelukkes de tre andre, idet deres lambdaværdi således er 0, hvilket ikke må ske. Det besluttes derfor, at værdien af lambda kan være minimum 0,1 og maximum 0,7. Det antages således, at en ændring i en respiratorindstilling altid vil påvirke enhver patient i de definerede patientgrupper på en måde, som kan beskrives af alle fire penaltyfunktioner. Normalisering af penaltyfunktioner De fire penaltyfunktioner skal normaliseres, så de alle har en værdimængde mellem 0 og 1. Grunden til dette er, at det herved er muligt at sammenligne penaltyfunktionernes output, hvilket vil sige at en penalty på 0,5 svarer til det samme for alle fire penaltyfunktioner. På Figur 3.1 ses de fire penaltyfunktioner normaliseret, så penalty for den enkelte penaltyfunktionen er skaleret til at ligge mellem 0 og 1. Normaliseringen er udført ved at dividere hver funktion med den penaltyværdi, klinikeren vurderer at være den værste. Figur 3.1: De normaliserede penaltyfunktioner er her illustreret, der således hver især er skaleret til at have en værdimængde mellem 0 og 1, så de kan sammenlignes. 3.2.2 Løsningstrin Følgende to trin indgår i løsningsstrategien til Dr. Know: 21 p Behovsbeskrivelse og strategi Bestemmelse af respiratorindstillinger. Bestemmelse af lambdaværdier. Bestemmelse af respiratorindstillinger I bestemmelsen af lambdaværdierne er det nødvendigt at finde de respiratorindstillinger, som Dr. Know vurderer som værende de mest fordelagtige for hver patientcase. Disse respiratorindstillinger findes på baggrund af de matematiske modeller og penaltyfunktionerne fra INVENT, der således giver Dr. Knows forslag til de mest fordelagtige respiratorindstillinger for patientcasen. Fremgangsmåden til at finde de mest fordelagtige respiratorindstillinger er at gennemløbe alle mulige kombinationer af FiO2 , Vt og f igennem. Til hver kombination af FiO2 , Vt og f beregnes en total penalty, og kombinationen med den mindste totale penalty (se ligning (3.1)) betragtes således som værende den mest rationelle respiratorindstilling. Denne kombination af respiratorindstillinger betegnes som Dr. Knows forslag. For de tre respiratorindstillinger FiO2 , Vt og f skal det først bestemmes, i hvilke intervaller der skal findes mulige kombinationer mellem dem, da antallet af kombinationer ellers er uendeligt. På baggrund af dialog med en kliniker og dennes demonstration af en respirator (se Bilag 1) er det bestemt, at respiratorindstillingerne skal løbe i følgende intervaller: FiO2 Vt f 0,21 - 1,00 [frak.] 0,3 - 1,2 [l] 5 - 30 [/min] De fire penaltyfunktioner er funktioner af henholdsvis PIP, pHv, FiO2 og SvO2 , hvor PIP, pHv og SvO2 er patientvariable. Til at finde Dr. Knows forslag til respiratorindstillinger simuleres alle patientvariable, hvor PIP, pHv og SvO2 udvælges for at kunne finde penalties for de tre respiratorindstillinger. Herefter findes penalty for hver af de fire penaltyfunktioner, der adderet giver den totale penalty. Den respiratorindstillingskombination med den laveste totale penalty er således Dr. Knows forslag. Følgende pseudokode illustrerer fremgangsmåden for hver patientcase: Kør for patientcase. !! Kør fra FiO2 lig med 0,21 til 1. !!/!! Kør fra Vt lig med 0,3 til 1,2. !!/!!*!! Kør fra f lig med 5 til 30. !!/!!*!! !!/!!*!! !!/!!*!! !!/!!*!! !!/!!*!! !!/!!*!! Simulér patientvariable og udvælg Sv02 , PIP og pHv. Find penalty v1 (FiO2 ) for oxygentoxicitet. Find penalty v2 (SvO2 ) for dårlig oxygenering. Find penalty v3 (PIP) for barotraume. Find penalty v4 (pHv) for acidose/alkalose. Find den totale penalty v = v1 + v2 + v3 + v4 . f-loop slutter her. !!/!! Vt-loop slutter her. !! FiO2 -loop slutter her. Slut for denne patientcase. Præsentér den kombination af respiratorindstillinger med den laveste totale penalty. !!/!!*!! 22 Behovsbeskrivelse og strategi Bestemmelse af lambdaværdier Den totale penaltyfunktion i Dr. Know vil have følgende udseende: v v1 v2 v3 v4 λFiO2 q v1 r λSvO2 q v2 r λPIP q v3 r λ pH q v4 (3.4) hvor λFiO2 , λSvO2 , λPIP og λ pH er de lambdaværdier, som skal bestemmes. Værdien af den totale penaltyfunktion skal udregnes for hver lambdakombination, hvilket vil sige alle mulige kombinationer af lambda skal løbes igennem. Dén lambdakombination, som giver den laveste værdi af den totale penaltyfunktion, er den optimale lambdakombination for netop ét sæt respiratorindstillinger. Dernæst handler det om at finde ud af, hvor meget Dr. Knows forslag til respiratorindstillingerne afviger fra klinikerens forslag. Dette gøres ved brug af metoden Least Square Error. Denne metode udregner den totale error som summen af error for de tre respiratorindstillinger som illustreret følgende: TotalError KnowFiO2 s KlinikFiO2 KlinikFiO2 2 2 r KnowVt s KlinikVt KlinikV t 2 2 r Know f s Klinik f Klinik f 2 2 (3.5) hvor eksempelvis KnowFiO2 og KlinikFiO2 svarer til henholdsvis Dr. Knows forslag og klinikerens forslag til en optimal respiratorindstilling for FiO2 . Ligning (3.5) giver et indblik i, hvor god overensstemmelse der er mellem Dr. Knows forslag og klinikerens forslag. Lambdakombinationen der resulterer i den laveste totale error vælges som vægtning og er således Dr. Knows output. Ovenstående fremgangsmåde kan systematiseres og udtrykkes i form af følgende pseudokode: Kør for λFiO2 lig med 0.1 til 0.7. !! Kør for λSvO2 lig med 0.1 til (0.8 - λFiO2 ). !!/!! Kør for λPIP = 0.1 til (0.9 - λSvO2 ). !!/!!/!! λ pHv = (1 - λFiO2 - λSvO2 - λPIP ). !!/!!/!! !!/!!/!! !!/!!/!! !!/!!/!! !!/!!/!! !!/!!/!! Kør kombinationer af respiratorindstillinger for FiO2 , Vt og f. Se forrige pseudokode for bestemmelsen af respiratorindstillinger. Vælg de respiratorindstillinger med den laveste penalty. Udregn error på FiO2 , Vt og f for alle patientcases. Udregn total error. Gem kombinationerne. λPIP -loop slutter her. λ !! SvO2 -loop slutter her. λFiO2 -loop slutter her. Kombinationen med den laveste totale error bliver til vægtning og således Dr. Knows output. !!/!! 3.2.3 Bland Altmann-plot Udvikleren ønsker at kunne få illustreret, hvor tæt overensstemmelse der er mellem systemets forslag og klinikerens forslag til respiratorindstillingerne. Det vælges, at dette skal gøres ved hjælp af et Bland Altmann-plot. Dette plot foretages for hver af de tre respiratorindstillinger, da det vurderes at være lettest at fortolke for udvikleren. 23 p Behovsbeskrivelse og strategi Et Bland Altmann-plot har på x-aksen gennemsnitsværdien af henholdsvis Dr. Knows og klinikerens forslag til en respiratorindstilling, hvilket giver den tætteste approximering til en reel værdi for en respiratorindstilling. På y-aksen haves differensen mellem systemets og klinikerens forslag, dvs. error. Plottet mellem disse vil ideelt skulle ligge på nul, idet der således ikke er nogen forskel mellem Dr. Knows og klinikerens forslag til respiratorindstillingerne. På denne type plot vil udvikleren kunne få illustreret, hvorvidt de producerede vægtninger er anvendelige eller ej. 24 KAPITEL 4 Usecases Formålet med kapitlet er at identificere usecases i Dr. Know, hermed hvilke funktionaliteter Dr. Know skal indeholde. Usecases skal kunne anvendes til at verificere, at Dr. Know kommer til at fungere, som brugerne ønsker det. Udarbejdelsen af usecases foretages på baggrund af behovsbeskrivelsen og strategien. Der gives først en tekstuel beskrivelse af Dr. Know og efterfølgende en identificering af usecases samt Dr. Knows aktører. 4.1 Tekstuel beskrivelse af funktionalitetskrav Ud fra behovsbeskrivelsen udarbejdes den tekstuelle beskrivelse af Dr. Know, som beskriver hvilke krav og overordnede funktionaliter systemet skal indeholde. Der skal være to brugere af Dr. Know: Klinikeren og udvikleren. Med udvikleren menes en potentiel rekvirent af Dr. Know, en rekvirent der har været med til at udvikle INVENT. Klinikeren skal give input til Dr. Know i form af sin kliniske erfaring, mens udvikleren skal bruge outputtet fra Dr. Know. Kravene til hvilke funktionaliteter Dr. Know skal indeholde inddeles derfor i en beskrivelse af funktionaliterne for henholdsvis klinikeren og udvikleren. Klinikeren Klinikeren skal indtaste oplysninger omkring sin kliniske baggrund, hvilke er fornavn, efternavn, afdeling, stilling og anciennitet. Klinikeren skal kunne vælge mellem de tre patientgrupper: post-operative hjertepatienter, hjernetraumepatienter og intensivpatienter. Klinikeren skal kunne vælge mellem de 20 opstillede patientcases. Hver patientcase skal indeholde følgende konstante patientparametre: shunt, FA2, Vd, Q, compliance, modstanden i respirationsvejene, VO2 , VCO2 , DPG, Hb, COHb, MetHb og temperatur og BE, og hver patientcase skal indeholde en allerede foreslået respiratorindstilling med tilhørende simulerede patientvariable. Disse parametre, er de samme som der bliver visualiseret i INVENT, se evt. 2.2.1 på side 11 25 Usecases Klinikeren skal kunne indtaste nye respiratorindstillinger for hhv. respirationsfrekvens (f), tidalvolumen (Vt) og inspireret oxygenfraktion (FiO2 ). Dr. Know skal kunne simulere patientvariable ud fra de indtastede respiratorindstillinger, hvilke er: FeCO2 , FeO2 , SaO2 , PaO2 , PaCO2 , pHa, SvO2 , PvO2 , PvCO2 , pHv, PIP. Klinikeren skal herefter kunne gentage og/eller godkende respiratorindstillingen, der automatisk skal gemmes ved godkendelse. Patientparametre og patientvariable skal præsenteres overskueligt for klinikeren Klinikeren skal kunne skifte bruger, såfremt der er en anden kliniker eller en udvikler, der ønsker at anvende Dr. Know. Udvikleren Udvikleren ønsker ikke, at Dr. Know implementeres i INVENT, men forventer, at outputtet fra Dr. Know kan anvendes i INVENT. Der skal kunne vælges mellem de tre patientgrupper: post-operative hjertepatienter, hjernetraumepatienter og intensivpatienter. Udvikleren skal kunne beregne vægtninger for penaltyfunktionerne for hver af de tre patientgrupper. Udvikleren skal kunne vælge at få beregnet vægtninger for enten én af klinikerne eller alle klinikere inden for den valgte patientgruppe. De beregnede vægtninger for hver af penaltyfunktionerne samt et plot af afvigelsen mellem systemets og klinikerens forslag for hver af respiratorindstillingerne skal visualiseres. For at udvikleren skal kunne anvende de beregnede vægtninger fra Dr. Know i INVENT, skal de beregnede vægtninger kunne gemmes, og tidligere beregnede vægtninger skal kunne hentes frem. 4.1.1 Detaljeret beskrivelse af Dr. Know Når en bruger skal anvende Dr. Know, skal brugeren i et loginvindue vælge brugertype af systemet, hvilket er kliniker eller udvikler. Der skal samtidigt være mulighed for at få information om Dr. Know, herunder vejledning og hjælp til brugen af systemet for både klinikeren og udvikleren. Begge brugere skal desuden under deres anvendelse af Dr. Know på ethvert tidspunkt kunne få hjælp og vejledning til brugen af systemet. Vælges brugertypen ”Kliniker”, skal klinikeren i samme loginvindue indtaste specifikke oplysninger om sig selv, hvilke er fornavn, efternavn, afdeling, stilling og anciennitet. Dr. Know skal kontrollere, at klinikeren får alle oplysninger indtastet, ellers skal klinikeren ikke kunne fortsætte. Når oplysningerne er indtastet og godkendt af klinikeren, får vedkommende et nyt vindue præsenteret, betegnet klinikervindue. Klinikervinduet skal indeholde information om, hvilken kliniker der er i færd med at anvende systemet samt give klinikeren mulighed for at vælge mellem de foruddefinerede patientgrupper og patientcases. Når klinikeren vælger én af patientgrupperne, præsenteres patientcase nr. 1 automatisk, hvorefter der frit kan vælges en anden patientcase. For den enkelte patientcase visualiseres et sæt konstante patientparametrene samt systemets forslag til en respiratorindstilling med tilhørende simulerede patientvariable. Med udgangspunkt i patienttype, patientparametrene og simulerede patientvariable skal klinikeren på baggrund af sin kliniske erfaring og ekspertviden vurdere og indtaste nye respiratorindstillinger for patienten. Når respiratorindstillingerne er indtastet, kan klinikeren simulere nye patientvariable, som visualiseres, hvilket klinikeren kan gentage, indtil patientens tilstand vurderes at være mest hensigtsmæssig. Når klinikeren finder de simulerede variable tilfredsstillende, skal klinikeren godkende respiratorindstillingerne. Dette forløb gentages for hver patientcase. Klinikeren kan skifte bruger uden at skulle afslutte systemet. 26 Usecases Vælges brugertypen ”Udvikler”, vil udvikleren efter accept af dette få et nyt vindue præsenteret, betegnet udviklervindue. I udviklervinduet skal udvikleren først vælge, hvilken patientgruppe der skal beregnes vægtninger for. Herefter skal udvikleren vælge, om der skal beregnes vægtninger på baggrund af én klinikers eller alle klinikeres respiratorindstillinger. Udvikleren skal kun have de klinikere præsenteret, der har indtastet respiratorindstillinger for alle 20 patientcases i den valgte patientgruppe. Udvikleren kan vælge at få beregnet vægtninger for den valgte patientgruppe. Mens beregningen udføres skal dette visualiseres. Når beregningen er udført, visualiseres vægtningerne automatisk for udvikleren, én for hver af de fire penalties. For hver af de tre respiratorindstillinger plottes et plot af fejlene for respiratorindstillingerne, der visualiserer for udvikleren, hvor anvendelige de beregnede vægtninger er. Udvikleren skal kunne lagre de beregnede vægtninger og patientgruppenavnet, der er beregnet for, og udvikleren skal desuden kunne hente tidligere beregnede vægtninger frem. Udvikleren skal til enhver tid kunne afslutte brugen af Dr. Know. 4.2 Definition af aktører I udarbejdelsen af usecasediagrammet skal aktørerne i Dr. Know identificeres, idet en usecase altid initieres af en aktør. En aktør kan defineres som noget eksternt, der interagerer med systemet, hvilket både kan være de personer, der anvender systemet, eller et andet system, der kommunikerer med Dr. Know. [6] Aktørerne i Dr. Know identificeres til at være: Klinikeren Udvikleren Klinikeren defineres som aktør, idet klinikeren skal give input til Dr. Know, og udvikleren identificeres som aktør, idet udvikleren skal kunne tilgå det output, systemet har. Outputtet består således af vægtningerne for penaltyfunktionerne, som udvikleren beregner på baggrund af klinikerens respiratorindstillinger. Vægtningerne af penaltyfunktionerne vil herefter også blive betegnet lambdaværdier. 4.3 Definition af usecases En usecase repræsenterer en funktionalitet for en aktør. Ifølge UML-terminologi kan en usecase defineres som en samling af handlinger, som et system udfører for at bidrage til et specifikt mål. Dette kan være kommunikation med de forskellige aktører, udførelse af beregninger, og handlinger der foregår inde i systemet. [6] Ud fra den tekstuelle beskrivelse af Dr. Know er følgende usecases identificeret: Vælg brugertype Vælg patientgruppe Hjælp Afslut Skift bruger Vælg patientcase Simulér patientvariable Godkend indstilling Vælg kliniker 27 Usecases Beregn lambda Gem lambda Åbn gemt lambda Ud fra denne identificering af usecases er et samlet usecasediagram konstrueret, hvilket er illustreret på Figur 4.1. Usecasediagrammet er en samling af alle usecases i Dr. Know og giver et overblik over systemets samlede funktionalitet samt hvilken aktør der kan initiere den givne usecase. Figur 4.1: Usecase-diagrammet illustrerer de forskellige usecases, der eksisterer i Dr. Know. Her ses de 12 forskellige usecases: ”Vælg brugertype”, ”Vælg patientgruppe”, ”Hjælp”, ”Afslut”, ”Vælg kliniker”, ”Beregn lambda”, ”Gem lambda”, ”Åbn gemt lambda”, ”Skift bruger”, ”Vælg patientcase”, ”Simuler patientvariable” og ”Godkend indstilling”. 4.4 Beskrivelse af de enkelte usecases Beskrivelsen af de enkelte usecases indeholder en specifikation af, hvorledes aktør og usecas interagerer. Usecasebeskrivelsen koncentrerer sig udelukkende om den eksterne funktionalitet og beskriver ikke, hvorledes funktionen udføres internt i Dr. Know. 28 Usecases Vælg brugertype Denne usecase initieres, når Dr. Know startes, og kan derfor initieres af begge aktører, hvilke er de to brugere af systemet. Brugeren skal i et loginvindue vælge, om han er kliniker eller udvikler. Hvis brugertypen ”Kliniker” vælges, skal brugeren desuden efterfølgende indtaste specifikke oplysninger om klinikeren i loginvinduet. Usecasen termineres for begge brugere ved accept af brugertypeindstillinger. Vælg patientgruppe Denne usecase giver brugeren mulighed for at vælge, hvilken patientgruppe vedkommende vil beskæftige sig med. Usecasen kan både initieres af klinikeren og udvikleren. Usecasen initialiseres ved, at brugeren vælger én af de tre patientgrupper ud fra en visualiseret liste. For klinikeren vises patientcase nr. 1 inden for denne patientgruppe automatisk. For udvikleren vil de klinikere, der har indtastet respiratorindstillingerne for den valgte patientgruppe, blive tilgængelige. For begge brugere terminerer usecasen ved valg af patientgruppe. Hjælp Formålet med denne usecase er, at brugeren kan få hjælp til og information om Dr. Know. Usecasen initieres ved, at brugeren vælger at se Hjælp-funktionens indhold, og termineres ved, at brugeren lukker vinduet. Både klinikeren og udvikleren har mulighed for at initiere denne usecase. Afslut Formålet med denne usecase er, at brugeren kan afslutte at køre Dr. Know. Usecasen initieres ved, at brugeren vælger at afslutte programmet. Brugeren kan i dette tilfælde både være kliniker og udvikler. Hvis klinikeren vil afslutte, skal Dr. Know spørge klinikeren, om de indtastede respiratorindstillinger er godkendte. Hvis udvikleren vil afslutte, skal Dr. Know spørge udvikleren, om de beregnede lambdaværdier er gemt. Skift bruger Det skal være muligt for brugertypen kliniker at kunne skifte bruger uden at afslutte Dr. Know, idet flere forskellige klinikere skal anvende systemet. Usecasen initieres ved, at klinikeren i klinikervinduet vælger at skifte bruger, hvorefter nye brugerindstillinger i login-vinduet kan foretages. Usecasen terminerer, når ”Vælg brugertype”-usecasen initieres. Vælg patientcase Denne usecase gør det muligt for klinikeren at vælge mellem de 20 opstillede patientcases integreret i Dr. Know. Når en patientgruppe er valgt, vises patientcase nr. 1 automatisk, hvorved denne usecase giver klinikeren mulighed for at springe til en anden patientcase. Usecasen initieres ved, at klinikeren vælger et patientcasenummer fra en liste, og termineres, når den valgte patientcase vises. 29 Usecases Simulér patientvariable Formålet med denne usecase er, at få et input til Dr. Know fra klinikeren. Usecasen initieres ved, at klinikeren vælger at simulere patientvariable ud fra indtastede respiratorindstillinger, og usecasen afsluttes efter endt simulering, hvorefter de simulerede patientvariable vises for klinikeren. Godkend indstilling Formålet med denne usecase er, at få lagret de indtastede respiratorindstillinger. Denne usecase initieres ved, at klinikeren godkender de indtastede respiratorindstillinger og terminerer, når data er gemt. Vælg kliniker Udvikleren skal kunne vælge mellem de klinikere, der har godkendt respiratorindstillinger for alle patientcases i den allerede valgte patientgruppe, og desuden skal de klinikere, der ikke har givet indstillinger for den valgte patientgruppe, ikke vises. Hvis udvikleren vil beregne lambdaværdier for alle klinikere, der har godkendt respiratorindstillinger i den valgte patientgruppe, skal denne mulighed også kunne vælges. Usecasen initieres af udvikleren ved, at han vælger en enkelt kliniker eller alle klinikere ud fra en liste, hvorefter usecasen termineres. Beregn lambdaværdier Denne usecase giver udvikleren mulighed for at initiere en beregning af lambdaværdierne. Usecasen initieres ved, at udvikleren vælger at starte en beregning. Det skal illustreres for udvikleren, når Dr. Know foretager en beregning samt når beregningen er fuldendt. Hvis beregningen af lambdaværdierne ikke lykkes, skal udvikleren informeres om dette. Når beregningen af lambdaværdierne er fuldendt, vises lambdaværdierne for udvikleren automatisk, og usecasen termineres herefter. Gem lambdaværdier Formålet med denne usecase er, at udvikleren kan lagre de beregnede lambdaværdier, så de kan implementeres i INVENT. Usecasen initieres ved, at udvikleren vælger at gemme lambdaværdierne, hvorefter lagringsdestination vælges, og usecasen terminerer, når udvikleren informeres om, at lambdaværdierne er lagret. Åbn gemt lambda Formålet med denne usecase er, at udvikleren skal kunne hente tidligere gemte lambdaværdier frem. Usecasen initieres ved, at udvikleren vælger at åbne en gemt lambdaberegning og termineres, idet lambdaværdier visualiseres. 30 KAPITEL 5 Deploymentdiagram I dette kapitel foreligger en beskrivelse af den fysiske arkitektur af Dr. Know, samt en beskrivelse af applikationsområdet. Formålet med dette, er at illustrere tilhørsforholdet mellem Dr. Know og INVENT. 5.1 INVENT vs. Dr. Know Relationen mellem INVENT og Dr. Know kan illustreres ved brug af et deploymentdiagram[6]. Et deploymentdiagram afbilder runtimearkitekturen af et system, eksekveringsmiljøer, samt de komponenter der er indeholdt i arkitekturen. Herved beskrives hardwarestrukturen samt det software der eksekveres under hver enhed. Dr. Know anvender dele af INVENT i form af kildekode for de fysiologiske modeller. Dette indikerer at INVENT er en del af Dr. Know-arkitekturen, men understreger også at dette er den eneste relation mellem to systemer set ud fra et softwaresynspunkt. Således bliver der en skarp skillelinie mellem softwaren i Dr. Know og softwaren i INVENT. På Figur 5.1 på næste side er deploymentdiagrammet for Dr. Know illustreret. 5.2 Applikationsområde Applikationsområdet kan defineres som den kontekst, hvori Dr. Know skal implementeres og anvendes. Dr. Know skal anvendes af to brugertyper, som er henholdsvis udvikleren og klinikeren. Udvikleren er rekvirent af Dr. Know, og denne brugertype skal bruge outputtet fra Dr. Know, dvs. vægtningen af penaltyfunktionerne. Kliniker er betegnelsen for den bruger, der giver input til Dr. Know, ved at indtaste respiratorindstillinger til de forskellige patientgrupper. Der eksisterer to brugere af Dr. Know: Klinikeren som er en bruger af systemet og udvikleren, der er den egentlige rekvirent af Dr. Know. Det er herved muligt at inddele applikationsområdet i et primært og et sekundært applikationsområde. Den kontekst hvor udvikleren vælger at implementere Dr. Know, i INVENT, betegnes som det primære applikationsområde. Dette skyldes, at problemområdet, som er vægtningen af penaltyfunktionerne, skal anvendes i 31 Deploymentdiagram ttvuwxFy zw|{v{ }F~ 5v vHvv v F v( Figur 5.1: Deploymentdiagrammet illustrerer det hardware og software som Dr. Know består af. Det yderste element kaldes for en node, og repræsenterer et fysisk stykke hardware med beregningsegenskaber eller processorkraft. Den PC som Dr. Know kører på vil derfor være en node. De to komponenter repræsenterer henholdsvis kildekoden for Dr. Know og dele af INVENT. De tre stereotyper som findes i Dr. Know: Boundary, control og entity er ligeledes visualiseret. INVENT. Det sekundære applikationsområde er den kontekst, det vælges at implementere Dr. Know i, således klinikeren har mulighed for at give input til systemet. Dette være sig eksempelvis på afdelingen eller på en privat computer. 32 KAPITEL 6 Aktivitetsdiagrammer Dette afsnit indeholder aktivitetsdiagrammer som beskriver de definerede usecases. Aktivitetsdiagrammet er et dynamisk diagram der beskriver et sekventielt flow af de processer der forekommer i hver enkelt usecase. Det primære formål med konstruktionen af aktivitetsdiagrammer er, at få defineret de funktioner der ligger bag den enkelte usecase. 6.1 Inddeling efter stereotyper En af fordelene ved at anvende aktivitetsdiagrammer er, at de forskellige processer der forløber, kan placeres i såkaldte aktivitets partitioner. Aktivitets partitionerne grupperer processerne efter, hvor samt hvem der er ansvarlig for at processen eksekveres. [6] Der findes tre stereotyper som anvendes til inddeling efter hvor en given proces foregår. I det efterfølgende beskrives funktionaliteten af de tre stereotyper [6]: 1. Boundary anvendes til at kommunikere og præsentere information i ét system til et andet. Dette andet system kan enten være en human-bruger af systemet eller en maskine. 2. Entity anvendes til at lagre information fra systemet. De er herved persisterende. 3. Control er en stereotype der ofte anvendes til at forbinde boundary objekter med entity objekter samt til at håndtere en sekvens af operationer i systemet. Control klassen anvendes således til at håndtere en enkelt eller få usecases. I de efterfølgende aktivitetsdiagrammer for usecasene i Dr. Know anvendes følgende to aktivitets partitioner: Boundary og control. Denne inddeling gør det muligt at analysere og realisere usecasene mere detaljeret. At udelukkende disse to inddelinger forekommer, skyldes at det i aktivitetediagrammerne endnu ikke er muligt at fastsætte om en given proces forløber i entity eller control. I de efterfølgende afsnit vil der være en frase fra usecasebeskrivelsen som understreger hvorfor den pågældende aktivitet er vigtig for Dr. Knows rekvirenter og brugere. Efter hvert aktivitetsdiagram findes en definition af de funktioner der kan findes ud fra usecasen. Eksisterer den samme funktion i flere aktivitetsdiagrammer, er dette illustreret med en *. 33 Aktivitetsdiagrammer 6.2 Fælles aktiviteter I følgende afsnit beskrives usecases som begge brugertyper benytter. Det drejer sig om ”Vælg brugertype”, ”Vælg patientgruppe”, ”Hjælp” og ”Afslut”. 6.2.1 Vælg brugertype Under usecasebeskrivelsen, er det fundet, at de kommende brugere ønsker at kunne skelne mellem hvilken brugertype der skal anvende systemet. Dette kan understreges af følgende ønske: ”Når en bruger skal anvende Dr. Know, skal brugeren i et loginvindue vælge brugertype. Her eksisterer der to muligheder: Kliniker eller udvikler.” Figur 6.1: Aktivitetsdiagram hvor det sekventielle flow i usecasen ”Vælg brugertype” illustreres. Definerede funktioner: Ud fra aktivitetsdiagrammet for usecasen, ”Vælg brugertype”, er det muligt at definere følgende funktioner: 34 Aktivitetsdiagrammer Navn kontrollerTypeBruger* startKlinikerVindue startUdviklerVindue kontrollerOplysninger hentOplysninger 6.2.2 Beskrivelse Undersøger hvilken bruger der er valgt Starter kliniker sessionen Starter udvikler sessionen Tjekker om kliniker har udfyldt oplysninger Henter oplysninger om kliniker og gemmer dem Type Control Control Control Control Control Vælg patientgruppe Der er fundet i usecasebeskrivelsen at både klinikeren og udvikleren ønsker at kunne vælge at arbejde med de tre forskellige patientgrupper: postoperativ hjertepatient, intensiv patient og hjernetraumepatient. For klinikeren er der udtrykt ønske om følgende: ”Klinikeren skal kunne vælge mellem de tre patientgrupper: Post-operative hjertepatienter, hjernetraumepatienter og intensivpatienter.” For udvikleren er der udtrykt ønske om følgende: ”Udvikleren skal kunne vælge mellem de tre patientgrupper: post-operative hjertepatienter, hjernetraumepatienter og intensivpatienter. Udvikleren skal kunne beregne vægtninger for penaltyfunktionerne for hver af de tre patientgrupper.” Figur 6.2: Aktivitetsdiagram hvor det sekventielle flow i usecasen ”Vælg patientgruppe” illustreres. Definerede funktioner: Ud fra aktivitetsdiagrammet for usecasen, ”Vælg patientgruppe”, er det muligt at definere følgende funktioner: 35 Aktivitetsdiagrammer Navn kontrollerTypeBruger* hentPatientgrupper visPatientgrupper indlæsPatientcase hentKlinikerListe 6.2.3 Beskrivelse Undersøger hvilken bruger der er valgt Henter en liste med patientgrupper Viser listen med patientgrupper Henter og viser 1. patientcase Henter liste med klinikere Type Control Control Boundary Control Control Hjælp For at lette brugen af Dr. Know, skal begge brugertyper have mulighed for, at kunne få information omkring brugen af systemet. Dette er udtrykt således i usecasebeskrivelsen: ”Der skal samtidigt være mulighed for at få information om Dr. Know, herunder vejledning og hjælp til brugen af systemet for både klinikeren og udvikleren.” Figur 6.3: Aktivitetsdiagram hvor det sekventielle flow i usecasen ”Hjælp” illustreres. Definerede funktioner: Ud fra aktivitetsdiagrammet for usecasen, ”Hjælp”, er det muligt at definere følgende funktioner: Navn kontrollerTypeBruger* hentHjælp visHjælp 6.2.4 Beskrivelse Undersøger hvilken bruger der er valgt Henter hjælpfilen Viser hjælpfilen Type Control Control Boundary Afslut Begge brugertyper skal have mulighed for at terminere Dr. Know på et vilkårligt tidspunkt i programmet. Definerede funktioner: Ud fra aktivitetsdiagrammet for usecasen, ”Afslut”, er det muligt at definere følgende funktioner: 36 Aktivitetsdiagrammer Figur 6.4: Aktivitetsdiagram hvor det sekventielle flow i usecasen ”Afslut” illustreres. Aktivitetsdiagrammet for denne usecase er kun illustreret for når klinikern aktiverer afslut. Navn kontrollerDataGemt* gemData* afslutProgram 6.3 Beskrivelse Undersøger om der findes data som ikke er gemt Gemmer data som ikke er gemt Lukker programmet Dr. Know Type Control Control Control Klinikeraktiviteter I afsnittet bliver usecases for klinikeren gennemgået. Det drejer sig om følgende usecases: ”Skift bruger”, ”Vælg patientcase”, ”Simuler patientvariable” og ”Godkend indstilling”. 6.3.1 Skift bruger Fra klinikerens del af systemet skal der være mulighed for at skifte til en anden bruger af systemet. Både såfremt en anden kliniker ønsker at anvendes systemet, eller hvis en udvikler ønsker at beregne lambda-værdier. Dette er udtrykt således i usecasebeskrivelsen: ”Klinikeren kan skifte bruger uden at skulle afslutte systemet.” Definerede funktioner: følgende funktioner: Ud fra aktivitetsdiagrammet for usecasen, ”Skift bruger”, er det muligt at definere 37 Aktivitetsdiagrammer Figur 6.5: Aktivitetsdiagram hvor det sekventielle flow i usecasen ”Skift bruger” illustreres. Navn kontrollerDataGemt* gemData* afslutSession startNySession 6.3.2 Beskrivelse Undersøger om der findes data som ikke er gemt Gemmer data som ikke er gemt Afslutter den nuværende session Starter loginvinduet Type Control Control Control Control Vælg patient Der skal være mulighed for at klinikeren kan vælge hvilken patientgruppe samt hvilken patient denne ønsker at indstaste respiratorindstillinger for. Dette ønske kommer til udtryk således: ”Klinikeren skal kunne vælge mellem de tre patientgrupper: post-operative hjertepatienter, hjernetraumepatienter og intensivpatienter. Klinikeren skal kunne vælge mellem de 20 fiktive patientcases.” Definerede funktioner: Ud fra aktivitetsdiagrammet for usecasen, ”Vælg patient”, er det muligt at definere følgende funktioner: 38 Aktivitetsdiagrammer Figur 6.6: Aktivitetsdiagram hvor det sekventielle flow i usecasen ”Vælg Patient” illustreres. Navn hentPatientOplysninger indlæsPatientdata visPatientdata 6.3.3 Beskrivelse Henter patientnummer og patientgruppe Indlæser gemt patientdata Visualiserer patientdata Type Boundary Control Boundary Simulér patientvariable Klinikeren præsenteres for patientparametrene og for at kunne vurdere om de valgte respiratorindstillinger er hensigtsmæssige for den enkelte patient, skal der være mulighed for at simulere hvorledes patientvariablene vil være for netop disse respiratorindstillinger. Dette er udtrykt således i usecasebeskrivelsen: ”Hver patientcase skal indeholde følgende konstante patientparametre: shunt, FA2, Vd, Q, compliance, modstanden i respirationsvejene, VO2 , VCO2 , DPG, Hb, COHb, MetHb og temperatur, og hver patientcase skal indeholde en allerede foreslået respiratorindstilling med tilhørende simulerede patientvariable.” Figur 6.7: Aktivitetsdiagram hvor det sekventielle flow i usecasen ”Simuler patientvariable” illustreres. 39 Aktivitetsdiagrammer Definerede funktioner: Ud fra aktivitetsdiagrammet for usecasen, ”Simuler respirator”, er det muligt at definere følgende funktioner: Navn hentKlinikerIndstilling* kontrollerIndstilling* indlæsParametre udregnVariable visVariable 6.3.4 Beskrivelse Henter klinikerens respiratorindstilling Undersøger om alle felter er udfyldte Indlæser gemte patientparametre Udregner patientvariable Visualiserer udregnede patientvariable Type Boundary Control Control Control Boundary Godkend indstilling Når klinikeren har fundet de mest hensigtsmæssige respiratorindstillinger for den udvalgte patient, skal indstillingerne kunne godkendes. Dette ønske er beskrevet således i usecasebeskrivelsen: ”Klinikeren skal kunne indtaste nye respiratorindstillinger for hhv. respirationsfrekvens, tidalvolumen og inspireret oxygenfraktion. Klinikeren skal herefter kunne gentage og/eller godkende respiratorindstillingen, der automatisk skal gemmes ved godkendelse.” Figur 6.8: Aktivitetsdiagram hvor det sekventielle flow i usecasen ”Godkend indstilling” illustreres. Definerede funktioner: Ud fra aktivitetsdiagrammet for usecasen, ”Godkend indstilling”, er det muligt at definere følgende funktioner: Navn hentKlinikerIndstilling* kontrollerIndstilling* gemIndstilling Beskrivelse Henter klinikerens respiratorindstilling Undersøger om alle felter er udfyldte Gemmer klinikerens respiratorindstilling 40 Type Boundary Control Control Aktivitetsdiagrammer 6.4 Udvikleraktiviteter I dette afsnit gennemgås aktivitetsdiagrammerne for usecases for udvikleren. Det drejer sig om følgende usecases: ”Vælg kliniker”, ”Beregn lambda”, ”Gem lambda” og ”Åben gemt lambda”. 6.4.1 Vælg kliniker For at udvikleren kan få et indblik i hvorledes klinikerens erfaring har indflydelse på indstillingen af respiratoren, er der givet udtryk om at udvikleren kan søge på en specifik kliniker. Dette er udtrykt således i usecasebeskrivelsen: ”Udvikleren skal kunne vælge at få beregnet vægtninger for enten én af klinikerne eller alle klinikere inden for den valgte patientgruppe.” Figur 6.9: Aktivitetsdiagram hvor det sekventielle flow i usecasen ”Vælg kliniker” illustreres. Definerede funktioner: Ud fra aktivitetsdiagrammet for usecasen, ”Vælg kliniker”, er det muligt at definere følgende funktioner: Navn indlæsKliniker visKliniker kontrollerKliniker* Beskrivelse Finder de klinikere som har anvendt Dr. Know Viser de klinikere der er fundet i Dr. Know Undersøger om kliniker har gemt data 41 Type Control Boundary Control Aktivitetsdiagrammer 6.4.2 Beregn lambda Udvikleren skal have mulighed for at kunne beregne lambda-værdier. Dette er formuleret således i usecasebeskrivelsen: ”Udvikleren kan vælge at få beregnet vægtninger for den valgte patientgruppe. Mens beregningen udføres, skal dette visualiseres. Når beregningen er udført, visualiseres vægtningerne automatisk for udvikleren, én for hver af de fire penalties.” At der skal være indtastet respiratorindstillinger for mindst 20 patienter i en patientgruppe, skyldes at værdien af den beregnede lambda skal være pålidelig. Det er derfor vurderet at 20 patientcases er nok for at opfylde dette krav. Figur 6.10: Aktivitetsdiagram hvor det sekventielle flow i usecasen ”Beregn lambda” illustreres. Denne usecase er illustreret for beregningen af lambda-værdier for én specifik kliniker. 42 Aktivitetsdiagrammer Definerede funktioner: Ud fra aktivitetsdiagrammet for usecasen, ”Beregn lambda”, er det muligt at definere følgende funktioner: Navn kontrollerKliniker* indlæsKlinikerData beregnLambda visStatus visLambda* 6.4.3 Beskrivelse Undersøger om kliniker har gemt data Indlæser klinikerens respiratorindstillinger Beregner lambdaværdier for klinikeren Viser status for udregningen af lambda Visualiserer de udregnede lambdaværdier Type Control Control Control Boundary Boundary Gem lambda Efter udvikleren har beregnet lambdaværdier, skal der være mulighed for at gemme de beregnede værdier. Dette er formuleret således i usecasebeskrivelsen: ”Udvikleren skal kunne lagre de beregnede vægtninger og patientgruppenavnet, der er beregnet for... ” Figur 6.11: Aktivitetsdiagram for usecasen ”Gem Lambda”. Definerede funktioner: Ud fra aktivitetsdiagrammet for usecasen, ”Gem lambda”, er det muligt at definere følgende funktioner: Navn kontrollerLambda åbenGemFil hentLambda gemLambda Beskrivelse Undersøger om der er udregnet lambdaværdier Åbner en filbrowser hvor filnavn angives Henter lambdaværdierne Gemmer Lambdaværdier i den angivede fil 43 Type Control Control Boundary Control Aktivitetsdiagrammer 6.4.4 Åbn gemt lambda For at udvikleren skal kunne anvende de beregnede lambdaværdier i INVENT, skal der være mulighed for at hente de gemte lambda-værdier frem igen. Dette er udtrykt således: ”....udvikleren skal desuden kunne hente tidligere beregnede vægtninger frem.” Figur 6.12: Aktivitetsdiagram for usecasen ”Åbn Gemt Lambda”. Definerede funktioner: Ud fra aktivitetsdiagrammet for usecasen, ”Åbn gemt lambda”, er det muligt at definere følgende funktioner: Navn åbenFil kontrollerFilnavn kontrollerFilformat indlæsFil visLambda* Beskrivelse Åbner en filbrowser Undersøger om filnavn eksisterer Undersøger om filformatet er korrekt Indlæser filen med gemte lambdaværdier Visualiserer de udregnede lambdaværdier 44 Type Control Control Control Control Boundary Aktivitetsdiagrammer 6.5 Samlet funktionsoversigt I de efterfølgende figurer, vil der være en samlet oversigt over alle de definerede funktioner i Dr. Know. ¤¥v¦ 8§ v¨ ¥ ¡ ¢£ ¦¡0 ¡v¨ ¨ ©¢£F¤J 8ª|«v ¬ ±¿|°v ¥À«v µ§ ¨ ¦v¦ ¨ § § ¦v F°v Fv ¨ « ¾²¡ 8 ¡¨ ¥5v J¨ § § ¦v ®¯§ |°ª v v ¦ ¨ § § ¦v ¥|¥|¥v§ ¡v|v ¾²¡ 8 ¡¨ ¥5v ±°|§ ¦ ¨ v ®²§ |°ª| v v ª|°§ ¦ ¨ ¥|¥¥§ ¡|v ¾²¡ 8 ¡¨ ¦¡0 ¡v¨ ¨ 8³´£¨ ¢ ¥v§ « ©Ä v¦ ¦ ¡¹Ì¦ ¨ § § ¦v µ|v ª°» ¢¨ °Fv¨ ¨ ´¡£v¨ ¢ ¥v§ |«v 8| ¾²¡ 8 ¡¨ µ|v 8³´£¨ ¢¥v§ |«v Ã5v F¡v£¨ ¢¥v§ |«v F¡v¹Ì¦ ¨ § v§ ¦ ¡«Í«v¹Â¹´v F°v¹ ¾²¡ 8 ¡¨ ¦¡0 ¡v¨ ¨ ©¢£F¤J 8ª|«v ¬ ±¿|°v ¥À«v µ§ ¨ ¦vÂÁ 8ª|«v F°v v¨ « ¾²¡ 8 ¡¨ µ|v ¼8§ v 5« 0ªv££|v Ã5v Fv¨ § ¥Â¹´|°Ç£|8§ 5« 0ªv££|v ¾²¡ 8 ¡¨ § ¥F¼H0§ « 8ª£v£| ®¯§ ¥|v ¨ § ¥5v¹´|°Ç£|8§ v 5« 8ª££|v ¤¡vª|°v ¢ § °¨ |¥¼H 8§ v Ë|¥ Ã5v F¡«´§ ¥v ÉÈÊ£ 8§ v Ë|¥ ¾²¡ 8 ¡¨ ¦¡0 ¡v¨ ¨ ©¢£F¤J 8ª|«v ¬ ±¿|°v ¥À«v µ§ ¨ ¦vÂÁ 8ª|«v F°v v¨ « ¾²¡ 8 ¡¨ µ|v ÃFÄ Åƨ £ Ã5v µ(Ä Åƨ £|»5§ ¨ v ¾²¡ 8 ¡¨ § ¥FÃFÄ Åƨ £ ®¯§ ¥|v µ#Ä Åƨ £|»8§ ¨ ¤¡vª|°v ¢ ¦¡0 ¡v¨ ¨ ¶5v·¸v¹¸¬ ±¿|°v ¥À«v F¡v¹Î°v F»5§ |°¥´°´¥|¡v¹Ï§ ¦ ¦´v F«v¹Ð ¾²¡ 8 ¡¨ «v¹º¶ |¬ ·¸¹Â¹´v F°´¥|¡v¹Ì§ ¦ ¦´v¨ ¨ v °´v F«v¹Ð ¾²¡ 8 ¡¨ »¥¨ ª ¼½ ¡« ¹ Òª¦ ¦v ɶ¿ ÊJ|¡Ó ¾²¡ 8 ¡¨ ¦¡0 ¡v¨ ¨ ¶5v·¸v¹¸¬ ±¿|°v ¥À«v F¡v¹Î°v F»5§ |°¥´°´¥|¡v¹Ï§ ¦ ¦´v F«v¹Ð ¾²¡ 8 ¡¨ «v¹º¶ |¬ ·¸¹Â¹´v F°´¥|¡v¹Ì§ ¦ ¦´v F«v¹Ð ¾²¡ 8 ¡¨ »¥¨ ª 8É¥¥§ ¡ ѯ» ¥¨ ª v F°vªÅÆ |°v´¥|¥¥§ ¡ ¾²¡ 8 ¡¨ ¥5v ½¢É¥|¥v§ ¡v v v ¨ ¡|«§ § |°ª| ¾²¡ 8 ¡¨ µ|v ¼8§ v 0³Ö£¨ ¢¥§ |«v Ã5v £|8§ v 0vª¹Â¹´ ¡|«Ç£|8§ 5« 0ªv££| ¤¡vª|°v ¢ § °¨ |¥¼H 8§ v °5 Ô °¨ ÅÕ¥ «v¹Ð£|0§ °5 ¾²¡ 8 ¡¨ § ¥F¼H0§ °5 ®¯§ ¥ª¨ § ¥ v £|8§ v 5°v ¤¡vª|°v ¢ µ|v ½¨ § § ¦ Ô |°¥0§ ¨ ¨ § |«¬ Ã5v ¦ ¨ § § ¦ v|¥Â |¥v£§ ¡ 8§ |°¥0§ ¨ ¨ § |« ¤¡vª|°v ¢ ¦¡0 ¡v¨ ¨ Ô |°¥0§ ¨ ¨ § |« ±¿|°v ¥À«v F¡v¹Îv¨ ¨ Ö»¨ 5v Fv Hª|°» ¢¨ ° ¾²¡ 8 ¡¨ § °¨ |¥¼H v¹´ 8 Ô °¨ ÅÕ¥ «v¹Ð5£ 8§ v 8£| v¹´ 8 ¾²¡ 8 ¡¨ ª|° «®×v 0§ Áv¨ ±° |«| H£|0§ 8§ vÁ¨ ¾²¡ 8 ¡¨ § ¥®×v 0§ Áv¨ ®¯§ ¥ª¨ § ¥ v F°Øª|° «|°Â£|0§ 8§ vÁ¨ ¤¡vª|°v ¢ Figur 6.13: Oversigt over alle de funktioner der er defineret ud fra usecasene. Fortsættes i tabel 6.14 på næste side. 45 Aktivitetsdiagrammer ÙÚÛÜ äßåæ à8ç Û ßvè åß ÝÞßvà5ßáÞ âã|ß |ßvÜ ÞìJè ç Üvç æßvàü Ü|évå Þ8ç è è ç Üïó ßvÜ ÞßàHæ è ç Üç æßvàßÜåÂàß|åvãç àÚÞáà8ç ÜéåÞ0ç è è ç Ü|ï äávòÜ|évÚà â æávÜ Þ8àáè è ßvàü Ü|évå Þ8ç è è ç Üï ù¿ÜéßàåvúFïvßàáñûÚè è ß´ö ßè Þ5ßvàFßvàòéö âè éÞß ô²áÜ Þ8àávè ïßvñºü Ü|éåÞ0ç è è ç Ü|ï ¸ßvñÂñ´ßàHæ è ç Üç æßvàßÜåÂàß|åvãç à5ÚÞáà8ç ÜéåÞ0ç è è ç Ü|ï ô²áÜ Þ8àávè ÿç Ü|évßàéßÂæ è ç Üç æßàß´åáñ|ÚvàFÚvÜÛ ßvÜ|éÞÉí¿àìJÜ|á÷ ô²áÜ Þ8àávè æávÜ Þ8àáè è ßvàìJè ç Üç æßàó ù¿ÜéßàåvúFïvßàáñÌæ è ç Üvç æßvà|ÚvàïßñÐÞFévÚ ÞÚ ô²áÜ Þ8àávè ç Ü|éè êëåFìJè ç Üç æßvàíÚ ÞÚ ü Ü|éè êÕå|ßvàHà5ßåvãç àÚÞ5ávà8ç Ü|évå Þ8ç è è ç ÜïßvàFöávàæ è ç Üç æßà ô²áÜ Þ8àávè î|ßvàßïÜFð ÚvñÂî|éÚ äHßvà5ßïÜßàHè ÚvñÂî|éÚ Û êÆàéç ßàöávàæ è ç Üç æßvàßÜ ô²áÜ Þ8àávè Ûç åvÝÞÚÞ0ò|å ý²ç åßvàFåÞ5ÚÞ8ò|å´öávàòéàß|ïÜç Ü|ïvßÜ´ÚöHè ÚvñÍîéÚ äávòÜ|évÚà â Ûç åð ÚñÂîéÚ|ó ý²ç åvò|Úvè ç å|ßvàßàéßÂòéàß|ïÜß|évßÂè ÚvñÂî|éÚ Û êÆàéç ßà äávòÜ|évÚà â æávÜ Þ8àáè è ßvàðÚñÂî|évÚ ù¿ÜéßàåvúFïvßàáñûéßvàFßvàò|éà5ßïÜß Þè ÚñÂîéÚÛêÆàéç ßvà õ î Ü|ßvàßÜ´ö8ç è îàá÷ÐåßàÛ ávàö8ç è Ü|ÚÛÜ´ÚÜ|ïç Û ßå ô²áÜ Þ8àávè ç Ü|éè ÚßåFìJè ç Üç æßvà Ûç åì½è ç Üç æßà þ î|ßvܸßvñºÿç è |ßvÜ Þð ÚvñÂî|éÚ ý²ç åßvàFéßØæ è ç Üvç æßvà5ßÖéßvàFßvàFö8òvÜ|éßÞÉüí¿àìJÜ|á÷ ßvÜ ÞßàHè ÚvñÂî|éÚ Û êÆàéç ßà8Ü|ß äávòÜ|évÚà â ô²áÜ Þ8àávè äávòÜ|évÚà â ïßvñºð ÚvñÂî|éÚ ¸ßvñÂñ´ßàHè ÚvñÂî|éÚ Û êÆàéç ßà½ü éßvÜ´ÚÜïç ÛÜ|ß´ö8ç è ô²áÜ Þ8àávè þ î|ßvÜFÿç è õ îÜ|ßvàö8ç è îàá÷øå|ßvà ô²áÜ Þ8àávè æávÜ Þ8àáè è ßvàÿç è Ü|Ú ÛÜ ù¿ÜéßàåvúFïvßàáñûö8ç è Ü|Ú ÛÜ´ßæåvç åÞßàßvà ô²áÜ Þ8àávè æávÜ Þ8àáè è ßvàÿç è ÿávà8ñ´Ú Þ ù¿ÜéßàåvúFïvßàáñûö8ç è öávà0ñ´ÚÞß ÞFßvàæávà8àßæÞ ô²áÜ Þ8àávè ç Ü|éè êëåFÿç è ü Ü|éè êÕå|ßvàö8ç è ßÜÂñ´ß|éÂévß´ïßvñ¸ÞßÂè ÚñÂî|évÚÛêÆàéç ßvà ô²áÜ Þ8àávè Ûç åð ÚñÂîéÚ|ó ý²ç åvò|Úvè ç å|ßvàßàéßÂòéàß|ïÜß|évßÂè ÚvñÂî|éÚ Û êÆàéç ßà äávòÜ|évÚà â Figur 6.14: Oversigt over alle de funktioner der er defineret ud fra usecasene. Fortsat fra tabel 6.13 på foregående side. 46 KAPITEL 7 Grafiske brugergrænseflader I dette kapitel vil der foreligge en visualisering af de fire forskellige grafiske brugergrænseflader, GUI´s, i Dr. Know: loginvindue, klinikervindue, udviklervindue, grafvindue og hjælpvindue. Disse GUI´s er mock-ups baseret på de tidligere omtalte usecases. Formålet med dette er at finde eventuelle udeladte funktioner ved, at gennemgå funktioner, der ligger bag hver enkelt knap på GUI´en. Disse funktionsgennemgange findes i appendiks C på side 147. 7.1 Loginvindue Det er valgt, at Dr. Know skal have et loginvindue. Det skyldes blandt andet, at systemet har to brugertyper, henholdsvis klinikeren eller udvikleren, som hver især ikke har faglig kompetence inden for hinandens områder og dermed ikke skal anvende en anden GUI, end den, der er konstrueret til ens egen faggruppe. Når Dr. Knowapplikationen opstartes, initieres den første GUI for brugeren af Dr. Know. Den første GUI vil være Dr. Know loginvinduet, som er en fælles GUI for både udviklere og klinikere. Figur 7.1 på næste side viser et mock-up af loginvinduet i Dr. Know. I appendiks vil være en beskrivelse af GUI-elementerne: knapper, input- og outputfelter i afsnit C.1 på side 147 samt en beskrivelse af de tilhørende funktioner i afsnit C.5.1 på side 153. 47 Grafiske brugergrænseflader ! "$#&% '("&)% * +&,)&- TU! 8 9:8 6)% .0/&1 +&! /&)3254(1763! 8 9:8 6)%DC?:)% ! "&) ;<* 8 ! ! 8 9":2:#()* )3"<9():! 23) =>7% 94?79 @71 * )% 94?79 A9(B:8 )9&9:8 * )* AC1 /:)! 8 9(" EGF PQ RL S HJI K3L MON Figur 7.1: Mock-up af Dr. Know loginvinduet. Brugeren har mulighed for at vælge hvilken type bruger vedkommende er. Vælger brugeren, at vedkommende er kliniker, da skal denne afgive forskellige informationer om sig selv og sit arbejde. Når brugeren har valgt brugertype, og eventuelt udfyldt data om sig selv, da kan OK-knappen aktiveres. OK-knappen kalder enten et klinikervindue eller et udviklervindue frem. Knappen Hjælp kalder et hjælpvindue frem, som giver brugeren assistance og vejledning i brugen af Dr. Know. Afslut-knappen terminerer loginvinduet og Dr. Know. 7.2 Klinikervindue Klinikerdelen af Dr. Know konstrueres med henblik på, at indsamle klinikerens subjektive holdning og formalisering af præferencestruktur. Klinikervinduet konstrueres med henblik på at vedkommende skal være i stand til at vurdere en patients tilstand og simulere nogle patientvariable ud fra nogle indtastede indstillinger. Klinikeren skal således præsenteres for patientvariablene og parametrene på en sådan måde, at vedkommende har mulighed for at vurdere patientens fysiologiske tilstand. Klinikervinduet startes op fra loginvinduet, når brugeren har valgt brugertypen ”Kliniker”, udfyldt oplysninger og aktiveret ”OK”-knappen. I samarbejde med en kliniker og med inspiration fra INVENT er klinikervinduet konstrueret. Klinikeren har givet udtryk for ønske om, at patientparametrene og -variablene visualiseres i to forskellige kolonner eller dele af vinduet. Desuden er der udtrykt ønske om at respiratorindstillingerne ligeledes foretages i en særskilt del af vinduet. Figur 7.2 på modstående side viser en skitse af klinikervinduet i Dr. Know. I appendiks vil være en beskrivelse af GUI-elementerne: knapper, input- og outputfelter i appendiksafsnit C.2 på side 148 samt en beskrivelse af de tilhørende funktioner i afsnit C.5.3 på side 154. 48 Grafiske brugergrænseflader VWXYZ[\^]Y_ `Z` aGbW ¨& |:~3 (:} (|3 } |&© µ¶3®:(°:ª:|·q®¬ ~(± © c<(f3pOu G OrJ <m ¨& |~3 ª:} «&¬ |&© ¹&&~(±&|ª:} «&¬ |&© ²J3ª:³$} |~°:| ¸ } ·3&¬ ¯7~ 3h(Ul 3h(C ¤0À ¤ Á3evJl § O ¿} |:} |¬ 0«:¬ ¯&°0© ¹:&~(±&|3°&º&~(( ·:© 3k eGy5 0q <hqtG 0 ¡ c7(l ¤:(l n¤:q ¤:3Ul nq¤: »¶|3 «¯7¬ ®3|&© yv<G J l o¢ e5d pq JUl o¢ eGd pq ½ |:~(¾&®0«:¬ ¯&° © ¼ ¬ ¯&° © c&C G ¤C n¤:q ¤qUl n¤: y:v7 £U¤7j v 5 eGek(g ¢ g kvJ5 ¥hqu v 5 ¦7h3eGyq J Â0 e5ek(g ¢ g c0nOd s u&3i f3h3i J|3®& } ¯<} ~°:® ¬ ¬ ~±&|}© ²J3ª:³$} |~°:| ´J $&¬ |} | d C s <u ¤00<¤ À G y3i e5d pq Á3ev ol c0d e5f3g h(i ²J3ª:³$} |~°:| vw x$g y :s u h(pqqqp33k3i pqqqp ´J $&¬ |} | jlkmnoh3pqm ´J $:¬ |} | 0xg yOu d h(pOu i f3y3yh z({ |} ~(| } |:( |~( |:} 0xg yOu d h(pOu p3f3eGeh(i rJs t3g fOu Figur 7.2: Mock-up af Dr. Know klinikervinduet. Som det ses, har klinikeren mulighed for at vælge, hvilken patientgruppe og dertilhørende patientcase denne vil arbejde med. Patientparametrene for en valgt patientcase, vil blive vist i tekstfelterne længst til venstre, samt systemets forslag til respiratorindstillinger i tekstfelterne længst til højre. Hjælp- og Afslut-knapperne har samme funktionaliteter som beskrevet under loginvinduet. Skiftbruger-knappen giver klinikeren mulighed for at springe tilbage til loginvinduet og dermed afslutte sin brug af klinikerfunktionaliteten i Dr. Know. Simulér-knappen initierer simuleringen af patientvariable og viser resultatet af simuleringen i form af nye patientvariable, som afspejler konsekvenserne af de indtastede respiratorindstillinger. Godkendknappen gemmer de indtastede indstillinger og kalder den næste patientcase frem for klinikeren. 7.3 Udviklervindue Udviklervinduet konstrueres med henblik på, at udvikleren skal have mulighed for at beregne vægtninger af penaltyfunktionerne, ud fra de respiratorindstillinger som klinikeren har indtastet. Udviklervinduet kaldes fra loginvinduet, hvis brugeren har valgt brugertypen ”Udvikler” og aktiveret OK-knappen. Figur 7.3 på næste side viser et mock-up af udviklervinduet i Dr. Know. Udviklervinduet er konstrueret i samarbejde med en udvikler af INVENT. Her er der givet udtryk for, at der skal være mulighed for at beregne lambda-værdier for en udvalgt patientgruppe. Samtidig skal de beregnede lambda-værdier visualiseres for brugeren samt fejlgrafer for de forskellige respiratorindstillinger. Der er desuden udtrykt et ønske om en mulighed for at hente allerede beregnede lambda-værdier frem. I appendiks vil være en beskrivelse af GUI-elementerne: knapper, input- og outputfelter i appendiksafsnit C.3 på side 151 samt en beskrivelse af de tilhørende funktioner i afsnit C.5.5 på side 159. 49 Grafiske brugergrænseflader ÃÄÅÆÇÈÉ^ÊËÍÌÎÏÐÑ ÒÄ ÓÔ ÕÖ ×(Õ3Ø Ö ÙÚÛÕÜ(Ù3Ø Ý Õ×(Ø ÕÖ Þ0ß$à áâqãqä å æ3çOä áè é3â(âqæ Uì Ý ×&Ý qÕ:Ö ñ7Ü&ì î×&Ý ×(í&ÕÖ ë<Ø Ý ì ì Ý ×(í&îïÕØ Õ(í7×Õì î3Õ ð(ñ<Ö ×(Ù3ò&× ó7ô Ø ÕÖ ×(Ù3ò&× õl×öÝ Õ×&×&Ý Ø Õ3Ø õCô ÷&Õì Ý ×í è æqá:çqæGà ã(ÿ þ ã ù (è(ú(âqæ3å ù å êlêà å ç3å êoæ3è ã Þ0ßà áêOà å ç3å êoæ3è ýCþ æ(çá3æ(ÿlä à ã(ÿ þ ã :æ(è æáç à ã3ÿ þ ã è æqá:ç3å çqá"$ æ(ÿà ã(ÿ þ ã "! ã(ÿ þ ãß$è å æ3è # þ æ3è æqá:çqæOä 7è è 3è áè ãqù æ(è 0ÙÖ ñ:Ø Ö ÙÚÛÕ Ö ì Ý íñí:Õ:×(ÕÖ Ý ×í õCöÝ ÷&ñ:î3Õ Ùì qÙ:ì ñ:î(Õ ìØ Ø ñ :Ý öÝ Ø ÕØ (å æ3è è (è á:è ãù ûü ß$à â è æ(êæ3çú æ3è è (è áè ãqù Þ<ä æ3è è (è á:è ãù ø ù ú(à éOä Figur 7.3: Mock-up af Dr. Know udviklervinduet. Hjælp- og Afslut-knapperne har samme funktion som beskrevet tidligere. ”Beregn lambda”-knappen sætter beregningen af lambdaværdier i gang for en udvalgt patientgruppe. Efter beregningen er fuldført, kan lambdaværdierne gemmes. Der er ligeledes mulighed for at udvælge en bestemt kliniker, der kan udregnes lamdaværdier for. Vælges en bestemt kliniker, vises informationer for denne i form af stilling, fornavn, efternavn, anciennitet og afdeling. ”Åbn gemt lambda”-knappen kalder en file-browser frem, hvor udvikleren kan vælge en fil med gemte lambdaværdier. Når denne fil er valgt, vil lambda-værdier blive visualiseret på udviklervinduet. Der er desuden mulighed for at hente grafvinduer frem for de forskellige respiratorindstillinger. 7.4 Grafvindue For at kunne visualisere forskellen mellem klinikerens og systemets forslag til respiratorindstillinger, er det nødvendigt at konstruere et grafvindue, som kan præsentere disse forskelle for udvikleren. Et mockup af dette vindue ses på Figur 7.4 på modstående side. Dette vindue kaldes fra udviklervinduet, og der eksisterer således tre grafvinduer i alt, ét for hver af de valgte respiratorindstillinger, FiO2 , Vt og f. 50 Grafiske brugergrænseflader %'&)(+*-,/./0214365 798;:<&)&=.<&=><&=?A@ IJ J KJ LDM NPO BDC EF GH Figur 7.4: Mock-up af Grafvindue under Dr. Know udviklervinduet. Grafen visualiserer forskellen mellem klinikeren og systemets forslag til respiratorindstillinger. 7.5 Hjælpvindue Hjælpvinduet kan kaldes fra alle de andre vinduer og giver brugeren information om hvorledes Dr. Know anvendes. Et mock-up af hjælpvinduet kan ses på Figur 7.5. Når hjælpvinduet afsluttes, vendes der tilbage til det oprindelige vindue, hvor hjælpvinduet blev kaldt fra. I appendiks vil være en beskrivelse af GUI-elementerne: knapper, input- og outputfelter i appendiksafsnit C.4 på side 152 samt en beskrivelse af de tilhørende funktioner i afsnit C.5.7 på side 161. Q-R)S+T-U/V/W2X4Y6Z=[]\^ _a`=bdce=e f ghi j4g kmln"o=p qr=`smlnatup vwxsy{z |q=b Figur 7.5: Mock-up af Dr. Know hjælpvinduet. Hjælpvinduet giver klinikeren eller udvikleren hjælp til brugen af Dr. Know. 51 KAPITEL 8 Klassediagram Dette kapitel indeholder en definition af objekter samt klasser. Desuden vil der forefindes en inddeling af objekterne i klasser med tilhørende attributter og adfærd. Afslutningsvis vil der være udarbejdet et klassediagram, som illustrerer den statiske struktur af klasser i problemområdet. Formålet med dette kapitel er at få defineret de nødvendige klasser i Dr. Know. 8.1 Objektkandidater I forbindelse med usecase-diagrammet blev der udarbejdet en tekstuel beskrivelse af Dr. Know, som ses i afsnit 4.1 på side 25. Den tekstuelle beskrivelse anvendes til at finde kandidater til objekterne i Dr. Know. Fremgangsmåden for at finde kandidaterne til objekterne er, at finde navneordene i den tekstuelle beskrivelse og derefter undersøge, om det er nogle, der kan styres, kontrolleres, administreres eller overvåges. [6]. Et eksempel på, hvordan kandidaterne til objekterne er fundet, gives følgende: ”Dr. Know skal kunne simulere patientvariable ud fra de indtastede respiratorindstillinger, hvilke er: FeCO2 , FeO2 , SaO2 , PaO2 , PaCO2 , pHa, SvO2 , PvO2 , PvCO2 , PIP og pHv. Klinikeren skal herefter kunne gentage og/eller godkende respiratorindstillingen, der automatisk skal gemmes ved godkendelse.” Citatet er taget fra den tekstuelle beskrivelse, hvor kandidaterne patientvariable, kliniker og respiratorindstillinger er identificeret ud fra ovenstående metode. Ud fra den beskrevne metode er følgende kandidater til objekter i den tekstuelle beskrivelse identificeret: Patient: Postoperativ hjertepatient, hjernetraumepatient, intensivpatient. Respiratorindstillinger: Respirationsfrekvens, tidalvolumen, inspireret oxygenfraktion. Penaltyfunktioner: Barotraume, acidose/alkalose, oxygentoxicitet, dårlig oxygenering. Patientparametre: FA2, Vd, DPG, Hb, MetHb, COHb, Temperatur, Q, VO2 , VCO2 , BE, compliance, resistance, shunt. 53 Klassediagram } Patientvariable: SaO2 , PaO2 , PaCO2 , pHa, SvO2 , PvO2 , PvCO2 , pHv, FeCO2 , FeO2 , PIP. Kliniker: Fornavn, efternavn, afdeling, anciennitet, stilling. Lambdaværdier: Lambda for barotraume, lambda for acidose/alkalose, lambda for oxygentoxicitet, lambda for dårlig oxygenering. Errorgrafer: Errorgraf for f, errorgraf for FiO2 , errorgraf for Vt. Efter at have identificeret kandidaterne til objekterne i den tekstuelle beskrivelse skal det undersøges, om kandidaten kan eksistere selvstændigt. Kan kandidaten til objektet ikke eksistere selvstændigt, er kandidaten således en attribut til et andet objekt, som attributten afhænger af. En attribut indeholder objektets karakteristiska, som skelner den fra andre objekter. 8.2 Definition af klasser Ud fra de fundne kandidater til objekter er det muligt at definere klasser. Hvis et objekt er det eneste i sin klasse, bliver objektet således til en klasse. Navnet samt forklaring af klassen er først beskrevet, hvorefter en figur øverst indeholder klassens navn, i midterste rubrik klassens attributter, og nederst klassens adfærd, hvis disse er essentielle at fremhæve. Klassernes adfærd indholder de hændelser som sker for objekterne i klassen. Til at finde adfærden for klasserne er bl.a. funktionerne i de udarbejdede aktivitetsdiagrammer i kapitel 6 på side 33 anvendt. PatientState Det er fundet nødvendigt, at der skal eksistere en klasse, der håndterer de tre patientgrupper. Denne betegnes PatientState. Denne klasse indeholder følgende attributter: De patientparametre, der er sat konstante i Dr. Know, klinikerens respiratorindstillinger og de deraf simulerede patientvariable. Patientparametrene er FA2, Vd, DPG, Hb, MetHb, COHb, Temperatur, Q, VO2 , VCO2 , compliance, resistance og Shunt, patientvariable er SaO2 , PaO2 , PaCO2 , pHa, SvO2 , PvO2 , PvCO2 , pHv, FeCO2 og FeO2 , og respiratorindstillinger er f, Vt og FiO2 . PatientState FA2, Vd, DPG, ... SaO2 , PaO2 , ... f, Vt, FiO2 genererePatientState InitialState Det er endvidere fundet nødvendigt, at tilføje en ekstra klasse, der håndterer det forslag systemet kommer med. Det vil sige denne klasse indeholder de initierede værdier for respiratorindstillinger og initierende værdier for simulerede patientvariable for patienten. InitialState SaO2 , PaO2 , ... f, Vt, FiO2 54 Klassediagram Settings Det er valgt, at konstruere en klasse der håndterer de respiratorindstillinger, som klinikeren fastsætter. Denne klasse betegnes Settings, og skal anvendes til beregningen af lambdaværdier. Settings f, Vt, FiO2 Kliniker For at kunne håndtere de informationer klinikeren indtaster omkring sig selv, konstrueres denne klasse. De informationer der indtastes er: Fornavn, efternavn, afdeling, anciennitet og stilling. Desuden gives klinikeren et nummer, så det er lettere at skelne de forskellige klinikere fra hinanden. Kliniker Klinikernummer Fornavn Efternavn Afdeling Anciennitet Stilling Lambda Klassen Lambda indeholder lambda for hver af de fire kliniske tilstande: lambda for barotraume, lambda for acidose/alkalose, lambda for oxygentoxicitet, lambda for dårlig oxygenering, hvilket vil sige et penaltynavn med en tilhørende lambdaværdi. Formålet med klassen er, at få beregnet lambdaværdierne. Lambda Lambda for barotraume Lambda for acidose/alkalose Lambda for oxygentoxicitet Lambda for dårlig oxygenering Penaltynavn Lambdaværdi beregning Penalties Klassen Penalties håndterer beregningen af penaltyfunktionerne. ErrorData Formålet med klassen ErrorData er at få beregnet forskellen mellem klinikerens respiratorindstillinger og systemets forslag til respiratorindstillinger og håndterer de data, der skal anvendes til at plotte errorgraferne for respiratorindstillingerne. 55 Klassediagram } Penalties Barotraume Acidose/alkalose Oxygentoxicitet Dårlig oxygenering BeregnPenalty ErrorData Vektor f Vt FiO2 Visualisering 8.3 Klassediagram Et klassediagram illustrerer den statiske struktur af klasserne i Dr. Know. Diagrammet er statisk, da strukturen af klasser, som er illustreret i klassediagrammet, vil være gældende for alle systemets tilstande. Klasserne repræsenterer de processer, som systemet håndterer. Der findes tre forskellige måder, hvorpå klasserne kan være relateret til hinanden: Klasserne kan være associeret og dermed forbundet til hinanden, de kan være afhængige og dermed brugere af en anden klasse, eller de kan være specialiserede og dermed en specialisering af en anden klasse. [6] I klassediagramet er der således udelukkende illustreret klasser og ikke objekter. På Figur 8.1 på modstående side er klassediagrammet for Dr. Know illustreret. Klassediagrammet illustrerer problemområdet i Dr. Know, der er defineret som vægtningen af penaltyfunktionerne. Det er på figuren illustreret, hvilke forhold der er mellem klasserne. 56 Figur 8.1: Klassediagrammet illustrerer relationen mellem de definerede klasser i Dr. Know. Det er på figuren ligeledes illustreret, hvilke klasser der er associeret, og hvilke der arver fra en superklasse. Der ses således at klassen InitialState nedarver fra superklassen PatientState. På diagrammet er det muligt at se om en klasse er associeret med en anden i forskellige forhold, hvilket vil sige, at forholdet mellem to klasser f.eks. kan være 1:1 eller 1:mange. Dette er illustreret med et 1-tal eller 1..* mellem de forskellige klassers tilknytninger. Klassediagrammet illustrerer ydermere problemområdet, der er vægtningen af penaltyfunktionerne. Klassediagrammet læses således: Der læses i pilens retning, hvor navnet på den første klasse læses, herefter læses navnet på associeringspilen og tilsidst læses den sidste klasses navn. Det skal desuden bemærkes at der kan startes et vilkårligt sted på figuren. Del III Systemdesign Formålet med denne del er at udforme et design af Dr. Know, således at softwaresystemet kommer til at leve op til de brugerkrav, der er defineret i usecasebeskrivelsen. Kapitel 9 beskriver, hvorledes forskellige designkriterier bliver vægtet i dette projekt. Kapitel 10 indeholder en beskrivelse af de klasser, der er fundet nødvendige at implementere yderligere, samt en beskrivelse af komponentarkitekturen i Dr. Know. Kapitel 11 beskriver de klasser, der hører til GUI-delen af systemet. Kapitel 12 beskriver de klasser, der hører til kontrol-delen af Dr. Know. Kapitel 13 beskriver de klasser, der hører til entity-delen, samt beskriver hvorledes der skal gemmes data. Kapitel 14 indeholder en beskrivelse af den dynamiske sammenhæng mellem objekterne i Dr. Know, hvor det sekventielle flow er visualiseret. 59 KAPITEL 9 Designkriterier I dette kapitel vil vægtningen af forskellige designkriterier blive beskrevet. Designkriterierne er udarbejdet på baggrund af [9]. Formålet med designkriterierne er at give en forståelse for, hvordan forskellige designaspekter bliver vægtet i Dr. Know. 9.1 Vægtning af designkriterier På figur 9.1 på næste side er de forskellige designkriterier og deres vægtning illustreret. Der skelnes mellem, om designkriteriet vægtes som ekstremt vigtigt for Dr. Know’s funktionalitet, om designkriteriet er mindre vigtigt, eller om designkriteriet ikke har nogen betydning. Herimellem findes desuden nogle mellem-vægtninger, hvilket også ses af figuren. Desuden findes en tekstuel begrundelse for de enkelte vægtninger samt designkriteriets betydning for systemet. I det følgende er alle vægtninger foretaget ud fra det synspunkt, at Dr. Know skal kunne betragtes som et kommercielt produkt. Det betyder at der skal tages stilling til aspekter, som en eventuel køber kan finde relevant, herunder omkostninger, vedligeholdelse og fremtidige ændringer ved systemet. Brugbarhed er, hvor vigtigt det er let at kunne tilpasse Dr. Know til anvendelsesområdet. Brugbarheden vurderes til at være ”ekstremt vigtigt”, idet applikationsområdet er udvikleren, der skal kunne bruge outputtet fra Dr. Know i INVENT. Applikationsområdet er ligeledes klinikeren, der skal sørge for input til systemet. For at få et brugbart input fra klinikeren er det ligeledes vigtigt, at Dr. Know bliver tilpasset klinikeren, i form af at patientvariablene og patientparametrene bliver præsenteret så overskueligt som muligt. Sikkerhed er, hvor vigtigt det er at sikre Dr. Know’s data mod uventet og uvedkommende adgang. Sikkerheden vurderes til at være ”irrelevant”, idet Dr. Know ikke indeholder personfølsomme oplysninger. Såfremt klinikeren skulle indtaste sit CPR-nummer, eller hvis patientcases indeholdt patienternes CPR-nummer, ville det have været relevant at give systemets sikkerhed en højere prioritet. Personer, der hverken er klinikere eller udviklere, kan i teorien misbruge Dr. Know, men det vurderes til ikke at være en reel risiko for outputtet fra Dr. Know. 61 Designkriterier ~ {/= / P < { a P "m a ¡ 6 { - xm m { a) ª/ x ¡ m m x ¡ ©¥¦ a ¡ §¥¨ m a ¡ /m ¦ x ¡ ¤¥){u x ¡ A ) D x ¡ {D { x AD D P x- x " xmu x ¡ ¢£"x m a ¡ m { ¡ )dam a ¡ Figur 9.1: Vægtningen af designkriterierne for Dr. Know er illustreret. Effektivitet er, hvor vigtigt det er at presse så meget power som muligt ud af den tilgængelige tekniske platform. Effektiviteten vurderes at være ”mindre vigtig”, idet Dr. Know skal køre for sig selv uafhængig af andre systemer, idet tiden ikke er så afgørende for outputtet af systemet. Beregningen af lambdaværdierne tager det meste af regnekraften. Korrekthed er, hvor vigtigt det er at opfylde de krav, der er fundet i analysen af kravspecifikationerne. Korrekthed vurderes at være ”ekstrem vigtig”, da kravene til Dr. Know er sat efter grundige overvejelser i samarbejde med både udvikler og kliniker. Pålidelighed er, hvor vigtigt det er at opfylde kravene med en vis nøjagtighed. Pålidelighed vurderes at være ”vigtig”, da kraverne kan ændres på baggrund af det valgte programmeringssprog, som kan sætte visse 62 Designkriterier begrænsninger. Vedligeholdelse er, hvor vigtigt det er at kunne tilføje yderligere funktionaliteter til Dr. Know, efter det er implementeret i den organisation, som skal bruge det. Vedligeholdelse vurderes at være ”vigtig”, idet det skal være muligt at kunne udvide Dr. Know. Testning er, hvor vigtige omkostningerne er for at teste Dr. Know i henhold til kravspecifikationerne. Dette vurderes at være ”mindre vigtigt”, ud fra den betragtning, at der ikke afsættes en bestem mængde tid til testning, men at opgaven stadig har en betydning, da testning er en del af projektet. Fleksibilitet er, hvor vigtige omkostningerne er for at skulle ændre på det færdige Dr. Know. Her er det vurderet at være ”mindre vigtigt”, idet de ændringer som måtte opstå ikke forventes at være af en større karakter og derfor forventes at være overskuelige at skulle ændre på. Intuitivitet er, hvor vigtigt det er, at nye brugere let kan anvende systemet. Intuitivitet vurderes at være ”ekstremt vigtigt”, idet Dr. Know udvikles til at skulle anvendes af blandt andet klinikere, der alle vil være førstegangs- og eventuelt engangsbrugere af systemet. Desuden er klinikerens input afgørende for udviklerens output, og det er derfor ikke acceptabelt, at klinikeren indtaster forkerte data pga. manglende intuition for anvendelsen af Dr. Know. Genanvendelighed er, hvor vigtigt det er at kunne anvende komponenter fra Dr. Know i andre systemer. Genanvendelighed vurderes at være ”fuldførelse uden betydning”. Flytbart er, hvor vigtigt det er, at Dr. Know kan flyttes til andre platforme i fremtiden. Flytbart vurderes at være ”fuldførelse uden betydning”. Integrérbart er, hvor vigtigt det er, at Dr. Know kan integreres med andre systemer uden for mange omkostninger/problemer. Det vurderes, at dette prioriteres som ”irrelevant”, idet der ikke tages højde for, at Dr. Know skal kunne integreres med andre systemer. Det tages til gengæld hensyn til, at outputtet fra Dr. Know skal kunne kunne integreres i INVENT. 63 KAPITEL 10 Komponentarkitektur Dette kapitel indeholder en beskrivelse af klassediagrammet for Dr. Know. Klassediagrammet viser organisationen af Dr. Know, hvor klasserne organiseres i tre delsystemer: GUI, kontrol og entity. Afslutningsvist i kapitlet vil der være et revideret klassediagram indeholdende alle de nye fundne klasser. 10.1 Udvidelse af klassediagram I det videre design af Dr. Know er det fundet nødvendigt at tilføje nogle ekstra klasser til klassediagrammet, som blev konstrueret i analysen. Det drejer sig om følgende klasser: LoginVindue, KlinikerVindue, UdviklerVindue, HjaelpVindue, LambdaPlusError, GrafFunktion, LambdaGem, Database samt diverse INVENT-klasser. Alle disse klasser er blevet tilføjet, da der er opstået et behov for at have disse klasser med i Dr. Know. LoginVindue, KlinikerVindue, UdviklerVindue og HjaelpVindue er alle brugergrænseflader, som er blevet tilføjet p.g.a. et behov, for at brugerne af Dr. Know kan interagere med Dr. Know. Klassen LambdaPlusError er tilføjet for at have en klasse, der kan administrere den data, der genereres af lambdaberegningen. GrafFunktion er tilføjet for at give udvikler mulighed for at visualisere error for forskellige respiratorindstillinger og dermed vise hvor godt et ”fit” der er opnået. Klassen LamdbaGem opfylder det behov, der er for at kunne gemme lambdaværdier i en fil. Klassen Database er tilføjet for at kunne gemme og administrere den data, klinikeren indtaster i Dr. Know. De sidste klasser, der er tilføjet, er INVENT-klasserne som anvendes i simuleringen af patientvariablene. I det efterfølgende vil der forefindes en kortfattet beskrivelse af klassens funktion, og herefter vil der for nogle klasser være en figur, hvor klassenavnet er vist i øverste kasse, mens attributterne er illustreret i midten og klassens adfærd vil være at finde i nederste kasse, hvor det findes relevant. LoginVindue Klassen giver brugeren mulighed for at logge ind i Dr. Know som to forskellige brugertyper: kliniker eller udvikler. Klassen indeholder de knapper og felter vinduet består af. 65 Komponentarkitektur LoginVindue Fornavn Efternavn Afdeling Anciennitet Stillingsbetegnelse Kliniker Kontrollér brugertype Afslut KlinikerVindue Klassen KlinikerVindue giver klinikeren mulighed for at vurdere den enkelte patients tilstand. Dette sker ved, at der er visualiseret patientparametre og ud fra disse er der mulighed for at simulere nogle patientvariable. Klinikeren har ligeledes mulighed for at indtaste respiratorindstillinger til den enkelte patient. Klassen KlinikerVindue indeholder således alle de komponenter/felter, som vinduet består af. KlinikerVindue Alle knapper og tekstfelter Kliniker Afslut Skift bruger UdviklerVindue Denne klasse giver udvikleren mulighed for at udvælge kliniker samt patientgruppe som der skal beregnes lambdaværdier for. Udvikleren har ligeledes mulighed for at få visualiseret allerede gemte lambdaværdier. Klassen UdviklerVindue indeholder de komponenter, som udviklervinduet består af. UdviklerVindue Alle knapper og tekstfelter Kliniker Afslut Vis Process HjaelpVindue Denne klasse er blevet tilføjet, da det vil være nødvendigt at informere brugerne af Dr. Know omkring funktionaliteten af systemet. Desuden vil der i denne være en beskrivelse af brugen af systemet. HjaelpVindue Afslutknap samt tekstfelt Afslut LambaPlusError Klassen LambdaPlusError genererer et objekt, der indeholder data for lambda og error. 66 Komponentarkitektur LambdaPlusError bestLambda errorArrays GrafFunktion Klassen GrafFunktion genererer det felt, der skal vise errorgraferne for udvikleren. GrafFunktion createChart LambdaGem Klassen LambdaGem gemmer de udregnede vægtninger for penaltyfunktionerne. LambdaGem Lambda Kliniker GemEtEllerAndet IndlaesEtEllerAndet Database De respiratorindstillinger samt klinikeroplysningerne, som klinikeren giver Dr. Know, skal lagres. Lambdaværdierne skal ligeledes lagres, så der er mulighed for at hente allerede beregnede lambdaværdier frem. Det er valgt, at denne lagring skal foregå i en database. Derfor er der blevet tilføjet klassen Database. Database Fornavn Efternavn Afdeling Anciennitet Stillingsbetegnelse FiO2 Vt Frekvens Patientgruppe Indsaet OpretCase OpdaterCase HentKlinikerListe HentData 67 Komponentarkitektur Diverse INVENT-klasser Disse klasser tilføjes, da de fysiologiske modeller fra INVENT implementeres. De enkelte klassers funktion er at simulere patientvariable ud fra en given respiratorindstilling. Klasserne er allerede konstruerede og vil derfor først blive beskrevet under implementering 16.2 på side 95. 10.2 Illustration af klynger Figur 10.1 viser, hvorledes pakkerne i Dr. Know kan organiseres i tre delsystemer: GUI, kontrol og entity. GUI indeholder alle komponenter hørende til grænsefladerne med brugerne. Kontrol indeholder alle de funktionelle komponenter, hvilket vil sige de pakker, der sørger for funktionaliteten i Dr. Know. Entity indeholder de pakker, der hører til Dr. Know’s interne grænseflader. «D¬ ®¯)°)± ²´³uµ »{¼½)¾ ¿ÀD¾ ¿Á)Âà ÄxÅ ¾ ¿=¾ ÆdÃ=Ç ÀD¾ ¿Á)Âà ®u°a¯¶ ¬ °a· ÈaÁɾ ÆÅ Ã=Ç ÀD¾ ¿Á)Âà Ê)Ë ÌÃ=Å ÍÀD¾ ¿Á)Âà ×AÇ ÌØ Ù)Â=¿=ÆÏ ¾ ¼=¿ ¸¯=¶ ¹ ¶ º Î ¿¾ Ï ¾ ÌÅ Ð"Ï ÌÏ Ã ÑÌÏ ¾ Ã¿Ï Ð"Ï ÌÏ Ã »{ÌÒ¥ÓÁ=Ì ÄxÅ ¾ ¿¾ ÆdÃÇ ÑÿÌÅ Ï ¾ ÃÖ »{ÌÒ¥ÓÁ=ÌÍ=Å ÂÖ ÔxÇ Ç ¼Ç ÔxÇ Ç ¼Ç ÕaÌÏ Ì ÐxÃÏ Ï ¾ ¿½=Ö ÕaÌÏ ÌÓÌÖà »{ÌÒ¥ÓÁ=Ì×Ã=Ò Figur 10.1: Et revideret klassediagram af komponentarkitekturen i Dr. Know. Den overordnede klynge Dr. Know er inddelt i tre klynger, henholdsvis GUI, kontrol og entity. De tilføjede klasser er: LoginVindue, KlinikerVindue, UdviklerVindue, HjaelpVindue, LambdaPlusError, GrafFunktion, LambdaGem og Database. De diverse INVENTklasser er ikke indeholdt i klassediagrammet, men er dog en del af komponentarkitekturen. 10.3 Revideret klassediagram På baggrund af de tilføjede klasser kan klassediagrammet fra analysen (Figur 8.1 på side 57) revideres til et udvidet klassediagram som ses på Figur 10.2 på næste side. I dette klassediagram er de ovenfor beskrevne klasser tilføjet(dog ikke INVENT-klasserne) og deres relation til de eksisterende klasser illustreret. 68 é)Þ=ê4ë)ì"Þ&Aá=ê æÞÝ Þ)ëÞç=á ï ò=ó ôõ=öó ø ÿý ü ÷ ý ö ÷ ø ÿ"=öû#=ú =öó Ú Û"Ü Ý Ü Þ)ß àaÝ Þ=Ý á ûüó ï ôü=ú ø ÷ öó ö ÷ ø÷ ñ ð ð ! íß Ü ÛÜ îá)ä Ü Ûì)á ï àáÝ Ý Ü Û)è"ç $% âÞÝ Ü á)ÛÝ àaÝ ÞÝ á íß Ü Û"Ü îá)ä ñ ð ð ï ÷=ø ù ôú öó öó ò=ó ôõ=ö=ó ò=ó ôõ=ö=ó ï ï éÞ=ê6ë)ï ìÞ ï ï ï ì"Ü î=ß á)ä Ü Û)ì)á ôü=ú ø ÷ öó ö=ó ø÷ ý ø ú þÿdý ý ö ÷ ûöÿý ö=ó=üý ü ï éå"èaÜ ÛÜ Û)ìá ï ñ ð ð ï ãä ä åaä æaÞ=Ý Þ ï ï ï ñ ð ð ï òó ôõö=ó âáÛÞß Ý Ü á=ç òó ôõö=ó ûüó ûüó ï ûüó ï é)Þ=ê6ëì"Þ"ß ï çãä ä åaä Þ=áß Ü Û)ìá ûü=ó $% &´ä Þ$' ()Û"îÝ Ü åxÛ ûüó ûöÿý öó Figur 10.2: Dette er den reviderede version af klassediagrammet fra analysen. Klassediagrammet illustrerer relationen mellem de definerede klasser i Dr. Know. Det er på figuren illustreret, hvilke klasser der er associeret, og hvilke der arver fra en superklasse. På diagrammet er det muligt at se om en klasse er associeret med en anden i forskellige forhold, hvilket vil sige, at forholdet mellem to klasser f.eks. kan være 1:1 eller 1:mange. Dette er illustreret med et 1-tal eller 1..* mellem de forskellige klassers tilknytninger. Klassediagrammet illustrerer ydermere problemområdet, der er vægtningen af penaltyfunktionerne. Klassediagrammet læses således: Der læses i pilens retning, hvor navnet på den første klasse læses, herefter læses navnet på associeringspilen og tilsidst læses den sidste klasses navn. Det skal desuden bemærkes at der kan startes et vilkårligt sted på figuren. KAPITEL 11 GUI-klasser I det følgende beskrives designet af klasserne: LoginVindue, KlinikerVindue, UdviklerVindue, HjaelpVindue og GrafFunktion. Disse klasser hører alle til delsystemet GUI. Først beskrives klassen og dennes tilhørsforhold, og dernæst beskrives den enkelte klasses metoder. Attributterne er beskrevet i appendiks D på side 163. Nedenstaående figur illustrerer, hvilke klasser der beskrives. *+ ,.-)/01 2435 < =?>@ A B@ A9C.D9E Y4I N?Z [D9A.H Q @ =.A FG @ A.@ H E.I B@ A9CD9E LM N9E9G O B@ A9CD9E JC9K @ H G E.I B@ A9CD9E 11.1 -)0"/.6 + 07 8 /96 : 6 ; P A9@ Q @ N9G R"Q N?Q E FG @ A.@ H E9I S VI I =.I W$N?Q N N Q @ E.A Q S R"Q N?Q E < N.TU9C.N O.G D9XV"I I =.I WN Q N U9N?X9E E.A9N9G Q @ E9X < N.TU9C.N < N.TU9C9N YE.T R$E Q Q @ A9>.X LoginVindue Definition Denne klasse visualiserer en GUI for brugerne af Dr. Know og giver mulighed for valget mellem brugertyperne: Udvikler og kliniker. Metoder +LoginVindue():Void Constructor for klassen LoginVindue. Kalder metoderne setup(), resetGUI() og addListeners(). +setup():Void En metode der konfigurerer de grafiske elementer i vinduet. +resetGUI():Void Nulstiller tekstfelterne for fornavn, efternavn, anciennitet, afdeling og stillingsbetegnelse. +addListernes():Void En metode der tildeler lyttefunktioner til knapperne i vinduet. Lyttefunktioner bruges 71 GUI-klasser til at overvåge om knapper, kombinationsboks mm. bliver anvendt. Indre klasser -HaendelseKontrol Denne klasse kontrollerer de hændelser, som kan optræde i klassen LoginVindue. -BoksBrugerKontrol Denne klasse håndterer hændelserne fra kombinationsbokse på GUI. 11.2 KlinikerVindue Definition Denne klasse giver klinikeren mulighed for at kalde forskellige patientcases frem på GUI, hvorefter denne kan simulére patientvariablene for forskellige respiratorindstillinger. Metoder -KlinikerVindue(Kliniker):Void Konstruktor for klassen KlinikerVindue. -setup():Void En metode der konfigurerer de grafiske elementer i vinduet. -addListernes():Void En metode der tildeler lyttefunktioner til knapperne i vinduet. -resetGUI():Void Nulstiller alle tekstfelterne der indeholder systemet forslag til respiratorindstillinger. Sætter desuden patientcasevælgeren til 1. -resetAlt():Void Nulstiller alle tekstfelter der indeholder simulerede værdier. -afslutningsFunktion():Void En metode der terminerer vinduet. -skiftBruger():Void En metode som giver mulighed for brugerskift. -skrivVariable(InitialState):Void En metode der henter parameterværdier og printer dem i tekstfelterne. -skrivVariable(PatientState):Void En metode der henter variabelværdier og printer dem i tekstfelterne. +hentSettings():Setting En metode der henter klinikerens indtastede respiratorindstillinger og returnerer et Settingsobjekt. +hentCasenummer():int En metode som henter caseNummer fra GUI og returnerer en int. +simuleringFunktion():Void En metode der simulerer patientvariable ud fra patientparametrene og respiratorindstillingerne. -godkendCase():Void En metode som gemmer klinikerens indtastede respiratorindstillinger. Indre klasser -HaendelseKontrol Denne klasse kontrollerer de hændelser, som kan optræde i klassen KlinikerVindue. -kontrolPatientGruppe Denne klasse håndterer valg af patientgruppe i kombinationsboksen boksPatientGruppe. -kontrolPatientNummer Denne klasse håndterer valg af patientnummer i kombinationsboksen boksPatientNummer. 72 GUI-klasser 11.3 UdviklerVindue Definition Denne klasse giver udvikleren mulighed for at beregne og visualisere lambdaværdier og errorgrafer for respiratorindstillinger. Klassen kalder klassen GrafFunktion. Metoder -UdviklerVindue():Void Konstruktor for klassen UdviklerVindue. Kalder metoderne setup(), addListeners(), resetKliniker(), resetLambda() og afslut(). -setup():Void En metode der konfigurerer de grafiske elementer i vinduet. -addListeners():Void En metode der tildeler lyttefunktioner til knapperne i vinduet. -resetKliniker():Void Nulstiller tekstfelter som indeholder klinikeroplysninger. -resetLambda():Void Nulstiller tekstfelter som indeholder lambdaværdier. +showDialog(String, String, String, char, File):File Metode som viser en dialogboks til valg af fil til at gemme eller åbne en fil med lambdaværdier. +visProcess(double):double Viser hvor langt lambdaberegningsprocessen er nået. +beregningAfLambda():Void Henter data som bruge ved lambdaberegning. +gemLambda():Void En metode der konstruerer, hvordan lambda skal gemmes i en fil. Indre klasser -HaendelseKontrol Denne klasse kontrollerer hændelser fra knapper i klassen UdviklerVindue. -kontrolPatientgruppe Denne klasse håndterer valg af patientgruppe i kombinationsboksen boksPatientgruppe. -kontrolKliniker Håndterer valget af, om lambda skal beregnes for en kliniker. Vælget træffes i kombinationsboksen checkBoksKliniker. -kontrolNavn Håndterer valg af klinikernavn i kombinationsboksen boksKliniker. -beregn En klasse der initierer beregningen af lambda i en ny tråd. 11.4 HjaelpVindue Definition HjaelpVindue giver brugeren hjælp og vejledning til anvendelsen af Dr. Know. Metoder -HjaelpVindue():Void Konstruktor for klassen HjaelpVindue. -setup():Void En metode der konfigurerer de grafiske elementer i vinduet. -addListernes():Void En metode der tildeler lyttefunktioner til knapperne i vinduet. +afslut():Void En metode der terminerer vinduet. 73 GUI-klasser Indre klasser -HaendelseKontrol Denne klasse kontrollerer de hændelser, som kan optræde i klassen HjaelpVindue. 11.5 GrafFunktion Definition Denne klasse genererer de felter, der skal vise errorgraferne for hver af respiratorindstillingerne. Metoder +createChart(double[],double[],String,String): Object er en metode, der tager to double og to String som inputargumenter til at generere errorgraffelterne. 74 KAPITEL 12 Kontrol-klasser I det følgende beskrives designet af klasserne: PatientState, InitialState, Settings, ErrorData, Lambda, LambdaPlusError, Penalties og Kliniker. Disse klasser hører alle til delsystemet Kontrol. Først beskrives klassen og dens tilhørsforhold, og dernæst beskrives den enkelte klasses attributter og metoder. \] ^._)`ab c4de k l?mn o pn o9q.r9s 4w |? r9o.v n l.o tu n o.n v s.w pn o9qr9s z{ |9s9u } pn o9qr9s xq9y n v u s.w pn o9qr9s 12.1 _)a"`.f ] ag h `9f i f j ~ o9n n |9u " |? s tu n o.n v s9w | n s.o " |? s k |.9q.| }.u r9"w w l.w | | 9|?9s s.o9|9u n s9 k |.9q.| k |.9q9| s. w w l.w $|? | $s n o9m. PatientState Definition Denne klasse håndterer tilstandene for de patientcases, som systemet anvender til at beregne lambdaværdier. Patientcaserne er placeret i denne klasse, idet de alle indeholder attributterne caseNummer, liste over parametrene, liste over variablene og respiratorindstillingerne. Attributter +caseNummer: int : En variabel, som indeholder et casenummer. +parametrene: double : Shunt, FA2, Vd, Q, compliance, resistance, VO2 , VCO2 , DPG, Hb, COHb, MetHb, Temperatur, BaseExcess. +variablene: double : FeCO2 , FeO2 , PIP, SaO2 , PaO2 , PaCO2 , pHa, SvO2 , PvO2 , PvCO2 , pHv. +respiratorindstillingerne:double : Frekvens, Vt, FiO2 75 Kontrol-klasser Metoder +PatientState() En constructor for klassen PatientState . Den genererer et PatientState objekt. +genererePatientState(int) Tager int, som svarer til patientcase nummer og genererer den patientcase, som svarer til det nummer. 12.2 InitialState Definition Denne klasse er en underklasse af klassen PatientState og tager sig af de initiale patientparametre og Dr. Knows forslag til respiratorindstillinger for hertil hørende patienter. Disse præsenteres for klinikeren for hver patientcase. Attributter Klassen nedarver alle attributter fra superklassen PatientState. Variablene overskrives til nogle konstanter, når den første simulering af variable foretages. Metoder +InitialState(int):InitialState Er constructor for denne klasse. Den tager en int og returner et objekt, der svarer til patientcase nummer x. 12.3 Settings Definition slag. Denne klasse håndterer respiratorindstillingerne (settings) for både klinikernes og systemets for- Attributter +indstillinger: double : Frekvens, Vt, FiO2 . Metoder +Settings(double) En konstruktor for klassen Settings. 12.4 ErrorData Definition Denne klasse genererer ErrorData objekter, som bliver brugt i klassen Lambda til at beregne error. Desuden plottes og visualiseres errordata for klinikeren. 76 Kontrol-klasser Attributter +indstillingError: double[] : fiO2Error, frekvensError, vtError. Array af double der indeholder forskel mellem systemets forslag og klinikerens forslag for hver af respiratorindstillingerne +meanError: double[] : Fi02, frekvens, Vt. Et array af double som indeholder mean error for indstillingerne. totalError: double[] Array af variable som indeholder den totale error for alle indstillinger. Metoder +ErrorData() En konstruktor for klassen ErrorData. Den genererer et ErrorData objekt. +plotError(double [], double [], String, String ) Denne metode plotter errorgraferne for de tre respiratorindstillinger. 12.5 Lambda Definition Denne klasse skal stå for at lambdaværdierne bliver beregnet for hver af de fire penaltyfunktioner: Barotraume, oxygentoxicitet, acidose/alkalose samt dårlig oxygenering. Derudover beregnes error for respiratorindstillingerne i denne klasse. Attributter +lambdaBaro: double En variabel der indeholder lambdaværdi for barotrauma. +lambdaAcid: double En variabel der indeholder lambdaværdi for acidose/alkalose. +lambdaToxi: double En variabel der indeholder lambdaværdi for oxygentoxicitet. +lambdaOxy: double En variabel der indeholder lambdaværdi for dårlig oxygenering. +lambdaVector: double[] Array af double indeholdende lambdakombinationerne. Metoder +Lambda() En konstruktor for klassen. Den genererer et Lambda objekt indeholdende 4 lambda værdier. +Lambda(λ1 ,λ2 ,λ3 ,λ4 ) En konstruktor for Lambda klassen, som tager 4 argumenter af typen double. +beregnLambda(PatientState[], Settings[], UdviklerVindue) Metode der beregner lambdaværdierne for de fire penalties og returnerer dem til UdviklerVinduet. +findSystemForslag(PatientState, Lambda): Lambda Kører alle kombinationer af Lambda igennem, og finder den som giver minimum penalty og bruger den som systemets forslag. +errorSet(double, double): double Metode som regner error for indstillingerne. +vectorToArray(Vector): double [] Tager en vektor af double og returnerer en array af double. +findMinimum(double): double[] Finder den mindste værdi i en array. +findMaximum(double): double[] Finder den største værdi i et array. +class VisProcess En indre klasse som viser, hvor langt beregningsprocessen er nået. 77 Kontrol-klasser 12.6 LambdaPlusError Definition En klasse som genererer et LambdaPlusError objekt, som indeholder både et ErrorData og Lambda objekt. Ved beregningen af lambdaværdier findes der for alle kombinationer af lambda de respiratorindstillinger som giver den mindste error. For hver lambdakombination gemmes error og lambdakombinationen i LambdaPlusError-objektet. Attributter +bestLambda: Lambda Et Lambda-objekt som indeholder de lambdaværdier, som giver den mindste penalty. +errorArrays: errorData Et ErrorData-objekt som indeholder de error vektorer som skal plottes. Metoder LambdaPlusError() En konstruktor for klassen som genererer et LambdaPlusError-objekt. 12.7 Penalties Definition Denne klasse håndterer de fire penalties og deres funktioner. Attributter +baro: double En variabel med værdi til penalty for barotrauma. +acid: double En variabel med værdi til penalty for acidose/alkalose. +o2toxy: double En variabel med værdi til penalty for ilt toxicitet. +oxy: double En variabel med værdi til penalty for dårlig oxygenering. +total: double En variabel med værdi for den totale penalty. Metoder +Penalties() En konstruktor for klassen Penalties. +calcBaro(double, double): double Metoden udregner penaltyværdi for barotrauma og returnerer den. +calcOxy(double, double): double Metoden udregner penaltyværdi for dårlig oxygenering og returnerer den. +calcAcid(double, double): double Metoden udregner penaltyværdi for acidose/alkalose og returnerer den. +calcO2toxy(double, double): double Metoden udregner penaltyværdi for oxygentoxicitet og returnerer den. +calcPenalty(PatientState, Lambda): double Metoden udregner den totale penaltyværdi og returnerer den. 12.8 Kliniker Definition Denne klasse håndterer de data, som klinikeren indtaster om sig selv i loginvinduet. 78 Kontrol-klasser Attributter +klinikernr: int Det nummer som klinikeren gemmes under i databasen. +klinikerData: String : Fornavn, Efternavn, Afdeling, Anciennitet, Stillingbetegnelse. Metoder +Kliniker(String, String, String, String, String) En konstruktor for klassen Kliniker, som genererer et Kliniker objekt uden klinikernummer. Objektet bruges, når oplysningerne om klinikeren gemmes i databasen. +Kliniker(int,String, String, String, String, String) En konstruktor for klassen Kliniker, som genererer et Kliniker objekt med klinikernummer. Objektet bruges til at hente data fra databasen. 79 KAPITEL 13 Entity-klasser I det følgende beskrives designet af klasserne LambdaGem og Database. Disse klasser hører alle til delsystemet entity. Der er lagt vægt på en beskrivelse af designet af databasen og herefter beskrives klasserne med hensyn til deres tilhørsforhold og dernæst den enkelte klasses attributter og metoder. .) 4 ? 9 .¡9¢ ¶4¦ «?· ¸¡9.¥ ® . £¤ . ¥ ¢.¦ 9 ¡9¢ ©ª «9¢9¤ ¬ 9 ¡9¢ § 9¨ ¥ ¤ ¢.¦ 9 ¡9¢ 13.1 )". 9 9 ® «9¤ ¯"® «?® ¢ £¤ . ¥ ¢9¦ ° ³¦ ¦ .¦ ´$«?® « « ® ¢. ® ° ¯"® «?® ¢ «.±²9 .« ¬.¤ ¡9µ³"¦ ¦ .¦ ´« ® « ²9«?µ9¢ ¢.9«9¤ ® ¢9µ «.±²9 .« «.±²9 9« ¶¢.± ¯$¢ ® ® 9.µ Database Databasen skal opbygges af fire tabeller, som indeholder de data, der gemmes fra loginvinduet og klinikervinduet. Fra loginvinduet gemmes data om den kliniker, som logger på, og fra klinikervinduet gemmes de respiratorindstillinger, som klinikeren godkender. 13.1.1 Overordnet struktur Databasens fire tabeller skal indeholde alt data om klinikeren og de indstillinger vedkommende vælger at godkende. For at strukturere denne data anvendes fire tabeller: En som indeholder klinkerens oplysninger, en til FiO2 -indstillinger, en til Vt-indstillinger og en til frekvens-indstillinger. De fire tabeller benævnes efterfølgende med deres navn i databasen: Klinikerdata, FiO2_ setting, Vt_ setting og Frekvens_ setting. I alle tabeller indgår en unik variabel kaldet KLINIKER_ NO, som tilskriver et nummer til hver kliniker. Dette nummer muliggør, at der oprettes en relation mellem klinikerdata og de tre indstillingstabeller. Relationen 81 Entity-klasser ~ oprettes ved at anvende en ”primary key” og en ”foreign key”, som fortæller databasen, at data for et klinikernummer i en tabel hører til data for samme klinikernummer i en anden tabel. I Figur 13.1 illustreres dette koncept. Figur 13.1: Her er det illustreret hvorledes en ”primary key” peger på en ”foreign key” i en anden tabel og dermed opretter en relation mellem de to tabeller. Figuren viser også den overordnede struktur mellem tabellerne. For enkelthedens skyld er nogle kolonner udeladt af tabellerne, disse bliver dog beskrevet senere. I det næste vil de enkelte tabeller bliver forklaret mere detaljeret. 13.1.2 Klinikerdata Den første tabel skal indeholde alt data om klinikeren, hvilket drejer sig om fornavn, efternavn, anciennitet, afdeling og stillingsbetegnelse. Dette betyder, at der anvendes en tabel som ser ud som Tabel 13.1. KLINIKER_ NO 1 2 3 EFTERNAVN Jensen Petersen Hansen KLINIKERDATA FORNAVN ANCIENNITET Jens 6 Peter 8 Hans 9 AFDELING AIOS R O STILLING Overlæge Reservelæge Overlæge Tabel 13.1: Tabellen indeholdende alle de data som klinikeren giver om sig selv, når vedkommende logger ind for at bruge Dr. Know. Første kolonne indeholder et nummer, som er tabellens primary key, det vil sige den nøgle der sammenkæder tabellen med andre tabeller. I tabellen KLINIKERDATA tilskrives hver kliniker et unikt nummer, som identificerer dem i de andre tabeller. Her kunne klinikerens fornavn eller efternavn også være brugt, men p.g.a muligheden for at klinikere kan have samme fornavn eller efternavn bruges i stedet et tal. Dette forudsætter, at der findes en algoritme, som sikrer, at kun en kliniker kan have et bestemt nummer, ellers overskrives data. I det tilfælde af en anden kliniker har brugt Dr. Know og fået tilskrevet nummeret 1, kan dette nummer ikke tilskrives den nye kliniker. Derfor må der laves en rutine, der tjekker, hvor mange klinikere der har anvendt systemet, således at den nye kliniker får det rigtige nummer tilknyttet. Dette gøres ved at lave en forespørgsel, som henter antallet af klinikere i klinikerdata-tabellen ud og derefter lægger en til og gemmer den nye kliniker ved dette nummer. Dette nummer er en ”primary key” i klinikerdata-tabellen. 82 Entity-klasser 13.1.3 Respiratorindstillinger De sidste tabeller indeholder respiratorindstillingerne. Der er en tabel pr. indstillingsvariabel, dvs. en for FiO2 , en for Vt og en for frekvens. I det følgende vil kun tabellen for FiO2 bliver gennemgået, da opbygningen af de tre tabeller er ens. Tabellen for FiO2 skal indeholde en ”foreign key”, som kæder respiratorindstillingerne sammen med en kliniker i klinikerdata-tabellen. Udover en ”foreign key” skal tabellen indeholde respiratorindstillingerne for hver af de 60 patientcases klinikeren skal bedømme. Tabellen for FiO2 kommer således til at se ud som Tabel 13.2. FIO2_ SETTING KLINIKER_ NO 1 2 3 PT_ GRUPPE Intensiv Intensiv Intensiv A_ 1 30 32 34 A_ 2 21 25 30 ¹º¹º¹ ¹º¹º¹ ¹º¹º¹ ¹º¹º¹ A_ 20 45 42 40 Tabel 13.2: Tabellen indeholdende alle de FiO2 indstillinger som klinikeren gemmer, når vedkommende trykker godkend i klinikervinduet. Første kolonne indeholder et nummer, som er tabellens ”foreign key”. I denne tabel indsættes klinikernummeret, når en kliniker trykker godkend ved første case. Når der indsættes data i tabellen, kræves fire variable: Klinikerens nummer, patientgruppe, patientcasenummer og respiratorindstillingsværdi. Patientcasenummeret er det, der bestemmer hvilken kolonne data skal i, da hver patientcase har et nummer tilknyttet (A_ 1 til A_ 20). Gemt data skal bruges i udviklervinduet, derfor skal data også kunne hentes ud. Derudover kræves det også, at data kan sammenkædes med en kliniker. Fra udviklervinduet kan der vælges en specifik kliniker, hvorefter Dr. Know skal kunne hente de data der hører til denne kliniker. Det er her, at tabellernes ”primary key” og ”foreign key” anvendes i søgningen. Database kan bedes om at hente data fra to tabeller samtidigt. Derfor hentes data ud fra indstillingstabellerne hvor ”foreign key” passer til den ”primary key” for den kliniker, der er valgt. 13.2 Database-klassen Definition Denne klasse håndterer de værdier og informationer, som Dr. Know skal gemme for hver patientcase og for hver kliniker. Attributter -forbindelse:Connection Et objekt som etablerer forbindelse med databasen for Dr. Know. -kommando:Statement Et objekt som kan bruges til at sende kommandoer og forespørgsler til databasen. Kliniker:Kliniker Et objekt med klinikerens oplysninger om fornavn, efternavn, afdeling, anciennetet og stillingsbetegnelse. -rowCount:int En variabel som indeholder antallet af klinikere i klinikerdatatabellen. -indsatKlin:Kliniker Et objekt som indeholder alle data, der er indsat i klinikerdatatabellen. +klinikerNummer:int En variabel som indeholder klinikerens nummer i tabellerne. 83 Entity-klasser ~ +patientGruppe:String En variabel som indikerer, hvilken patientgruppe patienten tilhører. +caseNummer:int En variabel som indeholder et patientcasenummer. +fio2Setting:double En variabel som indeholder informationer om den indstilling, klinikeren har indtastet for FiO2 . +frekvensSetting:double En variabel som indeholder informationer om den indstilling, klinikeren har indtastet for frekvens. +vtSetting:double En variabel som indeholder informationer om den indstilling, klinikeren har indtastet for Vt. +ptGruppe:String En variabel som indeholder navnet for patientgruppen. Metoder +Database():Void En konstruktor for denne klasse og opsætter forbindelse til databasen for Dr. Know. +indsaet(Kliniker):Kliniker En metode der gemmer oplysningerne om klinikeren i klinikerdatatabellen. +opretCase(klinikerNummer, patientGruppe):Void En metode der opretter klinikeren og den valgte patientgruppe i fio2_ settings-, frekvens_ settings- og Vt_ settings-tabellerne. Alle værdier for respiratorindstillingerne sættes til nul. +opdaterCase(klinikerNummer, patientGruppe, caseNummer, fio2Setting, vtSetting, frekvensSetting):Void En metode der gemmer indstillingerne for FiO2 , Vt og frekvens i den dertil hørende casekolonne. +hentKlinikerListe(ptGruppe):Kliniker[] En metode som henter de klinikere, der har udfyldt alle 20 patientcases. +hentData(klinikerNummer):Settings[] En metode der henter de respiratorindstillinger, som klinikeren har udfyldt. 13.3 LambdaGem Definition Denne klasse håndterer de beregnede lambdaværdier, som Dr. Know skal lagre, når udvikleren ønsker det. Attributter +Lambda:Lambda Et objekt med de udregnede lambdaværdier for barotraume, adicose/alkalose, oxygentoxicitet og dårlig oxygenering. +Kliniker:Kliniker Et objekt med klinikerens oplysninger, som er fornavn, efternavn, afdeling, anciennitet og stillingsbetegnelse. +filnavn:String En variabel der indeholder det angivne filnavn. +patientGruppe:String En variabel indeholdende patientgruppe. Metoder +LambdaGem():Void En konstruktor for denne klasse. +gemEtEllerAndet(filnavn, Kliniker, Lambda):Void metoden gemmer objektet af typen Lambda på disk. 84 Entity-klasser +indlaesEtellerAndet(filnavn):Lambda obj En metode der indlæser objektet Lambda fra en fil og returnerer dette. 85 KAPITEL 14 Procesarkitektur I dette kapitel er der konstrueret sekvensdiagrammer for udvalgte processer i Dr. Know. Formålet med dette er at illustrere dataflowet i systemet, samt hvilke objekter der er aktive i den valgte proces. 14.1 Sekvensdiagrammer Sekvensdiagrammet illustrerer den dynamiske sammenhæng mellem objekter, hvor essensen er, at beskeder der bliver sendt mellem objekter illustreres. Horisontalt er de aktiverede objekter illustreret, mens deres livslinie er illustreret vertikalt. Pilene viser de beskeder, der bliver sendt mellem objekterne. Det essentielle ved dette diagram er, at det tidsmæssige perspektiv er inkluderet, hvor tiden forløber nedad i diagrammet. Objekternes levetid er således visualiseret via de gråskraverede blokke. [6] Et tryk på en knap, fra brugerens side, kan aktivere en række af aktiviteter. Det skal bemærkes at i de konstruerede diagrammer er processerne alle initieret af en brugerinteraktion, det være sig en aktivering af en knap på brugergrænsefladen. 14.2 Klinikerfunktionaliteter Funktionaliteterne for klinikeren er illustreret i sekvensdiagrammet se Figur 14.1 på den følgende side. De enkelte processer der foregår er følgende: Klinikerens mulighed for at vælge en patientgruppe, hvorefter den initierende tilstand for disse indlæses, klinikerens mulighed for at simulere patientvariable samt muligheden for at godkende de valgte respiratorindstillinger. I sekvensdiagrammet er processernes sekventielle flow illustreret, hvor det tidsmæssige perspektiv er medtaget. 87 Procesarkitektur Figur 14.1: Sekvenssdiagram for klinikerfunktionaliteter. Diagrammet illustrerer det sekventielle flow i processen. 14.3 Udviklerfunktionaliteter For udvikleren er der medtaget fem forskellige brugerinteraktioner, som ikke nødvendigvis forudsætter hinanden. Det drejer sig om følgende processer: Vælg patientgruppe og vælg kliniker, hvor der er mulighed for at vælge en patientgruppe og efterfølgende en specifik kliniker for patientgruppen, beregn lambda, plot errorgraf samt gem lambda og åben gemt lambda. Sekvensdiagrammet for udviklerfunktioneliteterne er illustreret på Figur 14.2 på næste side. 88 Figur 14.2: Sekvensdiagram for udviklerfunktionaliteterne. Diagrammet illustrerer det sekventielle flow i processen. Del IV Implementering og Test Formålet med denne del af rapporten er at dokumentere, hvorledes Dr. Know er implementeret, samt at dokumentere hvorledes der er udført tests. Kapitel 15 indeholder en redegørelse for, hvorledes der er lagt en strategi for implementeringen af softwaresystemet. Kapitel 16 beskriver, hvorledes implementeringen adskiller sig fra designet. Kapitel 17 indeholder en beskrivelse af de patientcases, der implementeres i systemet. Kapitel 18 indeholder dokumentationen af Dr. Know samt screenshots fra de forskellige GUIs. Kapitel 19 beskriver de forskellige tests, der er udført for at verificere, at Dr. Know fungerer som forventet. 91 KAPITEL 15 Implementeringsstrategi Formålet med kapitlet er at beskrive realiseringen af Dr. Know, herunder hvilket programmeringssprog, databasesprog og programmeringsværktøj, Dr. Know er blevet realiseret i. Desuden angives den primære litteratur anvendt til programmeringen. 15.1 Programmeringssprog Et af formålene med dette projekt er at anvende objektbaserede metoder til analyse, design og implementering af primært softwarebaserede løsninger til en sundhedsteknologisk problemstilling [16]. Der har i projektforløbet været afholdt undervisning i UML 2 [6] og programmeringssproget Java. Valget af programmeringssprog i dette projekt er Java, specielt da dette programmeringssprog er objektorienteret og derfor understøtter det beskrevne formål med projektet. Den valgte udgave er JavaT M 2 SDK Standard Edition Version 1.4.1. Under programmeringen er følgende litteratur anvendt: [7], [12], [5] og [10]. 15.2 Databasesprog Til at lagre data i Dr. Know konstrueres en database. Databasen skal bygges op over en MySQL database. SQL er et database sprog, som tillader brugeren at sende forespørgsler til databasen. SQL databasen er en såkaldt ”relational database”, hvilket betyder at data i tabellerne kan have en relation til hinanden. Dette bevirker, at man ved at strukturere sin database fornuftigt kan undgå, at samme data optræder flere gange. Det valgte databasesprog er SQL, som kører på en MySQL-database, der kan hentes gratis fra internettet. 93 Implementeringsstrategi 15.3 Programmeringsværktøj Der eksisterer flere udviklingsmiljøer til at afvikle programmer i. I dette projekt er JCreator valgt, da det er et simpelt og gratis udviklingsværktøj, der ligger lettilgængeligt på internettet. Den valgte udgave er JCreator LE. [15] 94 KAPITEL 16 Implementering versus design I dette kapitel beskrives, hvorledes implementeringen adskiller sig fra designet af Dr. Know. Det drejer sig om tilføjelse af jar-filer, opsætning af databasen og plot af errorgraferne samt implementering af klasser fra INVENT. 16.1 Jar-filer Jar-filer er komprimerede klassefiler, det har været nødvendigt at implementere i Dr. Know. Det drejer sig om VisualNumerics og ChartDirector, som efterfølgende beskrives. 16.1.1 VisualNumerics Definition 16.1.2 ChartDirector Definition 16.2 Pakken VisualNumerics indeholder matematiske funktioner som bruges ved udregning i INVENT. Pakken ChartDirector bruges til opsætning og visualisering af errorgrafer i Dr. Know. Implementerede klasser Under implementeringen har det været nødvendigt at konstuere nogle flere klasser. Det drejer sig om Scattering, DemoModule og DatabaseSetup. Disse beskrives efterfølgende. 95 Implementering versus design 16.2.1 Scattering Definition Denne klasse laver de grafer, som bliver plottet efter beregning af lambda er udført. Klassen har ingen attributter eller indre klasser, men implementerer et interface ved navnet DemoModule. Klassen er konstrueret på baggrund af den eksterne klasse ChartDirector, som indeholder dette interface. Det er derfor nødvendigt at overskrive de tre metoder, som interfacet indeholder. Metoder +getName():String Denne metode returnerer navnet til den chart, der bliver lavet. +getNoOfCharts():int Denne metode returnerer antallet af chart. +createChart(String,double[],double[],String,String): Denne metode bruger ikke den første string, men er medtaget, idet metoden skal være den samme som i interfacet. De to double[] er de data, som bliver plottet. De to sidste string er henholdsvis patientgruppe og label for x-aksen. 16.2.2 DemoModule Definition attributter. Denne klasse håndterer de funktioner, som implementeres i klassen Scattering. Klassen har ingen Metoder -getName(): er en metode, der returnerer navnet til chart. -getNoOfCharts(): er en metode, der returnerer antallet af chart, der skal lagres. createChart(String, double[],double[],String, String): er en metode, der genererer en chart. 16.2.3 DatabaseSetup Definition Denne klasse opsætter tabellerne i databasen. Disse tabeller skal indeholde oplysninger om klinikerne og respiratorindstillingerne. Denne klasse er en selvstående klasse, der fungerer uafhængigt af Dr. Know. Attributter +kliniker_no:int en unik variabel der identificerer klinikerne i tabellerne der indeholder respiratorindstillingerne. +efternavn:String en variabel med klinikerens efternavn. +fornavn:String en variabel med klinikerens fornavn. +stilling:String en variabel med klinikerens stilling. +afdeling:String en variabel med afdeling som klinikeren er tilknyttet til. +anciennnitet:String en variabel med klinikerens anciennitet. +pt_ gruppe:String en variabel som knytter respiratorindstillingerne til en patientgruppe. +A_ 1 - A_ 20:double 20 variable som indeholder respiratorindstillingerne for de 20 patientcases. 96 Implementering versus design +klinikerdata:Tabel Tabellen der indeholder oplysningerne om klinikerne. Variablene kliniker_ no, efternavn, fornavn, stilling, afdeling og anciennitet hører til denne tabel. +fio2_ settings:Tabel Tabllen der indeholder de indtastede respiratorindstillinger for Fi O2 . Variablene kliniker_ no, pt_ gruppe og A_ 1 til A_ 20 er indeholdt i denne tabel. +frekvens_ settings:Tabel Tabllen der indeholder de indtastede respiratorindstillinger for respirationsfrekvensen.Variablene kliniker_ no, pt_ gruppe og A_ 1 til A_ 20 er indeholdt i denne tabel. +vt_ settings:Tabel Tabllen der indeholder de indtastede respiratorindstillinger for tidalvolumen.Variablene kliniker_ no, pt_ gruppe og A_ 1 til A_ 20 er indeholdt i denne tabel. Metoder +main():Void metoden som først etablerer en forbindelse til databasen og dernæst opretter og nulstiller klinikerdata-, fio2_ settings-, frekvens_ settings- og vt_ settings-tabellerne. 16.3 Klasser fra INVENT Følgende klasser er alle implementeret fra INVENT. Klasserne håndterer simuleringsfunktionaliteten. Attributter og metoder er ikke beskrevet, da klasserne er konstruerede på forhånd i INVENT, og de implementeres således direkte i Dr. Know. 16.3.1 Predictions Definition co2model. 16.3.2 o2model Definition 16.3.3 Dette er klassen, der håndterer simuleringen ved at kalde klassen Blood og klasserne o2model og Denne klasse indeholder den matematiske model for fysiologien omkring O2 -transport og -udveksling. co2model Definition Denne klasse indeholder den matematiske model for fysiologien omkring CO2 -transport og udveksling. 16.3.4 IO2Constants Definition 16.3.5 Denne klasse indeholder de definerede konstanter, der anvendes i klassen for O2 -modellen. Blood Definition Denne klasse håndterer alle ligninger for blodet, der anvendes i simuleringen af blodets variable for både arterielt og venøst blod. 97 KAPITEL 17 Patientcases I det følgende er der opstillet 20 forskellige patientcases, som anvendes i Dr. Know. Formålet med dette afsnit er at give læseren et indblik i de data Dr. Know, bygger sine beregninger på. 17.1 Strategi for udarbejdelse af patientcases Det er valgt, at der skal udarbejdes 20 forskellige patientcases til anvendelse i Dr. Know. Tanken er at de 20 patientcases skal være ens for de tre patientgrupper. Herved bliver klinikeren gjort opmærksom på, at patientcasen tilhører en specifik patientgruppe og vedkommende skal således behandle patienten efter at denne tilhører en specifik patientgruppe, selv om patient nummer 1 har de samme parameterværdier for postoperative hjertepatientgruppen, hjernetraumepatientgruppen og intensiv patientgruppen. 17.2 Standardværdier for patientcases For at kunne konstruere patientcases for syge personer, er det nødvendigt at vide hvilke værdier der er standard værdier for rakse personer. Disse værdier betegnes referenceværdier. Disse referenceværdier er udarbejdet i samarbejde med afdelingslæge og anæstesiolog Charlotte Allerød. Det følgende skema viser alle disse standardværdier. Med ordet standard menes der ”normale” værdier for raske individer. 99 » Patientcases Parameter Shunt FA2 Vdead Q Compliance Resistance VO2 VCO2 DPG Hb COHb MetHb Temp. Base Excess (BE) Værdi 5,00 [0,60;0,90] 0,15 5,00 0,05 3,99 0,25 0,20 5,00 9,30 0,00 0,00 37,00 0,00 Enhed % fraktion l l/min l/cmH2 O cmH2 O/l/s l/min l/min mmol/l mmol/l fraktion fraktion C mmol/l Rene påvirkninger Herefter planlægges det at konstruere patientcases med forskellige påvirkninger, hvilke er: Kredsløbspåvirkede, respiratorisk påvirkede, transfusionsbehandlede, hypovolæmibehandlede patienter samt patienter med abnorm BE. Herefter kombineres disse påvirkninger, således at der bliver skabt 20 forskellige patientcases. Værdier for de rene påvirkninger er illustreret i de efterfølgende tabeller. Parametre for kredsløbspåvirkede patienter Q VO2 VCO2 < 2,00 < 0,15 < 0,12 l/min l/min l/min Parametre for respiratorisk påvirkede patienter Shunt FA2 Vd Compl. Resis. 10 - 45 0,15 - 0,50 0,15 - 0,30 0,20 - 0,50 3,99 % fraktion l l/cmH2O cmH2O/i/s Parametre for transfusionsbehandlede patienter DPG 6-7 mmol/l Parametre for hypovolæmi-behandlede patienter Hb DPG 5-7 3-5 100 mmol/l mmol/l » Patientcases Parametre for hyperdynamiske patienter Q VO2 VCO2 6 - 10 0,35 - 0,40 0,80 ¹ VO2 l/min l/min l/min Parametre for patienter med abnorm BE BaseExcess (BE) (-)7 - 8 mmol/l Parameterkombinationer Her er listet, hvorledes der er konstrueret 20 forskellige patientcases med forskellige påvirkninger. Således gives et bredt billede af de reelle patientcases klinikeren, møder i praksis. Afslutningsvis vil der være en samlet tabel over de konstruerede patientcases. Case 1: Kredsløbspåvirket patient. Case 2: Respiratorisk påvirket patient. Case 3: Hypovolæmi-behandlet patient. Case 4: Hyperdynamisk patient. Case 5: Kredsløb + respiratorisk patient. Case 6: Kredsløb + hypovolæmi patient. Case 7: Kredsløb + transfusions patient. Case 8: Kredsløb + BE patient. Case 9: Respiratorisk + hypovolæmi patient. Case 10: Respiratorisk + transfusions patient. Case 11: Respiratorisk + hyperdynamisk patient. Case 12: Respiratorisk + BE patient. Case 13: Kredsløb + hypovolæmi patient. Case 14: Kredsløb + respiratorisk patient. Case 15: Kredsløb + transfusions patient. Case 16: Kredsløbspåvirket + BE patient. Case 17: Respiratorisk patient. Case 18: Respiratorisk + hypovolæmi patient. Case 19: Respiratorisk + hyperdynamisk patient. Case 20: Respiratorisk + BE patient. 101 » Patientcases Parameter / Case# Shunt [%] FA2 [fraktion] Vd [l] Q [l/min] Compl. [l/cmH2O] Resist. [cmH2O/i/s] VO2 [l/min] VCO2 [l/min] DPG [mmol/l] Hb [mmol/l] COHb [fraktion] MetHb [fraktion] Temp. [C] Base Ex. [mmol/l] 1 5,0 0,70 0,15 2,00 0,05 3,99 0,12 0,09 5,00 9,30 0,00 0,00 37 0,00 2 30,0 0,45 0,20 5,00 0,03 3,99 0,25 0,20 5,00 9,30 0,00 0,00 37 0,00 3 5,0 0,60 0,15 5,00 0,05 3,99 0,25 0,20 3,00 5,50 0,00 0,00 37 0,00 4 5,0 0,70 0,15 9,00 0,04 3,99 0,37 0,30 5,00 9,30 0,00 0,00 37 0,00 5 15,0 0,15 0,18 2,50 0,05 3,99 0,08 0,06 5,00 9,30 0,00 0,00 37 0,00 6 5,0 0,80 0,15 1,80 0,05 3,99 0,11 0,09 4,00 5,00 0,00 0,00 37 0,00 7 5,0 0,60 0,15 1,50 0,05 3,99 0,10 0,08 6,50 9,30 0,00 0,00 37 0,00 8 5,0 0,65 0,15 2,05 0,05 3,99 0,07 0,05 5,00 9,30 0,00 0,00 37 -5 9 20,0 0,35 0,25 5,00 0,04 3,99 0,25 0,20 4,00 5,00 0,00 0,00 37 0,00 10 30,0 0,30 0,20 5,00 0,03 3,99 0,25 0,20 7,00 9,30 0,00 0,00 37 0,00 Parameter / Case# Shunt [%] FA2 [fraktion] Vd [l] Q [l/min] Compl. [l/cmH2O] Resist. [cmH2O/i/s] VO2 [l/min] VCO2 [l/min] DPG [mmol/l] Hb [mmol/l] COHb [fraktion] MetHb [fraktion] Temp. [C] Base Ex. [mmol/l] 11 35,0 0,30 0,15 8,50 0,04 3,99 0,37 0,31 5,00 9,30 0,00 0,00 37 0,00 12 25,0 0,20 0,20 5,00 0,03 3,99 0,25 0,20 5,00 9,30 0,00 0,00 37 -3,0 13 5,0 0,70 0,15 1,90 0,05 3,99 0,13 0,11 3,50 5,50 0,00 0,00 37 0,00 14 15,0 0,30 0,20 2,00 0,03 3,99 0,14 0,09 5,00 9,30 0,00 0,00 37 0,00 15 5,0 0,65 0,15 1,80 0,05 3,99 0,14 0,11 6,70 9,30 0,00 0,00 37 0,00 16 5,0 0,85 0,15 2,00 0,05 3,99 0,07 0,10 5,00 9,30 0,00 0,00 37 5,00 17 35,0 0,25 0,20 5,00 0,03 3,99 0,25 0,20 5,00 9,30 0,00 0,00 37 0,00 18 30,0 0,30 0,20 5,00 0,04 3,99 0,25 0,20 3,50 6,50 0,00 0,00 37 0,00 19 30,0 0,30 0,27 9,50 0,02 3,99 0,35 0,30 5,00 9,30 0,00 0,00 37 0,00 20 15,0 0,45 0,25 5,00 0,04 3,99 0,25 0,20 5,00 9,30 0,00 0,00 37 6,00 102 KAPITEL 18 Dokumentation af Dr. Know I dette kapitel forefindes dokumentation af Dr. Know, hvilket vil være i form af screenshots. Der vil være screenshots af loginvindue, klinikervindue, udviklervindue, hjælpvindue samt et screenshot af terminalen fra databasen. Formålet med dette afsnit er, at give et overblik over samt visuel dokumentation for, hvorledes Dr. Know er implementeret. 18.1 Screenshots I det efterfølgende er illustreret screenshots fra forskellige brugergrænseflader i Dr. Know. Der vil dog ikke foreligge screenshots af de tre grafvinduer, da disse forefindes i testafsnit 19.5.2 på side 120. Database Figur 18.1: Screenshot af oprettelse af databaseserver med navnet drknow. 103 » Dokumentation af Dr. Know Klinikervindue Figur 18.2: Screenshot af Dr. Know: Kliniker. Dette screenshot viser klinikerdelen af Dr. Know, når en patientcase er simuleret med de givne respiratorindstillinger. 104 » Dokumentation af Dr. Know Udviklervindue Figur 18.3: Screenshot af Dr. Know: Udvikler. Dette screenshot viser udviklerdelen af Dr. Know, når patientgruppen er valgt til at være ”Hjernetraume patient”. 105 » Dokumentation af Dr. Know Hjaelpvindue Figur 18.4: Screenshot af hjælpvindue. Loginvindue Figur 18.5: Screenshot af Dr. Know: Login. De to screenshots viser Dr. Know: Login når henholdvis kliniker og udvikler er valgt som bruger. Når kliniker er valgt skal brugeroplysningerne udfyldes. Hvis udvikler er valgt gråskaleres disse felter. 106 KAPITEL 19 Test Dette kapitel handler om de tests, der udføres for at tjekke at Dr. Know virker uden fejl. Først gives en beskrivelse af de forskellige tests, som kan udføres ifølge UML, samt en beskrivelse af udførslen og testresultaterne. Formålet med kapitlet er at redegøre for, om Dr. Know lever op til krav, der er stillet i analyse- og designprocesserne. 19.1 Typer af tests For at sikre en god funktionalitet bør et system gennemgå følgende test: modultest, integrationstest, systemtest og accepttest. En modultest betyder, at enhver eller en gruppe af klasser bliver testet selvstændigt. I dette projekt er modultest udført løbende i programmeringsprocessen, og testresultaterne er derfor ikke fremlagt. En integrationstest integrerer komponenter og klasser med hinanden med den fordel at finde eventuelle fejl for kun delmængder af klasser og komponenter. Denne test udføres på basis af usecases (se afsnit 4.3 på side 27). Ved at implementere usecases én ad gangen og herefter teste funktionaliten for denne, medfører dette også integration af diverse klasser med hinanden. Dette kapitel fremlægger udelukkende resultater af integrationstesten. En systemtest ser systemet som en ”sort boks”. En systemtest tester, at alle komponenter og klasser virker sammen, som det er forventet af brugeren. Systemtest er udført i samarbejde med en kliniker, og resultaterne for testen findes i diskussionsdelen af rapporten (se kapitel 19.4.1 på side 119). En accepttest er stort set den samme som systemtest, den udføres blot af rekvirenten af systemet. Accepttesten er ikke udført. 107 » Test 19.2 Integrationstest: Test af usecases I dette afsnit beskrives de tests, der er lavet ved at integrere de definerede usecases. Hermed testes det, at funktionaliteten er som beskrevet i analysen (se afsnit 6 på side 33). For hver usecase vil de kaldte metoder blive beskrevet mht. funktion, samt hvorledes usecasen testes og resultaterne heraf. 19.2.1 Vælg brugertype Denne usecase giver mulighed for at vælge mellem to brugertyper fra loginvinduet. Såfremt der vælges ”Kliniker” skal der udfyldes oplysninger om klinikeren. Hvis en eller flere oplysninger mangler, skal der komme en besked, som gør brugeren opmærksom herom. Vælges brugertypen ”Udvikler”, skal felterne til brugeroplysninger gråskaleres, så disse ikke kan anvendes. Når brugeren trykker på ”OK”-knappen, skal loginvinduet lukkes og enten klinikervinduet eller udviklervinduet åbnes, afhængig af hvilken type bruger der er valgt. Er brugeren en kliniker skal der også etableres forbindelse til databasen, og klinikerens oplysninger skal gemmes i klinikerdata-tabellen. Hvis der ikke opnås forbindelse til databasen, skal der gives en fejlbesked. Metoder I forbindelse med test af usecasen ”Vælg brugertype” bliver følgende metoder og komponenter testet: LoginVindue BoksBrugerKontrol, HaendelseKontrol. Database indsaet. Test I usecasen ”Vælg brugertype” udføres følgende tests: 1. Udvikler vælges Her testes, om tekstfelterne gråskaleres, når bruger vælges som ”Udvikler”. Herefter trykkes ”OK” og udviklervinduet skal åbnes. 2. Kliniker vælges Her testes, om tekstfelterne aktiveres når bruger vælges som ”Kliniker”. 3. Manglende klinikeroplysninger Her testes om Dr. Know giver en fejlbesked, hvis klinikeren mangler at indtaste en eller flere oplysninger. Der indtastes alle oplysninger på nær fornavn, hvilket skal give en fejlbesked. Testen gentages for alle de oplysninger, klinikeren skal indtaste. 4. KlinikerVinudue åbnes Alle klinikeroplysninger indtastes, og der testes om klinikervinduet åbnes, når der trykkes ”OK”. 5. Klinikeroplysninger gemmes Alle klinikeroplysninger udfyldes, og der trykkes ”OK”. Det undersøges, om klinikeroplysningerne forefindes i klinikerdata-tabellen i databasen. 6. Klinikeroplysninger gemmes uden database er opsat Alle klinikeroplysninger gemmes og der trykkes ”OK”. Dr. Know skal give en fejlbesked, som fortæller klinikeren, at der er problemer med databasen. Resultater Resultaterne for test af usecasen ”Vælg brugertype” ses i Tabel 19.1 på modstående side. 108 » Test Testnummer 1 2 3 4 5 6 Testparametre Bruger er ”Udvikler” Bruger er ”Kliniker” Manglende fornavn Alle oplysninger er givet Alle oplysninger er givet Alle oplysninger er givet Forventet resultat Udvikler vinduet åbnes Tekstfelter aktiveres Fejlbesked Kliniker vinduet åbnes Oplysninger er gemt Fejlbesked Testresultat ¼ ¼ ¼ ¼ ¼ ¼ Tabel 19.1: Testresultater for usecasen ”Vælg brugertype”. 19.2.2 Vælg patientgruppe Usecasen ”Vælg patientgruppe” bruges hhv. i klinikervinduet og i udviklervinduet. I klinikervinduet indlæses den første case i patientgruppen automatisk, når en valid patientgruppe vælges. I udviklervinduet skal man kunne vælge at beregne data for én kliniker eller alle klinikere. Metoder I forbindelse med test af usecasen ”Vælg patientgruppe” bliver følgende metoder og komponenter testet: KlinikerVindue: kontrolPatientGruppe. UdviklerVindue: kontrolPatientgruppe. Database: hentKlinikerListe. Test I usecasen ”Vælg patientgruppe” udføres følgende tests: 1. Patientgruppe vælges: Der kontrolleres, om der ved valg af patientgruppe indlæses den første patientcase for gruppen. Dette skal også ske, hvis klinikeren forinden har været i gang med en anden patientgruppe. 2. Invalid valg Hvis ”Vælg patientgruppe” strengen vælges i kombinationsboksen, skal der vises en fejlbesked. 3. Liste med klinikere hentes: Ved valg af en valid patientgruppe i udviklervinduet, skal metoden hentKlinikerListe returnere en array med klinikerdata. 4. Liste med klinikere vises: Fornavn og efternavn elementer i klinikerdata array vises i en kombinationsboks. Resultater Resultaterne for test af usecasen ”Vælg patientgruppe” ses i Tabel 19.2 på næste side. 19.2.3 Hjælp I usecasen ”Hjælp” kontrolleres det, at alle hjælpknapper på alle vinduer fremkalder hjælpvinduet. 109 » Test Testnummer 1 2 3 4 Testparametre Patientgruppe valgt "Vælg patientgruppe"valgt Patientgruppe valgt Patientgruppe valgt Forventet resultat Første patientcase indlæses Fejlbesked vises En array med klinikeroplysninger returneres Fornavn og efternavn vises i comboboks Testresultat ¼ Kun efter valg af gruppe ¼ ¼ Tabel 19.2: Testresultater for usecasen ”Vælg patientgruppe”. 19.2.4 Metoder I forbindelse med test af usecasen Hjælp bliver følgende metoder og komponenter testet: Alle GUI Klasser: hjælpKnap. Test I usecasen ”Hjælp” udføres følgende tests: 1. Visning af hjælp vindues: Hjælpknappen aktiveres på alle vinduer, og det kontrolleres om hjælpvinduet vises. Resultater Resultaterne for test af usecasen ”Hjælp” ses i Tabel 19.3. Testnummer 1 Testparametre Hjælpknap trykkes Forventet resultat HjælpVindue vises Resultat af test ¼ Tabel 19.3: Testresultat for usecasen ”Hjælp”. 19.2.5 Afslut I denne usecase testes afslut-funktionen for Dr. Know i login-, kliniker- og udviklervinduet. I alle vinduer findes der to muligheder for at afslutte programmet, én ved krydset op i vinduets højre hjørne og én ved en afslutknap i bunden af vinduet. Inden Dr. Know afsluttes, skal der vises en dialogboks for brugeren, som skal bekræfte, at der ønskes at afslutte. Metoder I forbindelse med test af usecasen ”Afslut” bliver følgende metoder og komponenter testet: Alle GUI Klasser: showOptionDialog, systemExit, afslutKnap. 110 » Test Test I usecasen Afslut udføres følgende tests: 1. Afslutknap testes: Afslutknap trykkes, og der vises besked om at bekræfte afslutningen. 2. Vinduelukningskryds testes: Vinduelukningskryds testes på alle vinduer, og det kontrolleres om de forventede dialogbokse vises. 3. Afslutning bekræftes i klinikervindue, udviklervindue og hjælpvindue 4. Afslutning bekræftes i LoginVindue Hvis ”Afslut” vælges i dialogboksen, skal hele systemet afsluttes. 5. Aflutning bekræftes ikke Hvis "Annulér"vælges i dialogboksen, skal dialogboksen lukkes og brugeren føres tilbage til vinduet. Resultater Resultaterne for test af usecasen ”Afslut” ses i Tabel 19.4. Testnummer 1 2 3 4 5 Testparametre Afslutknap er valgt Kryds er valgt "Afslut"valgt "Afslut"valgt "Annulér"valgt Forventet resultat Dialogboks vises Dialogboks vises LoginVindue vises System afsluttes Dialogboks lukkes Resultat af test ¼ Ikke dialogboks, systemet afsluttes ¼ ¼ ¼ Tabel 19.4: Testresultater for usecasen ”Afslut”. 19.2.6 Skift bruger Denne usecase giver klinikeren mulighed for at skifte bruger inde fra klinikervinduet. Dette betyder, at klinikervinduet lukkes og data mistes, hvis dette ikke er gemt. Brugeren skal derfor have mulighed for at fortryde og vende tilbage klinikervinduet. Ønsker brugeren at fortsætte, skal Dr. Know tjekke om nuværende case er godkendt og giver således brugeren mulighed for at godkende, såfremt casen ikke er godkendt på forhånd. Herefter lukkes klinikervinduet og loginvinduet åbnes. Metoder I forbindelse med test af usecasen ”Skift bruger” bliver følgende metoder og komponenter testet: KlinikerVindue HaendelseKontrol, skiftBruger, godkendCase, skrivVariable, hentCaseNummer, hentSettings. Database opretCase, opdaterCase. Test I usecasen ”Skift bruger” udføres følgende tests: 111 » Test 1. Acceptér skifte med godkendt case Der trykkes på ”Skift bruger”-knappen, og når Dr. Know spørger om der skal fortsættes, accepteres det. Herefter lukker klinikervinduet og loginvinduet åbner. 2. Acceptér skifte uden godkendt case Der trykkes på ”Skift bruger”-knappen, og når Dr. Know spørger om der skal fortsættes, accepteres det. Herefter vises en dialogboks, som giver mulighed for at gemme eller at fortsætte uden at data gemmes, og dermed lukker klinikervinduet og loginvinduet åbner. 3. Fortryd skifte Der trykkes på ”Skift bruger”-knappen, og når Dr. Know spørger om der skal fortsættes, fortrydes dette, og der vendes tilbage til klinikervinduet. Resultater Resultaterne for tests i usecasen ”Skift bruger” ses i Tabel 19.5. Testnummer 1 2 Testparametre Case er godkendt Case er ikke godkendt 3 Anvend ”Nej”-knappen Forventet resultat LoginVinduet åbnes Giver mulighed for at godkende Vender tilbage til KlinikerVinduet Testresultat ¼ ikke ved 1. case ¼ Tabel 19.5: Testresultater for usecasen ”Skift bruger”. 19.2.7 Vælg patientcase Usecasen giver brugeren mulighed for at vælge en bestemt patientcase. Her tjekker systemet, at der er valgt en gyldig patientgruppe inden casen indlæses. Metoder I forbindelse med test af usecasen ”Vælg patientcase” bliver følgende metoder og komponenter testet: KlinikerVindue kontrolPatientGruppe, kontrolPatientNummer, skrivVariable. Test I usecasen ”Vælg patientcase” udføres følgende tests: 1. Valg af casenummer uden patientgruppe Der vælges casenummer ”2” fra casenummervælgeren. Der er ikke valgt en gyldig patientgruppe, og dermed skal Dr. Know give en fejlbesked, der fortæller at der ikke er valgt en gyldig patientgruppe. 2. Valg af casenummer med patientgruppe Der vælges casenummer ”2” fra casenummervælgeren. Der er valgt en gyldig patientgruppe, og dermed skal Dr. Know indlæse den pågældende patientcase. Resultater Resultaterne for test af usecasen ”Vælg patientcase” ses i Tabel 19.6 på næste side. 112 » Test Testnummer 1 2 Testparametre Patientgruppe er ”Vælg patient”, casenummer er ”1” Patientgruppe er ”Hjernetraume patient”, casenummer er ”2” Forventet resultat Fejlbesked Indlæs patientcase nr. 2 Testresultat ¼ ¼ Tabel 19.6: Testresultater for usecasen ”Vælg patientcase”. 19.2.8 Simulér patientvariable Denne usecase sørger for simulerering af patientvariable ud fra klinikerens respiratorindstillinger og patientparametrene. Der kontrolleres, om klinikeren har givet alle indstillinger, ellers bruges Dr. Know’s forslag til respiratorindstillingen. Herefter beregnes patientvariablene, løsningen vises på skærmen og ”Godkend”-knappen aktiveres. Finder Dr. Know ingen løsning ved beregningen, gives en fejlbesked til klinikeren. Metoder I forbindelse med test af usecasen ”Simulér patientvariable” bliver følgende metoder og komponenter testet: KlinikerVindue HaendelseKontrol, simuleringFunktion, hentCaseNummer, hentSettings, skrivVariable. PatientState genererePatientState. Prediction calculatePrediction. Test I usecasen ”Simulér” udføres følgende tests: 1. Simuléring uden alle respiratorindstillinger Her aktiveres Simulérknap, hvor en eller flere af indstillingerne ikke er udfyldt. Her skal Dr. Know bruge dets eget forslag og simulere med dette. Der vil være en løsning, hvor Dr. Know’s forslag er brugt. Denne test gennemgås for alle tre indstillinger. 2. Simuléring med alle respiratorindstillinger Her aktiveres Simulérknap med alle indstillinger udfyldt. Dr. Know vil give en løsning. 3. Simulering uden løsning Idet der kan komme urealistiske indtillinger, kan det ske at der ikke findes en løsning. Denne test forsøger blot at tjekke, om der fremkomer en fejlbesked, som fortæller at der ikke findes en løsning. Resultater Resultaterne for test af usecasen ”Simulér patientvariable” ses i Tabel 19.7 på den følgende side. 19.2.9 Godkend indstilling Denne usecase anvendes, når klinikeren ønsker at godkende de respiratorindstillinger, vedkommende har indtastet. Inden indstillingerne gemmes i databasen, kontrolleres det om alle indstillinger er angivet. Mangler 113 » Test Testnummer 1 2 3 Testparametre Manglende FiO2 Casenr. 1, FiO2 = 21, Vt = 0.4, frekvens = 12 Casenr. 1, FiO2 = 10, Vt = 0.3, frekvens = 8 Forventet resultat Løsning vises på skærmen Løsning vises på skærmen Fejlbesked Testresultat ¼ ¼ ¼ Tabel 19.7: Testresultater for usecasen ”Simulér patientvariable”. klinikeren at udfylde en indstilling, anvendes Dr. Know’s forslag hertil. Herefter etableres en forbindelse til databasen og casen gemmes i indstillingstabellen. Hvis der ikke opnås forbindelse til databasen, gives der en fejlbesked. Efter patientcasen er godkendt, indlæses næste patientcase, og Godkendknappen deaktiveres indtil klinikeren har simuleret denne case. Metoder I forbindelse med test af usecasen ”Godkend indstilling” bliver følgende metoder og komponenter testet: KlinikerVindue HaendelseKontrol, godkendCase, skrivVariable, hentCaseNummer, hentSettings. Database opretCase, opdaterCase. Test I usecasen ”Godkend indstilling” udføres følgende tests: 1. Godkend case uden alle indstillinger Efter der er simuleret, trykkes der ”Godkend” uden at alle indstillinger er udfyldt. Casen gemmes og der tjekkes om indstillingerne findes i databasen. 2. Godkend case med alle indstillinger Efter der er simuleret, trykkes der ”Godkend” med alle indstillinger udfyldt. Casen gemmes og der tjekkes om indstillingerne findes i databasen. 3. Godkend case uden database er opsat Efter der er simuleret, trykkes der ”Godkend” med alle indstillinger udfyldt. Dette skal give en fejlbesked, som fortæller klinikeren, at der er et problem med at få forbindelse til databasen. 4. Godkend og indlæs næste case Efter der er simuleret, trykkes der ”Godkend” med alle indstillinger udfyldt. Casen gemmes og næste case vil blive indlæst. Resultater Resultaterne for test af usecasen ”Godkend indstilling” ses i Tabel 19.8 på næste side. 19.2.10 Vælg kliniker I usecasen ”Vælg kliniker” skal klinikeroplysningerne vises i udviklervinduet. Derudover sørger den for, at indstillinger for lambdaberegning hentes for den kliniker, der skal beregnes for. 114 » Test Testnummer 1 2 3 4 Testparametre Manglende FiO2 Alle indstillinger er udfyldt Manglende database Alle indstillinger er udfyldt Forventet resultat Casen gemmes Casen gemmes Fejlbesked Næste case indlæses Testresultat ¼ ¼ ¼ ¼ Tabel 19.8: Testresultater for usecasen ”Godkend indstilling”. Metoder I forbindelse med test af usecasen ”Vælg kliniker” bliver følgende metoder og komponenter testet: UdviklerVindue klasse kontrolKliniker. Database klasse hentData. Test I usecasen ”Vælg kliniker” udføres følgende tests: 1. Vis klinikeroplysninger Her kontrolleres, at de rigtige oplysninger om den valgte kliniker hentes i databasen og vises på de tilhørende felter på udviklervinduet. 2. Indstillinger hentes Inden beregning af lambda foretages skal respiratorindstillinger hentes fra databasen. Hvis en kliniker er valgt, skal der kun returneres indstillinger for den kliniker. Resultater Resultaterne for test af usecasen ”Vælg kliniker” ses i Tabel 19.9. Testnummer Testparametre Forventet resultat 1 En kliniker valgt 2 Database søger kun efter en kliniker Klinikeroplysninger vis på vindue Kun indstillinger for den valgte kliniker returneres Resultat af test ¼ ¼ Tabel 19.9: Testresultater for usecasen ”Vælg kliniker”. 19.2.11 Beregn lambda I test af usecasen ”Beregn lambda” kontrolleres det, at beregningen kun kan foregå, hvis der er fundet data for den valgte patientgruppe. Efter at beregningen er startet, skal der vises en statusindikator i form af antal kombinationer, der er beregnet. Når beregningen er færdig, skal det kontolleres, at lambdaværdierne indsættes i de rigtige tekstfelter på udviklervinduet, og at errorgraferne kan vises ved at der trykkes på de tilhørende grafknapper. 115 » Test Metoder I forbindelse med test af usecasen ”Beregn Lambda” bliver følgende metoder og komponenter testet: LambdaPlusError Klasse: beregnlambda. UdviklerVindue Klasse: Beregn, beregningAfLambda, visProcess. LambdaPlusError Klasse: findMinimum, findMaximum Test I usecasen ”Beregn lambda” udføres følgende tests: 1. Valg af patientgruppe uden data Der vælges en patientgruppe, hvor der ikke er nogen patientcases udfyldt, og det kontrolleres, om der vises en besked som fortæller, at ingen data findes for patientgruppen. 2. Valg af patientgruppe med data Der vælges en patientgruppe, hvor der findes udfyldte patientcases. Efter valget skal Beregn-knappen visualiseres for brugeren. 3. Statusindikator testes Det kontrolleres, at statusindikatoren opdateres for hver kombination. 4. Errorgrafer testes Det testes ved at give nogle fiktive data, og det kontrolleres om data plottes, og om den udregnede middelværdi (µ) og standarddeviationen (σ) er korrekte. Resultater Resultaterne for test af usecasen ”Beregn lambda” ses i Tabel 19.10. Testnummer Testparametre Forventet resultat 1 2 3 Patientgruppe uden data Patientgruppe med data Kombinationer 4 To arrays Besked til bruger Beregnknap aktiveres Opdateres for enhver kombination Plottes med µ og σ Resultat af test ¼ ¼ ¼ ¼ Tabel 19.10: Testresultater for usecasen ”Beregn lambda”. 19.2.12 Gem lambda I denne usecase skal der testes, om dialogboksen til lagring af lambda vises de rigtige steder. Brugeren skal kun have mulighed for at gemme lambda, efter at beregning er foretaget. Det testes, om der skrives de rigtige linier i filen og at lambdaværdierne kan gemmes uden fejl, selv om der ikke er valgt nogen kliniker. Derudover skal det kontrolleres, at filen gemmes det valgte sted på harddisken. Metoder I forbindelse med test af usecasen ”Gem lambda” bliver følgende metoder og komponenter testet: LambdaGem Klasse: gemEtEllerAndet. 116 » Test UdviklerVindue Klasse: gemLambda, showDialog, saveLambda. Test I usecasen ”Gem lambda” udføres følgende tests: 1. Gem dialog intitieres Ved tryk på gem knappen skal der vises en gem dialog. 2. Gem for en kliniker Efter at en specifik kliniker er valgt, gemmes beregnet data. Filen kontrolleres og skal som default gemmes under C:/ og indeholde følgende linier: Linie 1: Patientgruppe, linie 2-6: Klinikeroplysninger, linie 7-10: Lambdaværdier 3. Gem for alle klinikere Ingen kliniker er valgt, og der beregnes for alle klinikere. Filen skal gemmes under C:/ og linie 2-6 skal indeholde en tom string. Resultater Resultaterne for test af usecasen ”Gem lambda” ses i Tabel 19.11. Testnummer 1 2 3 Testparametre Gemknap er valgt Kliniker valgt Ingen kliniker valgt Forventet resultat En gem dialaog vises. Patientgruppe, lambdaværdier og klinikeroplysninger gemmes Patientgruppe og lambdaværdier gemmes i en tesktfil Resultat af test ¼ Gemmes i installationsmappe Gemmes i installationsmappe Tabel 19.11: Testresultater for usecasen ”Gem lambda”. 19.2.13 Åbn gemt lambda I usecasen ”Åbn gemt lambda” testes, at filåbningsdialogen altid kan åbnes fra udviklervinduet. Det skal kontrolleres, at linierne fra filen bliver indsat på de rigtige pladser i vinduet. Metoder I forbindelse med test af usecasen ”Åbn gemt lambda” bliver følgende metoder testet. Metoden showDialog er den samme som for usecasen”Gem lambda”: LambdaGem Klasse: indlaesEtEllerAndet. UdviklerVindue Klasse: showDialog, getLambda. Test I usecasen ”Åbn gemt lambda” udføres følgende tests: 117 » Test 1. Åbn dialog initieres Der trykkes på Åbn-knappen inden og efter, at beregning er foretaget og en tidligere gemt fil åbnes. Som default skal dialog boksen åbnes i C:/. 2. Filindhold indtastes Den ønskede fil vælges, og det kontolleres at de rigtige linier i filen kommer på sin plads i udviklervinduet. Linierne skal fordeles i følgende tekstfelter: ½ linie 1 = bruges ikke ½ linie 2 = fieldFornavn ½ linie 3 = fieldEfternavn ½ linie 4 = fieldAfdeling ½ linie 5 = fieldStillingsbetegnelse ½ linie 6 = fieldAnciennitet ½ linie 7 = fieldAcidose/Alkalose ½ linie 8 = fieldBarotraume ½ linie 9 = fieldOxygenering ½ linie 10 = fieldIlttoxitet Resultater Resultaterne for test af usecasen ”Åbn gemt lambda” ses i Tabel 19.12. Test 1 2 Testparametre Forventet resultat Resultat af test Åbn gemt lambda knap er valgt Fil med valid indhold En åbn fil dialaog vises. ¼ Indholdet i filen skal indlæses i de tilhørende tekstfelter ¼ Tabel 19.12: Testresultater for usecasen ”Åbn gemt lambda”. 19.3 Test af DatabaseSetup Dette er ikke en usecase, men en selvstående fil som anvendes i installationen af Dr. Know. Filen opsætter databasen, så den indeholder alle de tabeller, som skal anvendes af Dr. Know. Denne fil skal derfor eksekveres, inden de andre tests kan foretages. Funktionaliteten af denne fil kontrolleres ved at anvende en grafisk SQLadminstrator. Den vil vise, om tabellerne er oprettet med de rigtige atributter. Resultat Via MySQL-prompten ses det, at alle tabeller er oprettet med de rigtige attributter. Det konkluderes, at filen virker som tiltænkt. 118 » Test 19.4 Test af systemeffektivitet Implementeringen af Dr. Know følger løsningstrategien, som er beskrevet i kapitel 3.2 på side 20. Løsningsstrategien lægger op til, at Dr. Know skal gennemløbe alle kombinationer af respiratorindtillinger og lambdakombinationer. Beregningstiden for respiratorindstillingerne og lambdaværdierne afhænger af stepstørrelsen på både respiratorindstillingerne og lambdaværdierne. Det vælges derfor at teste beregningstiden, for at se hvor lang tid beregningsalgoritmen bruger på beregningen. Følgende værdier for stepstørrelse vælges i første omgang: Lambda FiO2 Vt f Step 0,1 0,1 0,1 1,0 Med denne stepstørrelse findes det, at beregningstiden bliver for lang. Beregningstiden for at finde den bedste kombination af respiratorindstillinger for én patientcase bliver ca. 90 minutter på en 1000MHz AMD Athlon med 256 MB RAM. Idét der er 20 patientcases, tager det for computeren ca. 20 ¹ 90 minutter (ca. 30 timer) at beregne respiratorindstillingen for en kombination af lambdaværdier. Et lambdastep på 0,1 giver i alt 84 kombinationer af lambdaværdier (summen af lambda skal være 1), hvilket betyder, at beregningstiden bliver 84 ¹ 20 ¹ 90 minutter svarende til ca. 3 1/2 måned. Dette vurderes til at være en for lang beregningsproces, især i betragtning af den relativt dårlige opløsning, og det ses derfor nødvendigt med en optimering af beregningsalgoritmen. Denne optimering undersøges, inden den endelige systemtest foretages. 19.4.1 Optimering af beregningstid For at kunne løse problemet med en for lang beregningstid er det nødvendigt med en hurtigere beregningsalgoritme, der dermed kan give mulighed for en bedre opløsning. Den udviklede algoritme i Dr. Know er konstrueret således, at den undersøger funktionen stykvis. Algoritmen starter med at undersøge de to yderste punkter i intervallet for hver respiratorindstilling, FiO2 , Vt og f. Algoritmen har således to yderpunkter og finder det midterste punkt mellem disse. Dette giver i alt 3 punkter for hver af de tre respiratorindstillinger, som kombineres indbyrdes. Området omkring det punkt, som giver den mindste penalty, undersøges med et step som er halvdelen af det første step. Der findes således tre nye punkter, og det punkt som giver den mindste penalty bruges som nyt middelpunkt for indstillingen. Denne halvering af steps fortsætter, indtil steppet er halveret ned til den valgte step for den indstilling. Det punkt, som giver den mindste penalty ved denne undersøgelse, bruges i beregningen. Ud over at optimere beregningsalgoritmen, minimeres systemets beregningstid ved at minimere intervallet for respiratorindstillingerne. Dette gøres ved at gennemgå alle 20 patientcases og udvælge minimum- og maximumindstillinger for både klinikerens og Dr. Knows forslag. Herefter udvælges det største maximum og det mindste minimum. Disse værdier er intervallets yderpunkter. Dette vil sige, at de 3 ovennævnte punkter, som findes for hver indstilling, er henholdsvis Dr. Knows forslag, klinikerens forslag og punktet som ligger midt imellem dem. Til at finde den rette lambdakombination anvendes overordnet den samme fremgangsmåde som til at finde respiratorindstillingerne. Lambdakombinationerne undersøges først med et bestemt step, og den bedste kombination findes. Området omkring hver lambdaværdi undersøges derefter med den halve stepstørrelse af første step, og sådan køres der videre, indtil det ønskede step og dermed den bedste lambdakombination opnås. 119 » Test 19.5 Systemtest Systemtestens formål er at verificere, at Dr. Know udfører de specificerede funktionaliteter for brugerne. Der er udført systemtests for begge brugertyper. Klinikerdelen er testet af en anæstetiolog, mens udviklerdelen er testet af projektgruppen. 19.5.1 Brugertype: Kliniker Systemtesten finder sted på Aalborg Sygehus Nord, hvor overlæge Dr. Med Søren Kjærgaard er udvalgt som testperson af klinikerfunktionaliteterne i Dr. Know. Grunden hertil er, at klinikeren allerede er tilknyttet INVENT og har derfor lettere ved at sætte sig ind i problemstillingen for projektet. Opsætning af MySQL databaseserveren og tabellerne i databasen ”drknow” er foretaget inden testen påbegyndes. Dr. Know bliver afviklet fra en bærbar PC, som placeres foran klinikeren. Dr. Know afvikles med programmeringsværktøjet JCreator, hvilket frembringer den første GUI, loginvinduet, på skærmen. Klinikeren informeres kort om GUI’ens funktionaliteter og indtaster de relevante data i tekstfelterne for klinikeroplysninger. ”OK”-knappen aktiveres og den næste GUI, klinikervinduet, manifesterer sig på skærmen. Informationer om denne GUIs egenskaber bliver givet til klinikeren, og denne vælger patientgruppen ”Intensiv patienter”. Valget af patientgruppe initierer simuleringen af patientvariabler for case nummer 1 med Dr. Know’s forslag til respiratorindstillinger. Simuleringen udføres uden problemer, hver gang klinikeren godkender sine indstillinger ved at aktivere ”Godkend”-knappen. Klinikeren gennemfører alle 20 patientcases og forklarer sin fremgangsmåde, inden han indtaster sit bud på et sæt respiratorindstillinger. I testen findes det, at patientcase nummer 10 ikke er god, fordi Dr. Know ikke kan finde en løsning til de bedste respiratorindstillinger. 19.5.2 Brugertype: Udvikler Grundet den lange beregningstid vælges det at køre beregningen af lambda med nogle større steps. Disse steps er ikke de mest hensigtsmæssige steps at køre med, idet de kan give nogle urealistiske store spring i respiratorindstillingerne. Det vælges derfor at køre systemtesten for udvikleren med følgende steps: Lambda FiO2 Vt f Step 0,1 0,1 0,1 2 Det prioriteres derfor, at det bliver testet, om Dr. Know er i stand til at producere vægtninger, frem for at verificere at de vægtninger der bliver produceret er hensigtsmæssige/realistiske. Det forventes, at beregningen munder ud i fire lambdaværdier, der sammenlagt har summen 1. Det er fundet, at de fire lambdaværdier har henholdsvis værdierne: Lambdatype λbaro λaci λoxy λtoxy 120 Penalty 0,1 0,1 0,1 0,7 » Test Figurerne 19.1, 19.2 og 19.3 på næste side viser errorgraferne i form af Bland Altmann-plot for de tre respiratorindstillinger. Figur 19.1: Errorgrafen for FiO2 . Figur 19.2: Errorgrafen for tidalvolumen. 121 Figur 19.3: Errorgrafen for frekvens. Del V Diskussion Formålet med denne del af rapporten er at diskutere de resultater og fremgangsmåder, der er anvendt til designet af systemet. Kapitel 20 indeholder en vurdering samt diskussion af resultaterne fra Dr. Know, samt en samlet vurdering af det endelige system og en konklusion på de opnåede resultater. Kapitel 21 indeholder en perspektivering indeholdende bl.a. udvidelsesmuligheder for Dr. Know. 123 KAPITEL 20 Diskussion I dette kapitel forefindes en vurdering af de resultater, der er fremkommet under testene, samt en samlet vurdering af Dr. Know. Der vil desuden foreligge en konklusion på softwaresystemet. Formålet med dette er at give et indblik i, hvor langt der er nået i processen med udviklingen af Dr. Know. 20.1 Vurdering af Dr. Know I dette afsnit bliver de resultater, der er fundet under systemtesten og Dr. Know generelt, vurderet. 20.1.1 Effektivitet Efter systemtesten er det verificeret, at løsningsstrategien er funktionel. Dog kræver løsningen en optimering med hensyn til effektivitet. Den manglende effektivitet er forårsaget af, at Dr. Know kræver meget processorkraft til at styre de lange vektorer af data. Som beskrevet i afsnit 19.4.1 på side 119 er der konstrueret en optimeringsalgoritme for at reducere beregningstiden. Med denne algoritme er beregningstiden reduceret til 8 minutter for de tilfælde, hvor hele intervallet for alle respiratorindstillingerne undersøges. Denne tidsramme er ligeledes gældende for de patientcases, der ikke er godt nok konstrueret. Beregningstiden reduceres yderligere, såfremt der udelukkende anvendes de intervaller, der ligger omkring klinikerens og Dr. Knows forslag til respiratorindstillinger. Dette giver en samlet tid på ca. 60 minutter for at køre alle 20 patientcases igennem for en lambdakombination. Med det valgte step findes der 48 lambdakombinationer, derfor vil den sammenlagte beregningstid blive ca. to døgn, når alle lambdakombinationer skal beregnes. Et andet optimeringsaspekt er at sørge for en tilfredsstillende opløsning for respiratorindstillinger og lambdaværdier. Det er valgt at køre udviklerdelen af systemtesten med nogle store steps for respiratorindstillingerne og lambdaværdierne. Dette har den betydning, at der vil være nogle urealistiske steps i respiratorindstillingerne. De uhensigtsmæssige steps for lambdaværdierne har den betydning, at vægtningen af penaltyfunktionerne ikke bliver så præcis, som den kunne være med en bedre opløsning. Det er valgt at prioritere at få resultater fra syste125 Diskussion ¾ met, frem for at resultaterne er præcise. Der vil således frem til projektevalueringen blive beregnet vægtninger med bedre opløsninger, således disse resultater kan fremlægges og vurderes i henhold til de allerede beregnede vægtninger for penaltyfunktioner med den ringere opløsning. I systemtesten bruges der således følgende steps til beregningen: Lambda FiO2 Vt f Step 0,1 0,1 0,1 0,2 Med denne opløsning bruger systemet ca. 2 døgn på hele lambdaberegningen. For at opnå en større præcision i beregningen, kunne følgende opløsning i systemet vil være anvendt: Lambda FiO2 Vt f Step 0,01 0,01 0,01 0,1 Denne opløsning ville give mere realistiske steps i respiratorindstillingerne og dermed mere præcise lambdaværdier. Beregningstiden vil dog stige på baggrund her af. Endnu et optimeringsområde, er de konstruerede patientcases. Under systemtesten med klinikeren, blev det påpeget at cardiacoutput i de fleste tilfælde var for lave. I klinikken ville disse tilfælde ikke blive betegnet stabile, som de konstruerede patientcasene er karakteriseret ved. De fleste ville skulle sættes 1l op i cardiacoutput for, at patienterne vil kunne betegnes som stabile. Dette havde den indflydelse på klinikeren, at vedkommende satte iltfraktionen en smule mere op end det ville være tilfældet ved en stabil patient med et højere cardiacoutput. En måde dette problem med de fiktive patientcases kunne løses på, var at implementere virkelige patientcases i Dr. Know, med data fra patientjournalerne. Dette kunne løse problemerne med de urealistiske tilfælde. Dog er det vurderet at dette problem ikke er omfattende, idet en anæstesiolog har været med i processen omkring konstruktionen af patientcasene. Såfremt, Dr. Know blev konstrueret som et online softwaresystem, med online database, var der mulighed for at implementere Dr. Know på flere afdelinger, og dermed indsamle data fra mange forskellige klinikere. Herved vil det være muligt at beregne lambdaværdier som bliver gældende for en større del af klinikerne. Idet systemet ikke skal bruges online vurderes den tid beregningen tager at være passende. Her kan desuden henvises til designkriterierne, hvor effektiviteten er vægtet som mindre vigtig, idet Dr. Know skal køre for sig selv uafhængigt af andre systemer, samtidig med at tiden for beregningen af vægtningerne af penaltyfunktionerne ikke er essentiel for outputtet. 20.1.2 Testoutput Det ses ud fra resultaterne i systemtesten, at Dr. Know har vægtet oxygentoxicitet højere end de resterende penalties. Som det allerede er nævnt, ligger klinikerens FiO2 -indstillinger højt. Dette skyldes, at der skal kompenseres for de lave cardiac output. Med de vægtninger, som Dr. Know har forslået, kan det konkluderes, at systemet har været i stand til at afbilde klinikerens tankemåde. 126 Diskussion ¾ Systemet har beregnet de respiratorindstillinger, som er optimale ud fra den fundne lambdakombination. På basis af disse er der plottet forskellen mellem klinikerens og systemets forslag. Graferne afbilder derfor, hvor meget systemets forslag afviger fra klinikerens forslag til respiratorindstillinger. Vedrørende FiO2 -indstillingen ses det, at et gennemsnit på 6,5 % ikke er så galt, men en spredning på 11,69 er ikke tilfredsstillende. Dette skyldes, at systemet hele tiden foreslår en lavere FiO2 -procent, der ligger i området 20-25%. Vedrørende Vt-indstillingen ses det, at systemet foreslår værdier i intervallet 0,5-0,6 liter. Selv om klinikeren generelt forslår lavere indstillingerne for Vt, ligger middelværdi og spredning tilfredsstillende på trods af de store steps i udregningen. Vedrørende frekvens-indstillingen ses det, at systemet foreslår, at den ligger bedst i intervallet 12-16 pr. minut, med en henholdsvis tilfredsstillende gennemsnit og spredning på 0,518 og 4,4. Selv om systemet afbilder forsøgspersonens tankegang, viser Bland Altmann-plottene, at systemet har et dårligt fit i forhold til klinikerens forslag. Systemfit betragtes til at være dårligt, idet punkterne afbilder en ret linje med en stor hældningskoefficient. Punkterne burde ligge med gennemsnitlig samme afstand til linien i nulpunktet. Dette kan for eksempel skyldes, at de steps som Dr. Know har kørt med, ikke er optimale nok. Dette gælder både for respiratorindstillingerne og for lambdaværdierne. For frekvens-indstillingen er gennemsnitsværdierne tilfredsstillende, hvilket kan skyldes, at linien ligger med en spredning omkring nulpunktet, og de ophæver således hinanden. 20.2 Konklusion Der er i dette projekt taget udgangspunkt i følgende problemformulering: Hvorledes er det muligt at konstruere et vidensindsamlingssystem, som kan indsamle og formalisere klinikeres subjektíve holdninger til, hvordan respiratorindstillinger indstilles mest fordelagtigt for en kritisk syg patient, med henblik på en rationel vægtning af penaltyfunktioner? Når en kliniker står over for at skulle tilpasse respiratorindstillingerne hos en kritisk syg patient, står klinikeren ligeledes med en problemstilling, hvor vedkommende skal afveje, hvilke konsekvenser ændrede respiratorindstillinger vil få. Her vil klinikeren ofte skulle gå på kompromis med et eller flere surrogatmål, såfremt det kliniske effektmål stadig skal bibeholdes. Denne tradeoff-problematik er beskrevet ved hjælp af utilityteori. Der blev taget udgangspunkt i et konstrueret beslutningsstøttesystem INVENT, der bygger på utilityteori, som har implementeret kurveformerne på penaltyfunktionerne, mens der kun er implementeret vægtning af penaltyfunktionerne for én enkelt patientgruppe. Det blev fundet, at der er muligt at konstruere et softwaresystem, der bygger på en formalisering af klinikerens præferencestruktur og indirekte indsamler viden om forskellige klinikeres tradeoffs af de forskellige konsekvenser, der opstår ved at træffe et valg af respiratorindstillinger. Systemet kan på nuværnede tidspunkt indsamle klinikerens viden for de 3 patientgrupper: Postoperativ hjertepatient, hjernetraumepatient og intensiv patient. Denne problemstilling blev løst ved hjælp af objektorienteret analyse og design, UML samt Java. Der er herved blevet konstrueret et vidensindsamlingssystem, i nær kontakt med udviklere af INVENT. Systemet er konstrueret således, at der eksisterer én brugergrænseflade til klinikeren som giver input til Dr. Know, samt én til udvikleren som bruger outputtet fra systemet. 127 Diskussion ¾ Klinikerdelen af Dr. Know visualiserer patientparametre, initielle patientvariable for 20 forskellige patientcases, samt systemets forslag til de respiratorindstillinger der giver den mindste penalty. Systemets forslag til respiratorindstillinger er beregnet på forhånd. Dette skyldes at denne beregning er en tidskrævende proces, når den skal foretages for alle patientcases. Klinikeren bliver således præsenteret for disse når en patientcase vælges. Klinikeren har mulighed for at indtaste nyt forslag til respiratorindstillinger og herudfra simulere patientvariable. Når klinikeren har opnået en tilfredsstillende patienttilstand, gemmes respiratorindstillingerne i databasen. Udviklerdelen af Dr. Know giver mulighed for, at brugeren kan beregne vægtninger af penaltyfunktionerne for en bestemt patientgruppe samt for en udvalgt kliniker. Efter beregningen af lambdaværdier er der desuden mulighed for at se et Bland-Altmann plot for de tre valgte respiratorindstillinger FiO2 , Vt og f. Dette plot giver udvikleren en ide om, hvor god en tilpasning systemet har opnået til klinikerens/klinikernes forslag. Dette gøres ved at visualisere forskellen mellem klinikerens forslag og systemets forslag til respiratorindstillinger. Udviklerdelen af Dr. Know giver ligeledes mulighed for at gemme de beregnede lambdaværdier samt at hente beregnede lambdaværdier frem igen. For at kunne gemme den data klinikeren indtaster i Dr. Know, er der konstrueret en database. Databasen er valgt, p.g.a. muligheden for at organisere dataen i tabeller, således at denne data er let af søge i, finde og hente ud igen. Databasen bevirker også at der ikke skal gemmes redundant data, da det er muligt at oprette relationer tabellerne imellem, og således kan en kliniker sammenkædes med flere patientgrupper. Der er udført integrationstests ud fra usecasene for at undersøge, om Dr. Know lever op til brugerkravene. Alle tolv usecases lever op til brugerkravene og fungerer efter de funktionaliteter, som brugeren har ønsket. Der er desuden udført en brugertest af programmet for klinikerdelen. Denne er blevet testet i samarbejde med anæstesiolog fra intensivafdelingen på Aalborg Sygehus Nord. Denne test har vist, at brugervenligheden af programmet er opnået, dog er der flere parametre visualiseret for klinikeren her, end de har tilgængeligt til i praksis. Dette giver dog klinikeren en bedre forudsætning for at vurdere patientens tilstand. Afslutningsvist kan det konkluderes, at det har været muligt at konstruere et softwarebaseret vidensindsamlingssystem, der indsamler klinikerens subjektive holdning og formaliserer en præferencestruktur og derved afhjælper tradeoff-problematikken. Det konstruerede system Dr. Know er således i stand til at vægte penaltyfunktionerne for de tre patientgrupper: postoperative hjertepatienter, hjernetraumepatienter samt intensiv patienter. Det skal undersøges hvorvidt systemet kan forbedres, med hensyn til lambdaberegningen. Herunder kan metoden som finder Dr. Knows forslag forbedres, så beregningstiden kan minimeres. 128 KAPITEL 21 Perspektivering Dette kapitel inkluderer et udvalg af tanker og idéer til videre optimering og udbygning af Dr. Know. Dr. Know vil blive sat ind i en større sammenhæng samtidig med, at der vil komme forslag til mulige forbedringer af programmet. 21.1 Forbedring og optimering Under udviklingen og testningen af Dr. Know er der fundet områder, som kunne tænkes forbedret i næste version af Dr. Know. Disse forbedringer er ikke blevet udført pga. af semestrets korte tidsrum, men primært fordi de ikke har været en af de stillede funktionalitetskrav til Dr. Know og ikke har været beskrevet som usecases. I det følgende vil disse forbedringer blive beskrevet, samtidig med at der gives en mulig løsning til, hvorledes disse forbedringer kunne implementeres. 21.1.1 Tidligere login Under udarbejdelse af login- og klinikervinduet blev det klart, at det vil være ønskværdigt at have en funktion, som kan tillade klinikeren at vælge et tidligere login. Som Dr. Know er opbygget nu, er det ikke muligt for klinikeren at afbryde sin vurdering af patientcases ved f.eks. case nummer 6 for senere at genoptage og fortsætte vurderingen af de 20 patientcases, der er for hver patientgruppe. Klinikeren skal med andre ord udfylde alle 20 patientcases, i én ombæring, da data ellers ikke kan anvendes til udregning af lambda. Ønsker klinikeren at stoppe ved f.eks. case nummer 6, kan vedkommende ikke logge på igen og fortsætte, hvor klinikeren stoppede sidst. Dette skyldes, at hver gang en kliniker logger på, oprettes denne som en ny bruger i databasen. Dette medfører, at hvis klinikeren stopper ved case nummer 6, så bliver der aldrig ført mere data ind i databasen for denne kliniker. Logger klinikeren på igen, så kommer de nye data til at stå ved den nye kliniker, der oprettes i databasen. Med en funktion i loginvinduet som kan hente og vise de klinikere, der tidligere har brugt Dr. Know, kan det gøres muligt for klinikeren at vælge sig selv ud fra denne liste og logge på igen. Samtidig vil det også være 129 Perspekti vering ¿ ¾ muligt for klinikeren at vurdere de 20 cases af flere omgange, da data så vil blive gemt samme sted i databasen for hver gang klinikeren logger på. For at kunne lave et tidligere login, skal der på loginvinduet laves en scrollmenu, hvor kliniker kan vælge sit navn, såfremt vedkommende har været logget på før. For at kunne fylde navne ind i denne scrollmenu skal der laves en ny funktion i database-klassen, som henter et klinikerobjekt indeholdende klinikernummeret ud af klinikerdata-tabellen. Dette klinikerobjekt skal, når der logges på, sendes videre til klinikervinduet, så metoden godkend kan kaldes med de rigige klinikeroplysninger og dermed sikre, at data sættes ind ved den rigtige kliniker i databasen. 21.1.2 Tilføjelse af patientgrupper I Dr. Know eksisterer der på nuværende tidspunkt tre patientgrupper. For at gøre Dr. Know anvendelig for flere afdelinger kræves det, at der tilføjes flere patiengrupper, som eksempelvis KOL og ARDS patienter. For eksempelvis disse patienttyper forudsættes det, at INVENT har en fuldkommen lungedynamikmodel implementeret. De tre eksisterende patientgrupper anvender alle de samme 20 patientcases. Såfremt de nye patientgrupper også kan anvende disse 20 cases, vil det ikke kræve megen programmering at tilføje de nye patientgrupper. Det er kun et spørgsmål om at udvide valgmulighederne på brugergrænsefladerne, da patientgruppenavnet kun er en label der påsættes respiratorindstillingerne. De klasser der skal ændres noget i er: KlinikerVindue og UdviklerVindue. 21.1.3 Gem grafdata Når tidligere gemte lambdaværdier hentes ind i Dr. Know, kan de tilhørende errorgrafer ikke ses, da disse ikke er gemt. For at udvikleren igen kan vurdere, om de gemte lambdaværdier er anvendelige, vil det være fordelagtigt at gemme data for errorgraferne sammen med lambdaværdierne. Skal graferne kunne visualiseres igen, kræves det at objektet ErrorData gemmes sammen med lambdaværdierne. ErrorData kan således gemmes i samme fil, som lambdaværdierne gemmes i. Dette betyder, at metoderne gemEtEllerAndet og indlaesEtEllerAndet i klassen LambdaGem skal rettes til, så disse også kan gemme og indlæse ErrorData. 21.1.4 Online database Det kunne af både udvikleren og klinikeren ønskes at have Dr. Know databasen til at ligge online, så klinikeren og udvikleren ikke behøver at anvende samme computer. Med en online database kunne klinikeren sidde på sin arbejdsplads og vurdere patientcases, og det giver dermed to store forbedringer i Dr. Know. For det første kan beregningen af lambdaværdier foregå på en anden computer, da udvikler nu kan hente data ned via internettet og beregne lambdaværdierne på sin egen computer. Dette medvirker også, at beregningen ikke vil forhindre klinikere i at anvende Dr. Know på samme tid. Den anden forbedring ligger i, at flere klinikere kan anvende Dr. Know på samme tid, da de data, der gemmes, overføres til en central database. For at lave en online database kræves det, at der opsættes en server, som der kan opnås adgang til via internettet (se Figur 21.1 på næste side). På denne server skal der installeres en SQL database. Dr. Know kan allerede køre med en online database. Det eneste, der skal rettes i koden, er, at der skal angives den korrekte adresse til databasen. 130 Perspektivering ¾ Figur 21.1: Illustration af hvorledes en online database kan implementeres, således at flere klinikere kan anvende denne samtidigt. Udvikleren kan udføre lambdaberegningen uden at klinikerne forstyrres af dette. 21.2 Integrering med INVENT I Dr. Know anvendes både matematiske modeller og penaltyfunktioner fra INVENT. Dr. Know kan vægte disse penaltyfunktioner således, at de producerede vægtninger kan anvendes til at kalibrere INVENT, der således kan tilpasses flere forskellige patientgrupper og ikke kun være tilpasset patienttypen post-operativ CABG. På grund af at Dr. Know og INVENT deler megen kode og funktionalitet, vil det være fordelagtigt, hvis Dr. Know kan integreres i INVENT. På denne måde kan Dr. Know blive en funktionalitet i INVENT, således at klinikerne selv kan have en indflydelse på de respiratorindstillinger, som INVENT foreslår. Ved at have de to systemer samlet i ét, kan klinikeren til enhver tid gå ind og få indlejret sin egen ekspertviden i INVENT. Dette kræver dog, at der løses nogle problemer omkring udregningen af lambdaværdierne, da denne udregning på nuværende tidspunkt tager forholdvis lang tid. I klinisk praksis er der ikke tid til at vente på, at programmet bruger timer eller dage på beregning og ikke kan anvendes imens. Dette kunne løses ved at lave en beregningsalgoritme som kun kører, når optimerings- og simuleringsfunktionerne ikke anvendes, eller når computeren har ressourcer tilrådighed. En anden løsning ville være, at INVENT kørte med en online database som beskrevet tidligere, og udregningen kunne foregå på en anden computer eller server. 131 Litteratur [1] C.W. Allerød, S.E. Rees, B.S. Rasmussen, S. Kjærgaard, and S. Andreassen. Retrospektive evaluation of a system for adjustment of ventilator settings. 1, 1999. [2] S. Andreassen. Medical Decision Support Systems, based on causal probabilitic networks. Aalborg Universitet, Dk, 2000. [3] Mark H. Beers. The merck manual - second home edition. http://www.merck.com/mrkshared/mmanualhome2/sec24/ch295/ch295b.jsp, 2003. [4] Agamemnon Despopoulos and Stefan Silbernagl. Color Atlas of Physiology. Thieme, 4th edt., 313545004, 1991. [5] Akeel I Din. Structured Query Language. NCC Blackwell, 1994. [6] Hans-Erik Eriksson, Magnus Penker, Brian Lyons, and David Fado. UML 2 Toolkit. Wiley Publishing Inc., 0-471-46361-2, 2004. [7] Ivor Horton. Beginning Java 2. Wrox Press, 2000. [8] Ralph L. Keeny and Howard Raiffa. Decisions with Multiple Objektives. Press syndicate of the University of Cambridge, UK, 0521438837, 1999. [9] L. Mathiassen, A. Munk-Madsen, P. A. Nielsen, and J. Stage. Objekt Orienteret Analyse og Design. Marko, 2001. [10] Sun Microsystems. The java tutorial. http://java.sun.com/docs/books/tutorial/index.html, 2004. [11] Patrick Neligan. Mechanical ventilation. http://www.ccmtutorials.com/rs/mv/, 2004. [12] Jacob Nordfalk. Objektorienteret programmering i Java. Forlaget Globe Publishing, 2002. [13] S. Rees, S. Kjærgaard, P. Thorgaard, J. Malczynski, E. Toft, and S. Andreassen. The automatic lung parameter estimator (alpe ) system: non-invasive estimation of pulmonary gas exchange parameters in 10-15 minutes. Journal of Clinical Moni toring and Computing, 17, 2002. [14] S.E. Rees, S. Andreassen, M. Freundlich, C. Morgan, E.R. Carson, and P. Thorgaard. Selecting ventilator settings using invent, a system including physiological models and penalty functions. 1999. 133 LITTERA TUR À ¾ [15] JCreator Xinox Software. Jcreator main page. www.jcreator.com, 2004. [16] Aalborg Universitet. Studieordningen 6.-10. semester. http://www.miba.auc.dk/undervisningsweb/Sstudieordning-S6-S10-jan2004.pdf, 2004. [17] Chien Sheng Wang, Dein Shaw, and Kuen Shan Jih. An intelligent control system for ventilators. Medical engineering and Physics, 9:534–542, 1998. [18] Henrik R. Wulff and Peter C. Gøtzsche. Rationel klinik. Munksgaard bogklubber, 8779361749, 2001. 134 Del VI Appendiks I denne del af rapporten vil der forefindes materiale, der er udarbejdet for at understøtte udvalgte dele af rapporten. Appendiks A indeholder en beskrivelse af fysiologien, der er anvendt i INVENT. Appendiks B beskriver de matematiske modeller over fysiologi, der er implementeret i INVENT. Appendiks C indeholder en beskrivelse af GUI-elementer, input- og outputfelter, samt de underliggende funktioner. Appendiks D beskriver attributterne til de forskellige GUIs. Appendiks E indeholder et referat af interview med Dr. Med Per Thorgaard, benævnt Bilag 1. Appendiks F indeholder et referatet af interview med Dr. Tech Steen Andreassen, benævnt Bilag 2. 135 APPENDIKS A Fysiologi i INVENT I dette appendiks beskrives kort de respiratorindstillinger, patientparametre og patientvariable, som er indeholdt i INVENT. Desuden gives en definition af de fem kliniske tilstande barotraume, acidose/alkalose, atelektase, oxygentoxicitet og dårlig oxygenering. A.1 Respiratorindstillinger I INVENT har klinikeren mulighed for at indstille på de respiratorindstillinger, der ses i Tabel A.1. Det er respiratorindstillinger for inspireret oxygenfraktion (FiO2 ), tidalvolumen (Vt), respirationsfrekvens (f), positivt slutekspiratorisk tryk (PEEP) og forholdet mellem tiden for inspiration og ekspiration (I:E). [14] I tabellen er referenceværdierne angivet. Respiratorindstilling FiO2 Vt f I:E PEEP Forklaring Inspireret fraktion O2 Tidalvolumenet Respirationsfrekvensen Ratioen (inspiration/ekspiration) Positivt slutekspiratorisk tryk Referenceværdi 21 % 0,5 l 12-14 /min 0,33 5,0 cmH2 O Tabel A.1: Overblik over de forskellige respiratorindstillinger. A.2 Patientparametre Patientparametrene er inddelt i fem parameterkategorier: Gasudvekslingsparametre, lungemekaniske parametre, metaboliske parametre, circulationsparametre og parametre for blodet. Patientparametrene giver klinikeren et dybereliggende billede af patientens tilstand og påvirkes ikke markant af respiratorindstillingerne. Det beskrives her, hvilke patientparametre der monitoreres. [4] 137 Fysiologi i INVENT ¾ Gasudvekslingsparametre Shunt er den mængde blod, der ikke deltager i gasudvekslingen i lungerne (normalværdi 5%). FA2 repræsenterer den fraktion af ventilation til en lungekompartment, der modtager 90% af blodgennemstrømningen (en FA2 på 0.9 indikerer derfor et match mellem perfusion af blod og ventilation). Vd er volumenet af deadspace (referenceværdi er 150 ml). Lungemekaniske parametre Compliance er lungernes elasticitet givet ved forholdet mellem ændringen i volumen og ændringen i trykket i lungerne (referenceværdi er 0,05 l/cmH2 O). Resistance er et mål for modstanden i luftvejene (referenceværdi er 3,99 cmH2 O/l/s). Metabolisk tilstand Den metaboliske tilstand er et udtryk for den kemiske balance i vævet, og følgende parametre monitoreres: ˙ 2 er flowet af O2 (referenceværdi er 0,25 l/min). VO ˙ 2 er flowet af CO2 (referenceværdi er 0,20 l/min). VCO Cirkulation Q˙ er cardiac output, der indikerer hvorvidt patientens blodgennemstrømning er tilstrækkelig for oxygenering af organismens væv (referenceværdi er 5 l/min). Blodets tilstand DPG er 2,3-Difosforglycerat, som mindsker affiniteten for O2 , hvis den findes i for store mængder i blodet (referenceværdi er 5,00 mmol/l). Hb er hæmoglobin, som giver et udtryk for blodets evne til at transportere O2 rundt i oganismen (referenceværdi er 9,30 mmol/l). COHb er kulmonoxid, der ikke har nogen affinitet for O2 (referenceværdi er 0 mmol/l). MetHb er methæmoglobin, der ikke har nogen affinitet for O2 (referenceværdi er 0 mmol/l). Temperatur har en betydning for O2 -transporten i blodet (referenceværdi er 37 Á C). A.3 Patientvariable Patientvariable er inddelt i tre kategorier: lungevariable og variable for henholdsvis arterielt blod og venøst blod. Det beskrives her, hvilke patientvariable, der kan simuleres: Lungevariable FeCO2 er den ekspirerede CO2 -fraktion (referenceværdi er 4,4 %). FeO2 er den ekspirerede O2 -fraktion, der sammen med FeCO2 giver et mål for, hvor meget O2 der optages i alveolekapillærerne i forhold til den fraktion, der ventileres med samt hvor stor fraktion CO2 der udskilles (referenceværdi er 15,3 %). 138 Fysiologi i INVENT ¾ Arterielle variable SaO2 er den arterielle iltmætning (referenceværdi er 96,9 %). PaO2 er partialtrykket af O2 i det arterielle blod (referenceværdi er 12,4 kPa). PaCO2 er partialtrykket af CO2 i det arterielle blod (referenceværdi er 4,5 kPa). pHa er pH-værdien i det arterielle blod (referenceværdi er 7,42). Venøse variable SvO2 er den venøse iltmætning (referenceværdi er 73,0 %). PvO2 er partialtrykket af O2 i det venøse blod (referenceværdi er 5,6 kPa). PvCO2 er partialtrykket af CO2 i det venøse blod (referenceværdi er 5,6 kPa). pHv er pH-værdien i det venøse blod (referenceværdi er 7,39). A.4 Surrogatmål De fem behandlingsmål i INVENT er at undgå de kliniske tilstande for barotraume, acidose/alkalose, atelektase, oxygentoxicitet og dårlig oxygenering. De beskrives efterfølgende. A.4.1 Barotraume Dette traume er defineret som vævsskade forårsaget af ekspanderingen af O2 i lungerne på grund af et lavere tryk i pleura. Overinflation af lungerne, for eksempel som følge af mekanisk ventilation, kan forårsage ruptur af alveolerne og de subpleurale blærer på lungernes overflade, hvilket giver anledning til pneumothorax. Udover pnemothorax kan der, som følge af barotraume, dannes embolier i blodbanen, hvilket betyder at embolierne kan forhindre blodgennemstrømningen til kroppens organer.[3] A.4.2 Acidose/alkalose I det efterfølgende er henholdsvis respiratorisk acidose og alkalose beskrevet. Respiratorisk acidose Denne tilstand kan opstå som et resultat af skader på lungeparenkymet, svækkelse af den alveolære gasudveksling, parese af lungemuskulaturen, insufficient respiratorisk drive, reduceret bryst motilitet mm. Som følge af ovenstående situationer, vil der forekomme en stigning i CO2 , hvilket derefter resulterer i en øget HCO3  og H à produktion. Dette kan ses ud fra reaktion (A.1), som beskriver sammenhængen mellem CO2 og HCO3  . CO2 Ä H 2 O Å HCO3 Â Ä Hà (A.1) pH-værdien vil falde som følge af den øgede produktion af HCO3  , hvilket ses ud fra ligning (A.2). Stigningen i HCO3  er meget mindre end stigningen i CO2 , hvilket skyldes buffersystemer i blodet. Dette betyder at ratioen [HCO3  ]/[CO2 ] bliver mindre og pH falder til under det normale. 139 Fysiologi i INVENT ¾ pH Æ pKa Ä log Ç HCO3Â È CO2 È (A.2) Ç Ligning (A.2) kaldes også for Henderson-Hasselbalch-ligningen, og bruges til at regne pH-værdien ud for en bikarbonat opløsning. pKa er den negative logaritme af dissociationskonstanten Ka for en syre. I de tilfælde, hvor PCO2 er vedvarende, kan der forekomme en renal kompensation af den respiratoriske acidose. Nyrerne begynder at udskille stigende mængder H à -ioner, hvilket bevirker at syre/base-homeostasen genoprettes til trods for stigningen i PCO2 . Respiratorisk alkalose Tilstanden opstår idet lungerne eliminerer mere CO2 end der produceres ved vævenes metaboliske aktiviteter. Denne situation kaldes hyperventilation, og resulterer i et fald i PCO2 . Faldet i CO2 betyder ifølge ligning (A.2), at ratioen [HCO3  ]/[CO2 ] bliver større og pH stiger over det normale. Den dominerende kompensatoriske mekanisme ved respiratorisk alkalose er nyrens reducerede sekretion af H à -ioner og øgede ekskretion af HCO3  . Ud fra ligning (A.2) vil man se, at dette vil kompensere for alkalosen. A.4.3 Atelektase Atelektase er en tilstand, hvor hele eller dele af lungen er lufttom og sammenklappet. Tilstanden kan være enten akut eller kronisk. Ved den akutte atelektase er lungen kollapset og er primært genkendelig ved at lungen er lufttom. En kronisk atelektase vil ofte være karakteriseret ved, at det affekterede område af lungen er præget af lufttomhed, infektion, bronkiektase og fibrose. A.4.4 Oxygentoxicitet Det lægelige term for oxygentoxicitet er hyperoxia, og indtræffer idet det inspiratoriske tryk (PiO2 ) er over 22 kPa, som følge af en stigning i FiO2 eller en stigning i trykket med normal FiO2 . Hos patienter som er under oxygen- eller ventilationterapi, vil der være en risiko for oxygentoxicitet i lungevævet. Graden af O2 toxicitet afhænger af niveauet af PiO2 og varigheden af hyperoxia. Lungedysfunktion optræder når PiO2 på ca. 70 kPa er vedvarende over adskillelige dage eller 200 kPa i løbet af 3-6 timer. Symptomerne er hoste og dyspnø. Et PiO2 over 220 kPa resulterer ofte i kredsløbskollaps og bevidstløshed. A.4.5 Dårlig Oxygenering Hypoxia er modsætningen til hyperoxia, hvilket betyder lavt iltindhold i væv og organer. Dette medfører at O2 -koncentrationen i blodet er lavere end godt er (hypoxæmi). Den lave O2 -koncentration medfører i værste fald celle- og vævsnekrose, samt multiorgansvigt. 140 APPENDIKS B Modellerne integreret i INVENT I INVENT er der tre modeller integreret, hvilke er to fysiologiske modeller for henholdsvis oxygen (O2 ) og kuldioxid (CO2 ) og en lungedynamikmodel. O2 -modellen og CO2 -modellen anvendes i Dr. Know til simulering af patientvariablene. Idet Dr. Know er afgrænset til ikke at indeholde penaltyfunktionen for atelektase samt at der ikke skal foretages respiratorindstillinger for PEEP og I:E, hvilke anvender lungedynamikmodellen, bruges kun en lille del af lungedynamikmodellen. Lungedynamikmodellen beskrives derfor ikke i detaljer. O2 -modellen og CO2 -modellen vil i dette kapitel blive gennemgået for at give en forståelse for fysiologien anvendt i Dr. Know. B.1 O2 -modellen O2 -modellen er illustreret ved Figur B.1 på næste side, hvor modellen er inddelt i forskellige kompartments, der beskriver O2 i alveoler og blod. Modellen indeholder 16 ligninger, der deles op i fem dele. Modellens fem dele beskriver den alveolære ventilation, alveolære gasudveksling, shunt ligningen, oxygenering af blod og O2 -optagelsen i væv. Modellen er beskrevet på baggrund af [13, 4]. Modellen indeholder to parametre, shunt og ventilation perfusion (V/Q) mismatch, hvilke beskriver abnormaliteter af ilttransporten. Shunt er hvor stor en procentdel af blodet, der løber forbi lungerne uden at blive iltet (normalværdi for shunt er 5%), og V/Q er forholdet mellem ventilationen i alveolerne (V) og mean pulmonary blood flow, eller cardiac output (Q) (normalværdi 5,25/5 É 1). Værdierne for shunt og V/Q mismatch opnås ved hjælp af en anden model (ALPE), der måler lungefunktionen. I Dr. Know er disse dog konstante for hver patientcase. Der eksisterer ud over de følgende beskrevne ligninger to andre ligninger over O2 ’s massebalance i alveoler og blod. Disse to ligninger beskriver, at O2 opnår ligevægt straks efter ventilationsændring (2-5 minutter efter), hvilket verificerer, at O2 modellen kan integreres i dens steady state form. B.1.1 Ligninger indeholdt i O2 -modellen Følgende gennemgås de fem dele af O2 -modellen. 141 Modellerne integreret i INVENT ¾ Figur B.1: Figuren illustrerer O2 -modellen og viser de ligninger, modellen indeholder.[13] Alveolær ventilation Ligning 1 i Figur B.1 beskriver O2 -flowet ind i alveolerne (V˙ O2 ) ud fra fraktionen af inspireret O2 (FiO2 ), ekspireret O2 (FeO2 ) og den alveolære ventilation, der udregnes som forskellen mellem tidalvolumenet (Vt) og dead space (Vd), ganget med respirationsfrekvensen (f). Tidalvolumen er det volumen, der in- eller ekspireres under en normal respiration, dead space er den del af lunger og luftveje, hvor der ikke foregår gasudveksling, og differensen mellem disse to udgør således det volume, der deltager i den alveolære ventilation. 142 Modellerne integreret i INVENT ¾ Modellen indeholder to alveolære kompartments, hvor fA2 er den fraktion af total ventilation til en alveolær kompartment som modtager en fraktion af den totale blodflow (f2) i alveolerne. 1-fA2 repræsenterer fraktionen af total ventilation til den anden kompartment. Ligning 3 og 4 viser således O2 -flowet i hver af de kompartments som total O2 -flow ganget med ventilations fraktionen i det kompartment. Det totale flow i alveolerne er summen af flowet i begge kompartments, som ses af ligning 4. Fraktionen af ekspireret O2 i gennem begge compartments er summen af fA2 ganget med fraktionen af ekspireret O2 i kompartment 2 og (1-fA2) ganget med fraktionen af ekspireret O2 i kompartment 1 (ligning 5). Alveolær gasudveskling Ligning 6 og 7 udregner partialtrykket af O2 i modellens to lungekapillærkompartments (PcO2 Ê 1 Ë , PcO2 Ê 2 Ë ). Hvis ingen diffusionsabnormalitet opstår, er partialtrykket i kapillærerne det samme som partialtrykket af O2 i alveolerne (PA O2 =FeO2 (PB -PH2 O )), hvor PB er barometertrykket, PH2 O er vandtrykket, og PB -PH2 O er således den del af trykket, der udgøres af O2 . Koncentration af O2 i kapillærkompartments (CcO2 Ê 1 Ë , CcO2 Ê 2 Ë ) beskrives i ligning 8 og 9 som O2 koncentrationen i venerne plus stigningen i O2 koncentration som følge af V/Q mismatch i kompartmenterne. Shunt-ligning Ligning 3 er shunt-ligningen og beskriver koncentrationen af O2 i det arterielle blod (CaO2 ), når blodet fra lungekapillærerne (CcO2 ) er blandet med en fraktion (fs) af det venøse blod (CvO2 ). Udtrykket PcO2 Ê 1 Ë (1fs)(1-f2) + PcO2 Ê 2 Ë (1-fs)f2 repræsenterer det kapillære blod, mens fraktionen af venøst blod er beskrevet ved fsCvO2 . Blodparametre Ligning 11 og 12 implementerer O2 -dissociationskurve (ODC) justeret for pH (pHa er pH i det arterielle blod), partialtrykket af CO2 (PCO2 ), temperatur (T) og koncentrationen af 2,3-diphosphoglycerat (CDPG) i blodet, ganget med respirationsfrekvensen fås O2 -saturationen i det arterielle blod (SaO2 ). Ligning 13 beregner blodets O2 -kapacitet (O2 cap), når den totale hæmoglobinkoncentration (Hb) er justeret for dens abnorme former (HbMet, HbCO). HbMet er methæmoglobin og HbCO er kulmonoxidhæmoglobin, der begge ikke har nogen affinitet for O2 . Ligning 14 og 15 beskriver koncentrationen af O2 i venøst blod (CcO2 ) som summen af O2 bundet til hæmoglobin (O2 cap*ScO2 ) og O2 fysisk opløst (PcO2 *αO2 ). Koncentrationen af fysisk opløst O2 i blodet er lineær afhængig af partialtrykket af O2 i blodet, hvor α er opløselighedskoefficienten for O2 . Vævs optagelse Ligning 16 er Ficks ligning og udregner den venøse O2 -koncentration (CvO2 ) som den arterielle O2 -koncentration (CaO2 ) minus faldet i O2 -koncentrationen som følge af O2 -optagelse i vævet. 143 Modellerne integreret i INVENT B.2 ¾ CO2 -modellen CO2 -modellen, der anvendes i INVENT, er implementeret som en tre-kompartmentmodel. Disse kompartments repræsenterer CO2 i henholdsvis blodet, interstitel væske og vævet. Hertil hører en række ligninger, som beskriver ventilationen af alveolerne, cirkulationen, CO2 -produktionen og bindingen af CO2 i blodet, den interstitielle væske og vævet. På Figur B.2 ses fysiologien i CO2 -modellen illustrereret. CO2 -modellen anvender ca. 70 ligninger til at forudse effekterne af en ændret ventilation på syre/base-kemien i blodet. I det følgende vil kun reaktioner for fysiologien i modellen blive beskrevet. CO2 -modellen vil blive beskrevet på baggrund af [14]. Den alveolære ventilation, cirkulation og CO2 -produktion er beskrevet ved ligninger tilsvarende dem, der Figur B.2: Figuren illustrerer CO2 -modellen med dens ligninger og kompartments. [14] anvendes i O2 -modellen (se afsnit B.1.1 på side 141). VCO2 Æ f Ê V t Ì V d Ë Ê FeCO2 Ì FiCO2 Ë CvCO2 Æ CaCO2 ÄÎÍ 144 ˙ VCO 2 Q˙ Ï (B.1) (B.2) Modellerne integreret i INVENT ¾ B.2.1 Interstitiel væske og væv Der er i modsætning til O2 anselige mængder CO2 i den interstitielle væske og vævet. I modellen er denne CO2 i den interstitielle væske repræsenteret som et par bicarbonat non-bicarbonat buffere i reaktioner 6 og 7 på Figur B.2 på forrige side. Et sænket ”i” angiver, at det er tilhørende den interstitielle væske, ”t” er tilhørende vævet, ”p” er tilhørende plasma, og ”e” er tilhørende erythrocytterne. CO2 i væv er ligesom ved den interstitielle væske repræsenteret ved et par bicarbonat non-bicarbonat buffere (reaktion 8 og 9 ). B.2.2 Blod Ligning 1 viser, hvad der sker, når CO2 tilsættes H2 O og bicarbonat (HCO3 Рp ) og brintioner (H Ãp ) dannes. Ligning 2 beskriver, hvorledes plasma-nonbicarbonat-bufferen splittes op i H Ãp og NBB Âp , når dennes tilsættes til H2 O. Ligning 3 viser, at CO2 også omdannes til HCO3 Рe og Heà i erythrocytterne. De resterende reaktioner involverer alle hæmoglobin. Ligningerne indeholder kun de oxygenerede hæmoglobinformer, men de samme ligninger gælder for de deoxygenerede hæmoglobinformer. Ligning 4a og 4b er kendt som Bohr/Haldane effekten og beskriver hæmoglobins binding til enten H eller O2 , ligesom ligninger 5a og 5b beskriver, hvordan O2 og CO2 konkurrerende binding til hæmoglobinmolekulet. B.3 Model af lungedynamikken Lungedynamikmodellens brug i Dr. Know er begrænset til udregning af positiv inspiratorisk tryk (PIP) som kan regnse udfra følgende ligning: Comp Æ PIP Ì PEEP VT (B.3) Comp er lungernes compliance, dvs. et mål for lungernes elasticitet. Compliance og PEEP har faste værdier i Dr. Know. 145 APPENDIKS C GUI-elementer samt underliggende funktioner Dette appendiks indeholder de definerede GUI-elementer, input- og outputfelter samt de funktioner, der er fundet ved at gennemgå hvert enkelt GUI-elementer. Først vil GUI-elementerne for de enkelte vinduer være at finde, og herefter vil funktionerne forefindes. Formålet med dette er, at finde eventuelle udeladte funktioner. C.1 LoginVindue C.1.1 GUI-elementer I det efterfølgende beskrives GUI elementerne inputfelter, outputfelter og knapper for loginvinduet. Inputfelter: ÑÓÒÕÔÔ ÖØ×Ù)ÚÓÚÛÜ á$× ÝÛÞß$Ü à áÛâ ÞÛ ñ)ÚÓôà × ôñßÞìÝøÜ ÙëÛ)Ü ãºä å è îìà Ûâ êî)ñÜ × è îà Û)â ê4ïé è ÛÜ × ò á× ä á× è îà Û)â êùý×üà Û×)×à è Û$è ä ð Ô ×)çÙ$ä è é Û)â è)è à â$à ×êè Þ Ô ×)çÙ$è é Û)â è)è à â$à ×êè Þ Ô ×)çÙ$è é Ûâ èè à â$à ×ê)è Þ ä ôñß"Þ)þè à â â à ×ëÞ)ôÛ$è Ûëì×Ûâ ÞÛ û ñÚ%ôà × ÿ ó ä ä è ×à ×ë ä è ×à ×ë è ×à ×ë ä éìÛé è ÛÜ × é ä ä ä ä á×í á×í ×üà Û×)×à è Û$è í ä ä è à ñ×Þôñ)ß"Þõè à âá ä ä 147 è × ä à ×ë ä éìé ñÜ × Ô ×)çÙ$è é Ûâ èè à â$à ×ê)è Þ ó è îà Ûâ êùúé êÛ)â à ×ë æ è à ñ×Þôñß"Þõè à âá â ë éôÜ ÙëÛ)Ü è öçÛì÷ ß$â à ×)à ßÛÜÛâ â ÛÜ4Ùêáà ß$â ÛÜ í é âë é ê)Ûâ à ×ëí ä ä éÞè à â â à ×ëí GUI-elementer samt underliggende funktioner ¾ Outputfelter: Ingen Knapper: "1,2 ! )* $& ! $ ! +,./+ 0 ( "' ! ! " # $ $ $ $ % & :; "&9 5 " / 4365 78 " ! C.2 KlinikerVindue C.2.1 GUI-elementer I det efterfølgende beskrives GUI elementerne inputfelter, outputfelter og knapper for klinikervinduet. Inputfelter: <=> > ?@ ABBC D KMLI@ ECFGD H IC J FC N O R [&H CJ U4[XH acbX\H BA J C D CR > @ QAR S C J R R H JD CF QH D LR TD H @UFR H J J H @V C@&W [&H acb_ N ` R [XH C J U[&D CG6IC@F\H B]AJ CD CR > @Q AR S CJ RR H JD CFQ H D LR T D H @UFR H J J H @VC @&W S D CG6IC@F&_ N ^ R [XH C J U YR H UL J \H B]AJ CD CR > @Q AR S CJ R R H JD CFQH D LR TD H @U FR H J J H @V C@XW YZR N P eTG FXgLR H C @R <D AQ QC dTBe H @LR H T@F eT G FfR H J*I LJ VLS QLR H C @R V&D A QQCX_ O h eTG*F&gLR H C @R K,ABBfCD dTBe H @LR H T@F eT G FfR H J*I LJ VLS QLR H C@R @A BBC D._ 148 GUI-elementer samt underliggende funktioner ¾ Outputfelter: ijkk lmn oopq xyvm r4pstq u vpw sp z4{ Xu p w Xnm l,u s}w y~ pqv8q &u* q&s n m z Xu p w , l,u s }w y~p qXvq &u qZ,4 z Xu p w M l,u s }w y~p qXvq &u qXpy s}ypX z| &u pw & l,u s}w y~p qXv 8q &u q&yq &u y n }n z &u pw &, o}w u y mp l,u s} w y~pqv8q Xu qX o}w u y mpX zz Xu p w psu s ymp l,u s} w y~pqv8q Xu qq psu s ymp& z Xu p w c l,u s }w y~pqvq Xu qX,c4 z Xu p w c l,u s }w s~p qXvq &u qX,c4 z &u pw 4l+i lu s} w y~pqv8q Xu q+lZi Xu p w , l,u s }w y~p q48oXw u m yw w p 4{ Xu pw X,&, l,u s} w y~pq,yq ~foXw u m yw w p &u pw &p l,u s }w y~p qXvq &u qop 8oXw u m& Xu pw +po} l,u s }w y~p qXvq &u qX po}pq y n q. | &u pw 4 pcx,n l,u s} w y~pqmnv8q pmpfvq &u qX q yt* u m pt*s}u q pq p&c4 Xu p w p c&u o lu s} w y~pqXsu onw pq pvq Xu qX q yt* u m pt*s}u q pq p&c4 z &u pw 4 pcx,n l,u s} w y~pqmnv8q pmpfvq &u qX q yt* u m pt*s}u q pq p&c4 Xu p w p c&u o lu s} w y~pqXsu onw pq pvq Xu qX q yt* u m pt*s}u q pq p&c4 &u pw &+ycx,n lu s} w y~pqmnv8q p mpfv 8q &u* q&y q p q u pw u w o mu m Xu p w XZy c&u o l,u s }w y~p q&s u on w p q pv 8q &u q&y q pq u pw u w o mu m &u pw 4ycx,n lu s} w y~pqmnv8q p mpfv 8q &u* q&y q p q u pw u w q ~t 149 GUI-elementer samt underliggende funktioner ¾ ÆÇÈ È © ªºº§ ¨ ¸M¥«© ɧ¢´¨ ¡ «§ ¤ ¢§ ¹Å ° ¶X¡ §¤ 4·¥²c³X»M¡ º ,¡ ¢£ ¤ ¥¦§¨X¢¡ ºª¤ §¨ §° «¬8¨ X¡ ® ¯¨X¥¨ ° §¨ ¡ § ¤ ¡ ¤ ° ° ¨ ¦´µ ¹ ³ ° ¶X¡ § ¤ ·4¥ ±²c³4¸,ª ,¡ ¢ £¤ ¥¦§ ¨4© ª«¬¨ §© §f«¬8¨ X¡ ® ¯¨X¥¨ ° §¨ ¡ § ¤ ±²c³]° ¨ ¦´µ ¹ ¼ ° ¶X¡ §¤ 4·¥±²c³X»M¡ º ,¡ ¢£ ¤ ¥¦§¨X¢¡ ºª¤ §¨ §° «¬8¨ X¡ ® ¯¨X¥¨ ° §¨ ¡ § ¤ ±²c³]° ¨ ¦´µ ¹ Ä ° ¶X¡ § ¤ X£&Á¥&¸,ª ,¡ ¢ £¤ ¥¦§ ¨4© ª«¬¨ §© §f«¬8¨ X¡ ® ¯¨X¥¨ ° §¨ ¡ § ¤ £&Á «¬¨ &¡ µ ¹ à ° ¶X¡ §¤ &£&Á¥ »M¡ º ,¡ ¢ £¤ ¥¦§ ¨&¢ ¡ ºª ¤ § ¨ §°«¬¨ &¡ ® ¯ ¨&¥¨ ° §¨ ¡ §¤£XÁ «¬8¨ X¡ µ ¹ À ° ¶X¡ § ¤ X»+«²c³4¸,ª ,¡ ¢£ ¤ ¥¦§¨©ª«¬8¨ §©§f« ¬8¨ &¡ ® ¯ ¨X«§ ©½X¢ ¡ ¤ ° º¬° © ¡ ©¾4µ ¹ ¿ ° ¶&¡ §¤ &»4«²c³X»M¡ º ,¡ ¢ £¤ ¥¦§ ¨&¢ ¡ ºª ¤ § ¨ §°«¬¨ &¡ ® ¯¨«§ ©½X¢ ¡ ¤ ° º¬° © ¡ ©¾4µ ¹ ¹ ° ¶X¡ § ¤ ·«²c³4¸,ª ,¡ ¢£¤ ¥¦§ ¨4© ª«¬¨ §© §f«¬8¨ X¡ ® ¯¨«§© ½&¢° ¡ ¤ ° ° ¨ ¦´µ ¹ Ê ° ¶&¡ §¤ 4·&«²c³X»M¡ º ,¡ ¢£ ¤ ¥¦§¨X¢¡ ºª¤ §¨ §° «¬8¨ X¡ ® ¯¨«§© ½&¢° ¡ ¤ ° ° ¨ ¦´µ Ê Í ° ¶X¡ § ¤ ·«±²c³4¸,ª ,¡ ¢£¤ ¥¦§ ¨4© ª«¬¨ §© §f«¬8¨ X¡ ® ¯¨«§© ½&¢° ±²c³]° ¨ ¦´µ ÊÅ ° ¶&¡ §¤ 4·&«±²c³X»M¡ º ,¡ ¢£ ¤ ¥¦§¨X¢¡ ºª¤ §¨ §° «¬8¨ X¡ ® ¯¨«§© ½&¢° ±²c³]° ¨ ¦´µ Ê ³ ° ¶X¡ § ¤ X£&ÁZ« ¸,ª ,¡ ¢£ ¤ ¥¦§¨©ª«¬8¨ §©§f« ¬8¨ &¡ ® ¯ ¨X«§ ©½X¢ £&Á «¬¨ &¡ µ Ê ¼ ° ¶X¡ §¤ &£&ÁZ«»M¡ º ,¡ ¢£ ¤ ¥¦ §¨X¢¡ ºª¤ §¨ §° «¬8¨ X¡ ® ¯¨«§© ½&¢£XÁ «¬8¨ X¡ µ Ê Ä ° ¶&¡ §¤ 4¶X¡ ²c³¸,ª ,¡ ¢£¤ ¥¦§ ¨&¢¦¢° §ºf§° ¢® ¯ ¨ ¢¤ ¥¾]° ¡ ¤ ¨ §¢ £¡ ¨ ¥° ¯¨ ¡ ©¢° ¡ ¤ ¤ ¡ ©¾ §©&Ë ¶&¡ ²c³4µ Ê Ã ° ¶X¡ § ¤ Ì° ¸,ª ,¡ ¢£¤ ¥¦§ ¨&¢¦¢° §ºf§° ¢® ¯ ¨ ¢¤ ¥¾]° ¡ ¤ ¨ §¢£ ¡ ¨ ¥° ¯ ¨ ¡ ©¢° ¡ ¤ ¤ ¡ ©¾§ ©&ËÌZ° µ Ê À ° ¶X¡ § ¤ ¶&¨ §´6«§©¢&¸,ª ,¡ ¢£¤ ¥¦§ ¨&¢¦¢° §ºf§° ¢® ¯ ¨ ¢¤ ¥¾]° ¡ ¤ ¨ §¢ £¡ ¨ ¥° ¯ ¨ ¡ ©¢° ¡ ¤ ¤ ¡ ©¾§ ©&Ë® ¨ § ´*«§©¢&µ Ê ¿ ° ¶&¡ §¤ 4É¥¢§§ÐЧ¢ ,¡ ¢ £¤ ¥¦§ ¨4£¥¨ ¥º§° § ¨ «¬8¨ X¡ §©f® ¯ ¨ZÉÎ Ê ¹ ° ¶&¡ §¤ 4·ÎÎM· ,¡ ¢£¤ ¥¦§ ¨&® ¥¢°« ¬8¨ &¡ ® ¯ ¨Z·ÎÎM· Ê Ê ° ¶X¡ §¤ 4È Î ,¡ ¥ £¤ ¥¦§ ¨&® ¥¢°«¬¨ &¡ ® ¯¨+È Ï Î ÑÒÓ Ó ÔÕ Ö××Ø Ù àMáÞÕ ÚØÛÜÙ Ý ÞØ ß ÛØ â ã ÜÕáè ìÜÝ î ç Ú+Ù ÖéØ Ù âð ÜÕáè ìÝ ×Ö ß Ø Ù â ë ÜÕáè ÑcåæXÜ ØÕæ ñ íÕØÙß åéXÝ ÕfÞÝ Õæ&ÖØçåé]ç ØÙ ×Ý ÕØÙ Ø Ù Üß Ý Õ Ý Ü*ØÙ ÞÝ ÕæXÖØç ê ìÝ ×Öß ØÙ ØÙèáç Ý ØÕç Þ áÙ Ý á íß ØÖæî Ù á Üß Ý Õ Ý Ü*ØÙ ØÕæïÝ Õæ ç áÛç ØæØ Ù ØÛ èÝ Ù áç åÙ Ý ÕæÛç Ý ß ß Ý ÕéØ Ù ê ÑcåæXÜ ØÕæØ Ù&æ ØÝ Õæ ç áÛç ØæØ Ù ØÛ èÝ Ù áç åÙ Ý ÕæÛç Ý ß ß Ý ÕéØ Ù ê â ä ÜÕáèXù&ø áØ ß è óáß æØÙ÷*ø áØ ß èfÞÝ Õæ&ÖØç ê â ö ÜÕá èõ,î Ûß Öç ò+ØÙ ×Ý ÕØÙ Ø ÙZÔ,Ù êó+Õåôê Knapper: 150 GUI-elementer samt underliggende funktioner ¾ C.3 UdviklerVindue C.3.1 GUI-elementer I det efterfølgende beskrives GUI elementerne inputfelter, outputfelter og knapper for udviklervinduet. Inputfelter: ú]ûýü ü þ ÿ ÿ ÿ ÿ $ & ! ÿ ÿ $( ÿ $ ÿ ' $&% ÿ ÿ ÿ ÿ ÿ ! # " 2 $0 #1 - . ÿ ( ÿ ÿ #)#* ,+ ÿ $+ - . / ÿ " 354766 8:9;<<=> SDI9 O =AR> ? I=C A= PQ K ? =C F(O D> LM > D;<= 8@? ABC DE=>&F=9G=> =H#9=F=C D<GFDIJ*> F&? K L>(GD> LM > D;<=&N P\ K ? =C F#[7UEH=9=> ? 9H 8@? ABC DE=>&F=9G=> =H#9=F=C D<GFDIJ*> F&? K L>&FZ> C ? HLUEH=9=> ? 9H(N PX K ? =C FY@V? FLA=Y7C RDC LA= 8@? ABC DE=>&F=9G=> =H#9=F=C D<GFDIJ*> F&? K L>&DV? FLA=LH5DC R$DC LA=#N PW K ? =C F 6 C M M LU? V? M =M 8@? ABC DE=>&F=9G=> =H#9=F=C D<GFDIJ*> F&? K L> ? C M M LU? V? M =M N PT K ? =C F#b(M ? C C ? 9HAG=M =H&9=C A= ]@? A=>#AM ? C C ? 9H ^K L>#F=9_IDC HM =RC ? 9? R=> N P` K ? =C F(aL> 9DI9 ]@? A=>(9DI9#^K L>#F=9_IDC HM =RC ? 9? R=> N cd K ? =C F(f K M => 9DI9 ]@? A=>#=K M => 9DI9&^K L>&F=9_IDC HM =RC ? 9? R=> N c P K ? =C FYe9V? =99? M =M ]@? A=>#D9V? =99? M =M ^K L>&F=9_IDC HM =RC ? 9? R=> N cc K ? =C FY@K F=C ? 9H ]@? A=>#DK F=C ? 9H ^K L>#F=9_IDC HM =RC ? 9? R=> N cg H&> DK a#> D<= a&> D<=hIL>&DK I? H=C A=> <=C C =<iRC ? 9? R$=>#LH AEAM =<jK L> AC DHM ? C> =AB? > DM L> ? 9FAM ? C C ? 9H=> H#> DK => 9=BC LM M =A&N cQ K ? =C F(kl> LV=A ],? A;DC ? A=> => hIL> C D9HM G=> =H&9? 9H=9DK C D<5GFD_=> N Outputfelter: 151 m GUI-elementer samt underliggende funktioner Knapper: noepp qsrtuuvw ~|r x vyzw { |v} yv zr vrn/vu_ u rvw&vu_ v} u |!w &{ vw# w#vr_|} z} { r{ zvw#v} } vw( { vr &w tv zr&x vw v&r&u x vw v#rvw(} u |!w &{ vw# w#vr_|} z} { r{ zvw#v} } vw( { vr &w tv zrn/vuu n/vu5uvw } u |*w #{ vw&v vw#|} { } vy { r { r zr#& v} } vw $ v} _|{ r &tv zr@ y} t lvw u{ rvw vwq@w lr zrnw #{ lr vw(z$} vw##w #|{ r #tv w vuj w &{ / zrnw #w v¢ r vw z} vw&#w |{ r &tv w vuj w& zrn_w ¡ lr vw z} vw&#w |{ r &tv w vuj w&¡ C.4 HjælpVindue C.4.1 GUI-elementer I det efterfølgende beskrives GUI elementerne inputfelter, outputfelter og knapper for hjælpvinduet. Inputfelter: Ingen Outputfelter: £¤e¥¥ ¦s§¨©©ª« ²³°§ ¬ ª®« ¯ °ª± ª ´µ º ªÃº « ³©ª#Ä&Å ³ª± Æ ¶ « ³©_ª·ª« ¯ §·ª¸¹± ·ª«º ª®º »·ª« ¼ª®«¶ ¯ °ª«(¸¸°½®± ¯ §¯ ®ª« ª§¹¾¨·°¯ ®± ª« ª§ ¼« ¨¾³¿l¦@«À½Ál§¹Â½ ÇÈeÉÉ ÊsËÌÍÍÎÏ Ö×ÔË Ð ÎÑÒÏ Ó ÔÎÕ ÑÎ ÒË×Þ Ì Ò Ú Ì ÒÒ$ÎÏ Û$Ü Ý!Õ ÞÔÓ Ëß#ÌÎà#áâ5ÔÎËßÎÏà Ó Õ ã×âÎ_à Ó Õ Ú ßÎÏ#áÞÏ Ó ËßÎÕ Ó âÎ_ÔÓ Ëß&ÌÎ&äÛÔáÏ(ÛåÜ Ý*Õ ÞãÕ ÎÔ Ò$×Õ ßàæ Ï × Knapper: Ø(Ù 152 m GUI-elementer samt underliggende funktioner C.5 Liste over funktioner Ved at se på hvilke sekvenser af begivenheder, der optræder, når en given knap på GUI´en aktiveres, er det muligt at finde alle funktionerne. Disse er beskrevet i det efterfølgende. Der inddeles i to forskellige levels: Level 1: De funktioner der håndterer brugergrænsefladen og dermed hører til boundary. Level 2: Andre funktioner hørende til control. C.5.1 Loginvindue: level 1 funktioner I det efterfølgende opstilles de funktioner, der kan identificeres ud fra aktivitetsdiagrammerne. Læs fra GUI: ç&èéê$ë ì íéîï ðséèññòó ÷øõé ô(òîêó ì õòö îò ù òéë ôó èòó òéë òóó èòó ë ýòü ó øì éýèë ü òö ëþ(ù òéë çíó éøõé ÿ òéë ü ë òó éøõé û òéë òó#òü ë òó éøõéü ó øì éýèë ü òö ëþ#ÿ ú òéë eé ì òééì ë òë û òéë òó#øéì òééì ë òë#ü ó øì éýèë ü òö ëþ#ú òéë @ü òö ì é òéë lë ì ö ö ì éîòë ò #éòö îò òéë lö ì éì êòó û û òéë òó#ü íó éøõéü ó øì éýèë ü òö ëþ òéë òó#øü òö ì é ü ó øì éýèë ü òö ëþ òéë òû ó#îë ì ö ö ì é îòë ò #éòö îòü ó øì éýèë ü òö ëþ òéë òó(êö ì éì êòó õì îòóøóõ!ó òëòë ë ì &ö ì òó òö í #ì éü ó øì éýèë ü òö ëþ û û GUI knapper: !#" $%&'&() .0/,+ *(!+) ,(- ! ( 1 / <+ =3/41 23,+ !'+/4>51'/@ ,() (!;+!+ /) () / ! !(,( ! ? / <+ =3/4? 23,+ !'+/4>5?'/@ ,() (!;+!+ /) () / ! !(,( ! 7+9 / <+ =8 /47+9 23, !' /46587+9:/ ,() ( !;+! /) () / ! !(,( ! 153 m GUI-elementer samt underliggende funktioner C.5.2 Loginvindue: level 2 funktioner Funktionerne hørende til control er her opstillet. C.5.3 ABCD@E F GCH#I JKCBL'LMN SUT+QC OPM HDN F QMR HM VV T i HR B+E fG e F C`jF C ]B M W8E TN E M H'X+QF H'D+C TY>Zh:TDE F QdMN M H\ Vg e G ]DdMC]fG e F C W8E TN E M H'X+QF H'D+C TY>Zc:TDE F QdMN M H\ Vb DTR ]^_ T MR Y `aF C ]BM WE TN E MH'XQF H'D+CTY>ZV+['TDE F QMN M H\ Vn HE TN E m3R F CF DMN `aF C]BM W8E TN E MNPD+R F CF DMN QF C ]BME \ Vl H+E TN E k0] QF DR MN `aF C ]B M WE TN E MNB]QF D+R MN QF C ]B M+E \ Vu DdGCE N GR R MN rYR oHCF C e MN mGCE N GR R MN MNGLtD+R F CF DdMN MC'XTNB]i oR ]ETR R M GYR oHCF C e MN \ Vs XMC+E rYR odHCC e MN ^0MC+E MNGYR oHCF C e MNi N THDdpqN LMCG e e ML'L>MN]ML#\ Vh DGCE N GR R MN w8o+Y MO8N B e M N mGCE N GR R MN MNPXQF R DMC'vN B e MN E oYM]MNMN QTR e E \ Klinikervindue: level 1 funktioner Læs fra GUI: xyz{@| } ~z# Kzy' U+z P { } z| x} 6 0z+| 3x} 6: '} zy| | P z+| x {@z 0z| {dz > '} zy| | z+| 00} 0z| | } d~ yz> '} zy| | z+| P+| } z+| y 0z| P +| } z+| y '} zy| | z| P| } z| ay' 0z+| | } z| zy' '} zy+| | 154 m GUI-elementer samt underliggende funktioner Skriv til GUI: ¡¢£¤ ¥ ¦¢ §#¨ ©%¢¡ª'ª«¬ °0±®+¢ «§£+¬ ¥ ®«¯ § « ²³ §£¬ ¥ ®µ0À¡¢¤ µ0£+¬ ¥ ®«¬®¶·¬ ¸¥d¹ ¦¬§À¡¢¤¤ ¥ ¯d¦¡¤ »¡+¤ ¹ «¯ ¤¼²¿ ²¿ §£¬ ¥ ® ¾a½ µ0£+¬ ¥ ®d«¬®¶·¬ ¸¥¹ ¦¬3 ¾a½:¤ ¥ ¯d¦¡¤ »¡+¤ ¹ «¯ ¤¼²½ ²½ §£¬ ¥ ®º0¸ µU£¬ ¥ ®«¬®d¶·¬ ¸¥d¹ ¦¬º0¸:¤ ¥ ¯¦¡¤ »¡¤ ¹ «¯ ¤¼²´ ²´ §£+¬ ¥ ®Å µ0£+¬ ¥ ®«¬®¶·¬ ¸¥d¹ ¦¬PÅƤ ¥ ¯d¦¡¤ »¡+¤ ¹ «¯ ¤¼²Ä ²Ä §£+¬ ¥ ®Ãa¦ª'»¯ ¥ ±¢Á « µ0£+¬ ¥ ®«¬®¶·¬ ¸¥d¹ ¦¬Á ¦ª:»¯ ¥ ±¢ Á «>¤ ¥ ¯d¦¡+¤ »¡¤ ¹ «¯ ¤ ¼²Â ²Â §£¬ ¥ ®Ç0«§¥ §¤ ±¢ Á« µ0£+¬ ¥ ®d«¬®¶·¬ ¸¥¹ ¦¬¬ «§¥ §+¤ ±¢ Á«>¤ ¥ ¯d¦¡¤ »¡+¤ ¹ «¯ ¤ ¼²² ²² §£¬ ¥ ®ºaÎ6½ µU£¬ ¥ ®«¬®d¶·¬ ¸¥d¹ ¦¬ºaÎ6½:¤ ¥ ¯¦¡¤ »¡¤ ¹ «¯ ¤¼²Ï ²Ï §£¬ ¥ ®ºaÃÊÎ6½ µU£¬ ¥ ®«¬®¶q¬ ¸¥d¹ ¦¬PÃÊÎ6½:¤ ¥ ¯¦¡+¤ »¡¤ ¹ «¯ ¤¼²Í ²Í §£+¬ ¥ ®©ÊÉ8Ë µ0£+¬ ¥ ®«¬®¶q¬ ¸¥d¹ ¦¬8©ÊÉ8Ë̤ ¥ ¯d¦¡+¤ »¡¤ ¹ «¯ ¤¼²È ²È §£¬ ¥ ®ÐaÑ µU£¬ ¥ ®«¬®¶q¬ ¸¥d¹ ¦¬3ÐaÑ>¤ ¥ ¯¦¡+¤ »¡¤ ¹ «¯ ¤¼Ï³ ϳ §£¬ ¥ ®Ãa¦ÐaÑ µ0£+¬ ¥ ®«¬®¶·¬ ¸¥d¹ ¦¬ Ãa¦ÐaÑ>¤ ¥ ¯d¦¡+¤ »¡¤ ¹ «¯ ¤¼Ï¿ Ï¿ §£+¬ ¥ ®Ò«¤ ÐaÑ µ0£+¬ ¥ ®«¬®¶q¬ ¸¥d¹ ¦¬PÒ«¤ ÐaÑ>¤ ¥ ¯¦¡+¤ »¡¤ ¹ «¯ ¤¼Ï½ Ͻ §£¬ ¥ ®Ô8«ª:» µ0£+¬ ¥ ®d«¬®¶·¬ ¸¥¹ ¦¬Ô8«ª:»>¤ ¥ ¯d¦¡¤ »¡+¤ ¹ «¯ ¤¼Ï´ Ï´ §£+¬ ¥ ® «ÃÊÎ6½°a¡ µU£¬ ¥ ®«¬®¶q¬ ¸¥d¹ ¦¬3 «ÃÊÎ6½PÓ ¢¡+®¶·¬ «¢ ¸«Ó¤ ¥ ¯ ¦¡¤ »¡+¤ ¹ «¯ ¤¼ÏÄ ÏÄ §£¬ ¥ ® «ÃÊÎ6½µU¥ ª µ0£+¬ ¥ ®d«¬®¶·¬ ¸¥¹ ¦¬3 «ÃÊÎ6½PÓ+§¥ ª'¡¯ «¬ «¤ Ó¤ ¥ ¯ ¦¡¤ »¡+¤ ¹ «¯ ¤¼Ï Ï §£+¬ ¥ ® «Î6½°a¡ µU£¬ ¥ ®«¬®¶q¬ ¸¥d¹ ¦¬8 «Î6½PÓ ¢¡+®¶·¬ «¢ ¸«Ó¤ ¥ ¯ ¦¡¤ »¡+¤ ¹ «¯ ¤¼Ï² ϲ §£¬ ¥ ® «Î6½µU¥ ª µ0£+¬ ¥ ®d«¬®¶·¬ ¸¥¹ ¦¬3 «Î6½PÓ+§¥ ª'¡¯ «¬ «¤ Ó¤ ¥ ¯ ¦¡¤ »¡+¤ ¹ «¯ ¤¼ÏÏ 155 m GUI-elementer samt underliggende funktioner ùäãÖ@å Ø Þã ë#ú û ãäí'íÚ× ìUß+Ùã üPÚ ë Ö × Ø ÙÚæ ë Ú éé ë Ö+× Ø ÙÕ8ßà6áPìaä Õ0Ö+× Ø ÙdÚ×ÙÛ·× ÜØÝ Þ×Õ8ßà6áâ ãäÙdÛ·× Úã ÜÚâdå Ø æ Þäå çäå Ý Úæ åèéê éê ë Ö+× Ø Ù+Õ3ßà6áÕ0Ø í Õ0Ö+× Ø ÙÚ×ÙÛ·× ÜØdÝ Þ×PÕ8ßà6áâ ë Ø í'äæ Ú× Úå âdå Ø æ Þäå çäå Ý Úæ åèéî éî ë Ö+× Ø ÙïPßà6áPìaä Õ0Ö+× Ø ÙdÚ×ÙÛ·× ÜØÝ Þ×3ïPßà6áâ ãäÙdÛ·× Úã ÜÚâdå Ø æ Þäå çäå Ý Úæ åèêø êø ë Ö+× Ø Ù ïßà6áÕ0Ø í Õ0Ö+× Ø ÙÚ×ÙÛ·× ÜØdÝ Þ×8ïPßà6áâ ë Ø í'äæ Ú× Úå âdå Ø æ Þäå çäå Ý Úæ åèêPò êPò ë Ö× Ø ÙïPßðÊà6áPìaä Õ0Ö+× Ø ÙdÚ×ÙÛ·× ÜØÝ Þ×3ïPßðñàñáâ ãäÙÛq× Úã ÜÚâdå Ø æ Þäå çäå Ý Úæ åèêá êá ë Ö+× Ø Ù ïßðÊà6áÕ0Ø í Õ0Ö+× Ø ÙÚ×ÙÛ·× ÜØdÝ Þ×8ïPßðÊà6áâ ë Ø í'äæ Ú× Úå âdå Ø æ Þäå çäå Ý Úæ åèêó êó ë Ö+× Ø ÙçöUßìaä Õ0Ö+× Ø ÙdÚ×ÙÛ·× ÜØÝ Þ×çö0ßâ ãäÙdÛ·× ÚãÜÚâdå Ø æ Þäå çäå Ý Úæ åèê÷ ê÷ ë Ö+× Ø Ù+çö0ßÕ0Ø í Õ0Ö+× Ø ÙÚ×ÙÛ·× ÜØdÝ Þ×Pçö0ßâ ë Ø í'äæ Ú× Ú+å âdå Ø æ Þäå çäå Ý Úæ åèêõ êõ ë Ö× Ø ÙÕÙà6áPìaä Õ0Ö+× Ø ÙdÚ×ÙÛ·× ÜØÝ Þ×ÕÙà6áPâ ãäÙÛq× Úã ÜÚâdå Ø æ Þäå çäå Ý Úæ åèêô êô ë Ö+× Ø Ù+Õ8Ù+à6áÕ0Ø í Õ0Ö+× Ø ÙÚ×ÙÛ·× ÜØdÝ Þ×PÕÙà6áâ ë Ø í'äæ Ú× Úå âdå Ø æ Þäå çäå Ý Úæ åèêé êé ë Ö× Ø ÙïÙà6áPìaä Õ0Ö+× Ø ÙdÚ×ÙÛ·× ÜØÝ Þ×3ïÙà6áPâ ãäÙÛq× Úã ÜÚâdå Ø æ Þäå çäå Ý Úæ åèêê êê ë Ö+× Ø Ù ïPÙ+à6áÕ0Ø í Õ0Ö+× Ø ÙÚ×ÙÛ·× ÜØdÝ Þ×8ïÙà6áâ ë Ø í'äæ Ú× Úå âdå Ø æ Þäå çäå Ý Úæ åèêî êî ë Ö× Ø ÙïÙðÊà6áPìaä Õ0Ö+× Ø ÙÚ×ÙÛ·× ÜØÝ Þ×3ïÙðÊà6áPâ ãäÙÛq× Úã ÜÚâdå Ø æ Þäå çäå Ý Úæ åèîø îø ë Ö+× Ø Ù ïPÙ+ðÊà6áÕ0Ø í Õ0Ö+× Ø ÙÚ×ÙÛq× ÜØdÝ Þ×8ïÙðÊà6áâ ë Ø í'äæ Ú× Úå âå Ø æ Þäå çäå Ý Úæ åèîPò îPò ë Ö× Ø Ùçö3Ùìaä Õ0Ö+× Ø ÙdÚ×ÙÛ·× ÜØÝ Þ×çö3Ùâ ãäÙÛq× Úã ÜÚâdå Ø æ Þäå çäå Ý Úæ åèîá îá ë Ö+× Ø Ù+çö3ÙÕ0Ø í Õ0Ö+× Ø ÙÚ×ÙÛ·× ÜØdÝ Þ×Pçö3Ùâ ë Ø í'äæ Ú× Úå âdå Ø æ Þäå çäå Ý Úæ åèîó îó ë Ö+× Ø Ù ùØ à6áìaä Õ0Ö+× Ø ÙÚ× ëýë å ÚíÚåÝ Þ× ë æ ß þ:å Ø æ × Ú ë çØ × ß+å Þ× Ø ãÜ ë å Ø æ æ Ø ãþÚãâùØ à6áâdå Ø ædÞäå çä+å Ý Úæ å èî÷ î÷ ë Ö× Ø Ùÿ3å ìaä Õ0Ö+× Ø ÙÚ× ë ýë å ÚíÚåÝ Þ× ë æ ß þ:å Ø æ × Ú ë ç Ø × ßå Þ× Ø ã Ü ë å Ø æ æ Ø ãþÚãâ+ÿ3å âå Ø æÞä+å çäå Ý Úæ å èîõ îõ ë Ö+× Ø Ùù× ÚÖÙÚã ë ìjä Õ0Ö+× Ø ÙÚ× ëýë å ÚíÚåÝ Þ× ë æ ß þ:å Ø æ × Ú ë çØ × ßå Þ× Ø ã Ü ë å Ø æ æ Ø ãþÚãâ+Ý × ÚÖ@ÙÚã ë âå Ø æ Þäå çäå Ý Úæ åèîô 156 m GUI-elementer samt underliggende funktioner GUI knapper: , *-.$3 "# $&%3 ( *) + 2 , *-.$0 "# $&%01 ( *) + / , *-.$' "# $&%' ( *) + ! , *-.$6 "# $&%6 ( *) + 5 , *-.$4 "# $&%4 ( *) + 23 , *-.$ "# $&% ( *) + 157 m GUI-elementer samt underliggende funktioner C.5.4 Klinikervindue: level 2 funktioner Funktionerne hørende til control er her opstillet. 7*89:<; = >9?@ AB98CCDE JLKH9 FGD?:E = HDI ?D MN ?:= _ ; F.E 8 V DE P; KE ; D?QH= ?:9KR&SN^K:; = HDE D?U M] ?= C8I DE ZGK; = D9; [LKE = K\I D P; KE ; D?QH= ?:9KR&SNY1K:; = HDE D?U MX V >W:(D9WG@ 9W?; = I I = 9 V DE P; KE ; D?QH= ?:9KR&SNTK:; = HDE D?U MO :KI Wde KDI R[f= 9W8D P; KE ; D?QH= ?:9KR&SNcK:; = HDE D?U MM K_ ?I 8; a.I = 9= :(DE [b= 9W*8D P; KE ; D?QH= ?:9KR&SN`K:; = HDE D?U Y^^ QD9; ZK; = D9; @ 9= ; = KI P.; K; D P; KE ; D?QH= ?:9KR&SNNK:; = HDE D?U Y^Y :>9; E >I I DE m.lRDF.E 8 V DE ib9WDE ?j V DEGQH= I :(D9k\E 8 V DE ; lRDWDE*DE HKI V ; U Y^T QD9; ZGK; = D9; hE 8RRD dD9; DEGI = ?; DCDWRK; = D9; V E 8RRDEgU Y^c :(>9; E >I I DE ALK; Kh1DC&; P; KE ; D?QH= ?:9KR&SN^K:; = HDE D?U Y^` V DCAK; K P; KE ; D?QH= ?:9KR&SN^K:; = HDE D?U Y^N K_ ?I 8; P.D??= >9 P; KE ; D?QH= ?:9KR&SN^K:; = HDE D?U Y^] ?; KE ; J#lP.D??= >9 aGKI WDEGI > V = 9H= 9W8D;G9nE*WDE*?:KI(?:= _ ; D? \E 8 V DE U Y^X QD9; a.I = 9= :(DE @ 9W?; = I I = 9 V P; KE ; D?QH= ?:9KR&SNY1K:; = HDE D?U Y^O :(>9; E >I I DE @ 9W?; = I I = 9 V P; KE ; D?QH= ?:9KR&SNY1K:; = HDE D?U Y^M = 9W*I KD?ZGK; = D9; ZGKE KCD; E D P; KE ; D?QH= ?:9KR&SNY1K:; = HDE D?U YY^ 8W*E D V 9[LKE = K\I D P; KE ; D?QH= ?:9KR&SNY1K:; = HDE D?U YYY :(>9; E >I I DE @ 9W?; = I I = 9 V P; KE ; D?QH= ?:9KR&SNTK:; = HDE D?U YYT V DC@ 9W?; = I I = 9 V P; KE ; D?QH= ?:9KR&SNTK:; = HDE D?U 158 m GUI-elementer samt underliggende funktioner C.5.5 Udviklervindue: level 1 funktioner Læs fra GUI: opqrs t uqvw xqpyyz{ }q |zvr{ t }z~ vz zqs .~ t qt r(z{ zqs z{*}~ kr~ t qt r(z{ { t qps z~ s. zqs Gs t zqs *{ pz zqs z{s t zqs { pz&}~ { t qps z~ s G (G ¡¢£ ¡ & ¦ £ §¨¬ ³ ±²¯°® ® (G k¡¢&£ ¢ ®¯(°® ® ¦ £ §¨ ¬ ªf¤ ¢ª« ( (G k¡¢£ ¤ ¢¥ ( & ¦ £ §¨© ¯ ¤ G ¡¢£ G ¯ ¤ ( ¦ £ §¨µ © . ®¡ ® L ®¡ ® & ¦ £ §¨´ µ L £ & ( ¦ £ §¨· ´ ¸G£ *£ & ( ¦ £ §¶ · ª«¤ L ¤ ¦ £ §*G¨ ³¶ ªf£ ¢ ® ªf£ ¢ ®k ( ¦ £ §* ³¨ ¹ £g L ®* £*¢ & ¦ £ §*³ º»¼½¾ ¿ À¼Á ü»ÄÄÅÆ ÊËȼ ÇÅÁ½Æ ¿ ÈÅÉ ÁÅ ÌÍ ËÕ¾ ¿ À¼*Ö.¼ËÐÍÎ Ï#È¿ Á½¼ËÐ&ÑÍÎ˽¾ ¿ È(ÅÆ ÅÁ*ÓÁ¾ ËÆ ¾ ÅÁ ˽¾ ¿ À¼ÁÁŽÈżÁÔ ÌÌ ËÕ¾ ¿ À¼*Ö.¼ËÐÍØ Ï#È¿ Á½¼ËÐ&ÑÍØ˽¾ ¿ È(ÅÆ ÅÁ*ÓÁ¾ ËÆ ¾ ÅÁ ˽¾ ¿ À¼ÁÁŽÈżÁÔ Ì× ËÕ¾ ¿ À¼*Ö.¼ËÐÍÒ Ï#È¿ Á½¼ËÐ&ÑÍÒ˽¾ ¿ È(ÅÆ ÅÁ*ÓÁ¾ ËÆ ¾ ÅÁ ˽¾ ¿ À¼ÁÁŽÈżÁÔ ÌÎ ËÕ¾ ¿ À¼*Ö.¼ËÐÍÚ Ï#È¿ Á½¼ËÐ&ÑÍÚ˽¾ ¿ È(ÅÆ ÅÁ*ÓÁ¾ ËÆ ¾ ÅÁ ˽¾ ¿ À¼ÁÁŽÈżÁÔ ÌØ ËÕ¾ ¿ À¼*Ö.¼ËÐÍÙ Ï#È¿ Á½¼ËÐ&ÑÍÙ˽¾ ¿ È(ÅÆ ÅÁ*ÓÁ¾ ËÆ ¾ ÅÁ ˽¾ ¿ À¼ÁÁŽÈżÁÔ Skriv til GUI: GUI knapper: 159 m GUI-elementer samt underliggende funktioner C.5.6 Udviklervindue: level 2 funktioner Funktionerne hørende til control er her opstillet. Û*ÜÝÞ<ß à áÝâã äBÝÜååæç ëLìéÝ èGæâÞç à éæê âæ íî ñæÝß ü1æå1ß ÷ìåøùì ðß ìç ß æâñéà âÞÝìò&óîïìÞß à éæç æâõ íí øæç æ ö Ý*÷ìåkøùì ðß ìç ß æâñéà âÞÝìò&óîûìÞß à éæç æâõ íú ö æåèGæç æ ö Ýæß ÷ìåøùì ðß ìç ß æâñéà âÞÝìò&óîôìÞß à éæç æâõ íï Þìê ù ìæê òfà ÝùÜæ ðß ìç ß æâñéà âÞÝìò&óîìÞß à éæç æâõ íû ìþ âê Üß ÿùéà Þê æç fà ÝùÜæ ðß ìç ß æâñéà âÞÝìò&óîýìÞß à éæç æâõ íô à Ýù*ê ìæâ.ê à Ýà Þ(æç ã Ýù*ê ìæâæçÞê à Ýà Þ(æçGç æâòà ç ìß áç à Ýùâß à ê ê à Ý ö æç í Þ(áÝß ç áê ê æç .ê à Ýà Þ(æç ÿfÝùæç â ö æçáå Þê à Ýà Þ(æçñìç ö æå1ß*ùìß ì*õ íý ììøæÝ*Ûà ê ðß ìç ß æâñéà âÞÝìò&óîïìÞß à éæç æâõ ú Þ(áÝß ç áê ê æç Û*à ê ÝìéÝ ðß ìç ß æâñéà âÞÝìò&óîïìÞß à éæç æâõ ú Þ(áÝß ç áê ê æç Û*à ê Ûáç åìß ðß ìç ß æâñéà âÞÝìò&óîïìÞß à éæç æâõ úî à Ýù*ê ìæâÛ*à ê ðß ìç ß æâñéà âÞÝìò&óîïìÞß à éæç æâõ úí ÞáÝß ç áê ê æç ÷ìåøùì ðß ìç ß æâñéà âÞÝìò&óîôìÞß à éæç æâõ úú ììøæÝü1æåÛ*à ê ðß ìç ß æâñéà âÞÝìò&óîôìÞß à éæç æâõ úï ìþ øç (ùèGæç æ ö Ýà Ý ö 160 fþ øç ùæçà ö ìÝ ö é ç æÝùæøæç æ ö Ýà Ý ö ìþ ê ìåøùìõ m GUI-elementer samt underliggende funktioner C.5.7 Hjælpvindue: level 1 funktioner Skriv til GUI: "!# )+*%'& $!%&# '!( ! ,- &# '90 *%!( 3:;!5& .+&# '!#/0 12( 34 !5% !4 (5% 3& 6 !( 78- <=>?@ A B>CD E>=F F"GH L+M%J&> IG%C?&H A JGK CG MX&@ A B>VY;>MQSO J&A C ?&>%MQ4RSOTM?@ A J5GH GCVU&C%@ MH @ GC P M?@ A B>%CCG?JG>%CW Z[\]^ _ `\ab c\[d d"ef j+k%h&\ ge%a]&f _ hei ae lm k%u ai [&^ vw kei p%xy_ \zV[e n;^ kf ^ efo%h&_ a ]\kp4qrsTk]^ _ h5ef eaVt GUI knapper: NO C.5.8 Hjælpvindue: level 2 funktioner 161 APPENDIKS D Attributter i GUI-klasser I dette afsnit forefindes attributterne til de forskellige klasser, der er defineret i kapitlet om GUI-klasser i Dr. Know (se kapitel 11 på side 71). Attributterne beskrives således for klasserne LoginVindue, KlinikerVindue, UdviklerVindue og HjaelpVindue. Der beskrives ikke attributter for klassen GrafFunktion. D.1 LoginVindue {|} ~ % 5 % -kliniker:Kliniker Et objekt som indeholder klinikeroplysninger. -database:Database Et objekt som opretter forbindelse til databasen. -vindueTitel:String Titlen på vinduet, som vises i vinduets titellinje. -knapOk:JButton Knap med label ”Ok”. -knapAfslut:JButton Knap med label ”Afslut”. -knapHjaelp:JButton Knap med label ”Hjælp”. -boksBruger:JComboBox Kombinationsboks til valg af bruger. -boksStillingsbetegnelse:JComboBox Kombinationsboks til valg af titel. +labelBrugertype: JLabel Label på GUI med teksten ”Vælg brugertype:´´ -labelFornavn:JLabel Label på GUI med teksten ”Fornavn:”. -labelEfternavn:JLabel Label på GUI med teksten ”Efternavn:”. -labelAnciennitet:JLabel Label på GUI med teksten ”Anciennitet:”. -labelAfdeling:JLabel Label på GUI med teksten ”Afdeling:”. 163 m Attributter i GUI-klasser -labelStillingsbetegnelse:JLabel Label på GUI med teksten ”Stillingsbetegnelse:”. -tFieldFornavn:JTextField Tekstfelt til indtastning af klinikers fornavn. -tFieldEfternavn:JTextField Tekstfelt til indtastning af klinikers efternavn. -tFieldAnciennitet:JTextField Tekstfelt til indtastning af klinikers anciennitet. -tFieldAfdeling:JTextField Tekstfelt til indtastning af klinikers afdeling. -tAreaKlinikerInfo:JTextArea Tekstområde med teksten ”Udfyldes af kliniker”. -loginVindue:LoginVindue En reference til LoginVindue. Denne reference bruges af den indre klasse HaendelseKontrol. D.2 KlinikerVindue ¡ ¤ ¡¥ ¢%£ ¡ § ¤ ¡¥ ¦ £ ¡ ¡ ¨ © ª £ « ¡ erLoggetPaa:Kliniker Et objekt som indeholder alle oplysninger om klinikeren som er logget på. +patientState:PatientState Et objekt som indeholder patientvariable. +simulering:PatientState Et objekt som indeholder de simulerede patientvariable. +initialState:initialState Et objekt som indeholder patientparametrene. +settings:Settings Et objekt som indeholder respiratorindstillinger. prediction:Prediction Et objekt som kaldes når variblene skal simuleres. +patientGruppe:String Et stringobjekt som indeholder navnet på patientgruppen. +FIO2:Double En double som indeholder FiO2 -indstillingen. +Vt:Double En double som indeholder Vt-indstillingen. +Frekvens:Double En double som indeholder frekvens-indstillingen. +caseNummer:Int Et heltal som indeholder casenummeret. +caseNummerFlag:Int[20 ] Et array af 20 heltal. +patientGruppeFlag:Int[3 ] Et array af 3 heltal. -vindueTitel:String Titlen på vinduet, som vises i vinduets titellinje. -knapHjælp:JButton Knap med label ”Hjælp”. -knapAfslut:JButton Knap med label ”Afslut”. -knapGodkend:JButton Knap med label ”Godkend”. -knapSimuler:JButton Knap med label ”Simulér”. -knapSkiftBruger:JButton Knap med label ”Skift bruger”. -boksPatientgruppe:JComboBox Kombinationsboks til valg af patientgruppe. -boksPatientNummer:JComboBox Kombinationsboks til valg af patientcase. -labelBruger:JLabel Label på GUI med teksten ”Bruger:”. 164 ¬ Attributter i GUI-klasser -labelPatientParametre:JLabel Label på GUI med teksten ”Patientparametre”. -labelGasudveksling:JLabel Label på GUI med teksten ”Gasudveksling”. -labelShunt:JLabel Label på GUI med teksten ”Shunt [%]:”. -labelFA2:JLabel Label på GUI med teksten ”FA2 [fraktion]:”. -labelVdead:JLabel Label på GUI med teksten ”Vdead [l]:”. -labelCirkulation:JLabel Label på GUI med teksten ”Cirkulation”. -labelCardiac:JLabel Label på GUI med teksten ”Q [l/min]:”. -labelLungedynamik:JLabel Label på GUI med teksten ”Lungedynamik”. -labelCompliance:JLabel Label på GUI med teksten ”Compliance [l/cmH2O]:”. -labelResistance:JLabel Label på GUI med teksten ”Resistance [cmH20/l/s]:”. -labelMetabolisme:JLabel Label på GUI med teksten ”Metabolisme”. -labelVO2:JLabel Label på GUI med teksten ”V02 [l/min]:”. -labelVCO2:JLabel Label på GUI med teksten ”VCO2 [l/min]:”. -labelBlod:JLabel Label på GUI med teksten ”Blod”. -labelDPG:JLabel Label på GUI med teksten ”DPG [%]:”. -labelHb:JLabel Label på GUI med teksten ”Hb [mmol/l]:”. -labelCOHb:JLabel Label på GUI med teksten ”COHb [fraktion]:”. -labelMetHb:JLabel Label på GUI med teksten ”MetHb [fraktion]:”. -labelTemp:JLabel Label på GUI med teksten ”Temp [C]:”. -labelBE:JLabel Label på GUI med teksten ”BE [mmol/l]:”. -labelPatientVariable:JLabel Label på GUI med teksten ”Patientvariable”. -labelLungeVariable:JLabel Label på GUI med teksten ”Lungevariable”. -labelNuvaerende:JLabel Label på GUI med teksten ”Nuværende”. -labelSimuleret:JLabel Label på GUI med teksten ”Simuleret:”. -labelFeCO2:JLabel Label på GUI med teksten ”FeCO2 [%]:”. -labelFeO2:JLabel Label på GUI med teksten ”FeO2 [%]:”. -labelPIP:JLabel Label på GUI med teksten ”PIP [cmH2 O]:”. -labelArterieltBlod:JLabel Label på GUI med teksten ”Arterielt blod”. -labelSaO2:JLabel Label på GUI med teksten ”SaO2 [%]:”. -labelPaO2:JLabel Label på GUI med teksten ”PaO2 [kPa]:”. -labelPaCO2:JLabel Label på GUI med teksten ”PaCO2 [kPa]:”. -labelpHa:JLabel Label på GUI med teksten ”pHa:”. -labelVeneBlod:JLabel Label på GUI med teksten ”Venøst blod”. -labelSvO2:JLabel Label på GUI med teksten ”SvO2 [%]:”. -labelPvO2:JLabel Label på GUI med teksten ”PvO2 [kPa]:”. -labelPvCO2:JLabel Label på GUI med teksten ”PvCO2 [kPa]:”. -labelpHv:JLabel Label på GUI med teksten”pHv:”. 165 ¬ Attributter i GUI-klasser -labelRespiratorindstilling:JLabel Label på GUI med teksten ”Respiratorindstilling”. -labelFiO2:JLabel Label på GUI med teksten ”FiO2 [%]:”. -labelVtidal:JLabel Label på GUI med teksten ”Vt [l]:”. -labelFrekvens:JLabel Label på GUI med teksten ”Frekvens [pr. min]:”. -labelPEEP:JLabel Label på GUI med teksten ”PEEP [cmH2 O]:”. -labelI:E:JLabel Label på GUI med teksten ”I:E []:”. -labelVaelgPatientgruppe:JLabel Label på GUI med teksten ”Vælg patientgruppe:”. -labelVaelgPatientCase:JLabel Label på GUI med teksten ”Vælg patientcase:”. -tFieldBruger:JTextField Tekstfelt til visning af brugerens navn. -tFieldShunt:JTextField Tekstfelt til visning af værdi for shunt. -tFieldFA2:JTextField Tekstfelt til visning af værdi for FA2. -tFieldVdead:JTextField Tekstfelt til visning af værdi for Vd. -tFieldCardiac:JTextField Tekstfelt til visning af værdi for Q. -tFieldCompliance:JTextField Tekstfelt til visning af værdi for compliance. -tFieldResistance:JTextField Tekstfelt til visning af værdi for Resistance. -tFieldVO2:JTextField Tekstfelt til visning af værdi for VO2. -tFieldVCO2:JTextField Tekstfelt til visning af værdi for VCO2. -tFieldDPG:JTextField Tekstfelt til visning af værdi for DPG. -tFieldHb:JTextField Tekstfelt til visning af værdi for Hb. -tFieldCOHb:JTextField Tekstfelt til visning af værdi for COHb. -tFieldMetHb:JTextField Tekstfelt til visning af værdi for MetHb. -tFieldTemp:JTextField Tekstfelt til visning afværdi for temperatur. -tFieldBE:JTextField Tekstfelt til visning afværdi for BaseExcess. -tFieldNuvFeCO2:JTextField Tekstfelt til visning af nuværende værdi for FeCO2. -tFieldSimFeCO2:JTextField Tekstfelt til visning af simuleret værdi for FeCO2. -tFieldNuvFeO2:JTextField Tekstfelt til visning af nuværende værdi for FeO2. -tFieldSimFeO2:JTextField Tekstfelt til visning af simuleret værdi for FeO2. -tFieldNuvPIP:JTextField Tekstfelt til visning af nuværende værdi for PIP. -tFieldSimPIP:JTextField Tekstfelt til visning af simuleret værdi for PIP. -tFieldNuvSaO2:JTextField Tekstfelt til visning af nuværende værdi for SaO2. -tFieldSimSaO2:JTextField Tekstfelt til visning af simuleret værdi for SaO2. -tFieldNuvPaO2:JTextField Tekstfelt til visning af nuværende værdi for PaO2. -tFieldSimPaO2:JTextField Tekstfelt til visning af simuleret værdi for PaO2. -tFieldNuvPaCO2:JTextField Tekstfelt til visning af nuværende værdi for PaCO2. -tFieldSimPaCO2:JTextField Tekstfelt til visning af simuleret værdi for PaCO2. -tFieldNuvpHa:JTextField Tekstfelt til visning af nuværende værdi for pHa. -tFieldSimpHa:JTextField Tekstfelt til visning af simuleret værdi for pHa. 166 ¬ Attributter i GUI-klasser -tFieldNuvSvO2:JTextField Tekstfelt til visning af nuværende værdi for SvO2. -tFieldSimSvO2:JTextField Tekstfelt til visning af simuleret værdi for SvO2. -tFieldNuvPvO2:JTextField Tekstfelt til visning af nuværende værdi for PvO2. -tFieldSimPvO2:JTextField Tekstfelt til visning af simuleret værdi for PvO2. -tFieldNuvPvCO2:JTextField Tekstfelt til visning af nuværende værdi for PvCO2. -tFieldSimPvCO2:JTextField Tekstfelt til visning af simuleret værdi for PvCO2. -tFieldNuvpHv:JTextField Tekstfelt til visning af nuværende værdi for pHv. -tFieldSimpHv:JTextField Tekstfelt til visning af simuleret værdi for pHv. -tFieldNuvFiO2:JTextField Tekstfelt til visning af nuværende værdi for FiO2. -tFieldSimFiO2:JTextField Tekstfelt til indtastning af værdi for FiO2. -tFieldNuvVtidal:JTextField Tekstfelt til visning af nuværende værdi for Vt. -tFieldSimVtidal:JTextField Tekstfelt til indtastning af værdi for Vt. -tFieldNuvFrekvens:JTextField Tekstfelt til visning af nuværende værdi for frekvens. -tFieldSimFrekvens:JTextField Tekstfelt til indtastning af værdi for frekvens. -tFieldNuvPEEP:JTextField Tekstfelt til visning af nuværende værdi for PEEP. -tFieldSimPEEP:JTextField Tekstfelt til visning af værdi for PEEP, der er konstant. -tFieldNuvIE:JTextField Tekstfelt til visning af nuværende værdi for I:E. -tFieldSimIE:JTextField Tekstfelt til visning af værdi for I:E, der er konstant. -klinikerVindue:KlinikerVindue En reference til KlinikerVindue. Denne reference bruges af den indre klasse HaendelseKontrol. D.3 UdviklerVindue ®¯ ° ± ²³ ´ ³ ´¶·¸ µ ³ ´³ » ¸¼ ¹5º ³ ´¶·¸ ¶¾³ » ¸¼ ½ ³ ´¶·º ¸ µ µ ¸ ¿³ À ´Á ¶·º  ¸ µ -vindueTitel:String Titlen på vinduet, som vises i vinduets titellinje. -knapAabnGemtLambda:JButton Knap med label ”Åbn gemt lambda”. -knapBeregnLambda:JButton Knap med label ”Beregn lambda”. -knapGemLambda:JButton Knap med label ”Gem lambda”. -knapHjaelp:JButton Knap med label ”Hjælp”. -knapAfslut:JButton Knap med label ”Afslut”. -knapFio2Graf:JButton Knap med label ”Fio2 Errorgraf”. -knapFreqGraf:JButton Knap med label ”Frekvens Errorgraf”. -knapVtGraf:JButton Knap med label ”Vt Errorgraf”. -boksPatientgruppe:JComboBox Kombinationsboks til valg af patientgruppe. 167 ¬ Attributter i GUI-klasser -boksKliniker:JComboBox Kombinationsboks til valg af kliniker. -ckeckBoksKliniker:JComboBox Kombinationsboks til valg af om lambda skal regnees for en kliniker. -labelVaelgPatientgruppe:JLabel Label på GUI med teksten ”Vælg patientgruppe”. -labelValgKliniker:JLabel Label på GUI med teksten ”Vælg kliniker”. -labelLambda:JLabel Label på GUI med teksten ”Lambda værdier:”. -labelBarotraume:JLabel Label på GUI med teksten ”Barotraume”. -labelOxygenering:JLabel Label på GUI med teksten ”Oxygenering”. -labelAcidoseAlkalose:JLabel Label på GUI med teksten ”Acidose/Alkalose”. -labelIlttoxitet:JLabel Label på GUI med teksten ”Ilttoxitet”. -labelFornavn:JLabel Label på GUI med teksten ”Fornavn” -labelEfternavn:JLabel Label på GUI med teksten ”Efternavn” -labelStillingsbetegnelse:JLabel Label på GUI med teksten ”Stillingsbetegnelse” -labelAnciennitet:JLabel Label på GUI med teksten ”Anciennitet” -labelAfdeling:JLabel Label på GUI med teksten ”Afdeling” -labelProcess:JLabel Label på GUI med teksten ”% af udregning udført:” -fieldBarotraume:JTextField Tekstfelt til værdien af lambda for barotraume. -fieldOxygenering:JTextField Tekstfelt til værdien af lambda for oxygenering. -fieldAcidoseAlkalose:JTextField Tekstfelt til værdien af lambda for acidose/alkalose. -fieldIlttoxitet:JTextField Tekstfelt til værdien af lambda for ilttoxitet. -fieldFornavn:JTextField Tekstfelt til klinikerens fornavn. -fieldEfternavn:JTextField Tekstfelt til klinikerens efternavn. -fieldStillingsbetegnelse:JTextField Tekstfelt til klinikerens stillingsbetegnelse. -fieldAnciennitet:JTextField Tekstfelt til klinikerens anciennitet. -fieldAfdeling:JTextField Tekstfelt til klinikerens afdeling. -fieldProcess:JTextField Tekstfelt til at vise hvor stor del af beregningen er udført. -saveLambda:JFileChooser En filbrowser som bruges når lambdaværdier gemmes. -getLambda:JFileChooser En filbrowser som bruges når tidligere gemte lambdaværdier åbnes. -udviklerVindue:UdviklerVindue En reference til UdvilkerVindue. Denne reference bruges af den indre klasse HaendelseKontrol. D.4 HjaelpVindue ÃÄÅ Æ Ç ÈÉ Ê É ÊÌÍÎ Ë É ÊÉ Ñ ÎÒ ÏÐ É ÊÌÍÎ ÌÔ É Ñ ÎÒ Ó É ÊÌÍÐ Î Ë Ë Î ÕÉ Ö Ê× ÌÍÐ Ø Î Ë -vindueTitel:String Titlen på vinduet, som vises i vinduets titellinje. 168 ¬ Attributter i GUI-klasser -knapLuk:JButton Knap med label ”Luk”. -tAreaInfo:JTextArea Tekstområde til indholdet af vejledningen af brugerne. -hjaelpVindue:HjaelpVindue En reference til HjaelpVindue. Denne reference bruges af den indre klasse HaendelseKontrol. 169 APPENDIKS E Bilag 1: Interview med Per Thorgaard Det primære formål med interviewet er at få viden om, hvordan respiratorer indstilles. Det sekundære formål er at få kommentarer til klinikerens brugergrænseflade i Dr. Know samt best/worst penalties. I referatet er kun de vigtigste emner medtaget fra interviewet. Tilstede: Overlæge og anæstesiolog Dr. Med. Per Thorgaard, Line Michelsen, Brynjar Vatnsdal Palsson og Mogens Nielsen. Referat Hvem er ansvarlig for indstillingen af en respirator? Lægen er ansvarlig for indstillingen af respiratorer og ingen andre. Hvis der er tale om småjusteringer af respiratorens indstillinger, kan det være en narkosesygeplejerske, men aldrig uden anæstesiologens tilladelse. Det er kun er ordination fra lægen, som giver tilladelsen, og det er altid lægens ansvar. Hvilke parametre bruger lægen i indstillingen af en respirator? Per Thorgaard fik her udleveret billedet af et mockup af klinikerens brugergrænseflade i Dr. Know. De arterielle blodværdier er tilgængelige i form af et stykke papir udskrevet af blodgasanalysatoren. Metabolismen er langtfra altid tilgængelig. Det er sjældent, at man har et indblik i patientens metaboliske tilstand. Lungedynamikken visualiseres på skærmen. Lægen bruger det til en vis grad, men dog ikke altid. Værdier for cardiac output (cirkulation) er ligeledes sjældent tilgængelige, men man har som regel et estimat ud fra nogle parametre, som for eksempel hudfarve, kapillærrespons, urinladninger mm. I dag visuliseres ingen gasudvekslingsparametre (shunt, FA2 og Vd). Det eneste, som er tilgængeligt, er patientens oxygeneringsevne, som ikke kan splittes op i de tre nævnte gasudvekslingsparametre. Hvilke variable bruger lægen i indstillingen af en respirator? FeCO2 er tilgængeligt, men ikke FeO2 . Alle intensivpatienter er udstyret med et arterielt kateter, hvilket bevirker, at lægen altid har de arterielle blodværdier tilgængelige. Disse værdier er ikke onlineværdier, det er pointværdier. Der bliver udført en del af disse målinger, som printes ud på en papirstrimmel. Venøst blod bru- 171 ¬ Bilag 1: Interview med Per Thorgaard ges endnu ikke, men det gør de den dag, de får ARTY1 Hvordan er responstiden for de forskellige parametre? Equilibreringstiden for O2 er ca. 3-5 min, hvor den for CO2 er mellem 20 og 30 min. Alt er forudsat konstant ventilation, dvs. at man antager, at patienten ikke ændrer ventilationsmønster undervejs. Meget respirationsbehandling i dag bygger på konceptet om assistventilation, hvilket vil sige, at udstyret kun hjælper patienten med at trække vejret. Et eksempel: En patient har en ikke-tilstrækkelig inspiration, så respiratoren giver et ekstra volumen ilt under inspiration, dvs. en assist til egen ventilation. Det kræver, at blæsebælgen har en kort responstid, da luften ellers kommer for sent, og det kan vække ubehag hos patienten. Assistventilationen er den mest udbredte ventilationsmetode. Hvor ofte indstilles en respirator? Per Thorgaard regner med, at det er under to gange pr. døgn. Der er kommet en autopilot på respiratorerne i dag (automode). Specielt på assistventilation; her indstiller man den så på, at den skal levere et vist volumen pr. min. Hvis patienten så trækker mere end det fastsatte volumen, da giver respiratoren intet luft. Autopiloten betyder, at lægerne ikke behøver at tilse og monitorere patienten hele tiden. Autopiloten indstilles for 24 timer ad gangen, ud fra den statiske tilstand patienten har under indtstillingen. Hvis patientens tilstand ændres efterfølgende, kan automode korrigere for patientens behov. Pause i interviewet, hvor Per Thorgaard fremviste en ventilator Siemens 390. De tilstedeværende fik en hurtig gennemgang af indstillingsmuligheder og funktioner i respiratoren. Input til brugergrænsefladerne Per Thorgaard havde ikke mange input til vores brugergrænseflader, men tilkendegav, at han også mente, at det ville være givtigt, hvis lægen ser konsekvensen af sine handlinger. Best/worst-penalties Per Thorgaard fik udleveret et penaltyskema, som han ville udfylde. Han kunne ikke give nogle værdier på stående fod. Han mente, at vore antagelser om, at penaltyfunktionerne kan repræsenteres som lineære eller eksponentialfunktioner, ikke var helt urealistiske. 1 En arterialiseringsalgoritme som er under udvikling af Marianne Toftegaard. 172 APPENDIKS F Bilag 2: Interview med Steen Andreassen Steen Andreassen er medudvikler af INVENT. Formålet med interviewet med Steen Andreassen er at få dokumenteret, hvilke behov der er til Dr. Know, samt få dokumenteret afgrænsningerne til systemet. I referatet er kun de vigtigste emner medtaget fra interviewet. Tilstede: Dr. Tech. Steen Andreassen, Signe Stougård Pedersen, Mads Hylleberg og Brynjar Vatnsdal Palsson Referat Hvorfor er det nødvendigt at kunne tilpasse INVENT til de 3 valgte forskellige patientgrupper? Hovedargumentet for at skulle vægte penalties forskelligt til de forskellige patientgrupper er, at penalties gør forskellig ”ondt” på forskellige patientgrupper. Patientgrupperne har underliggende forskellige organproblemer, og det er derfor forskellige organer, man ønsker at skåne hos patientgrupperne. F.eks. vil den unge motorcyklist med hjernetraume typisk have et velfungerende hjerte, og hjertet kan derfor godt tåle at blive belastet gennem længere tid og vil ved for dårlig oxygenering kunne respondere for det ved at arbejde hårdere. I en anden situation med en ældre patient med svækket hjerte vil det derimod være oxygeneringen, der vil blive vægtet højere. Steen Andreassen kom med en overvejelse om, om det er de rigtige penalty-funktioner, vi har med (=de har med), idet der ikke er nogen penalty-funktion, der beskriver arteriel oxygenering. Der er nu en penalty for venøs oxygenering, hvilket nok er en rigtig tilnærmelse, idet den beskriver, hvilken tilstand blodet efterlader i det perifere væv, men det er differensen mellem den arterielle og venøse oxygenering, der beskriver hvor meget ilt blodet afgiver i cirkulationen. Hvorfor kan Dr. Know afgrænses til at kun inkludere tre af de fem respiratorindstillinger, dvs freq, VT og FiO2 ? I INVENT anvendes respiratorindstillingerne PEEP og I:E ikke pga. manglende modeller. Det er ikke en realistisk simulering at udelade PEEP og I:E, idet PEEP stort set altid anvendes. Det er et ”sort hul” i INVENT, men ved at fastholde PEEP kan de andre indstillinger/værdier dog observeres. PEEP forbedrer gasudvekslingen i lungerne og reducerer sandsynligvis også risikoen for atelektase, hvilket de ikke har nogen model for. Shunt- og V/Q-mismatch-parametrene fra ALPE er funktioner af PEEP, og det har 173 ¬ Bilag 2: Interview med Steen Andreassen de aldrig fået modelleret ind i INVENT. I:E indstilles af hensyn til patienter med obstruktive lungesygdomme. Disse patienter har svært ved at komme af med luften og kræver derfor længere ekspirationstid. Hvis ekspirationstiden ikke er lang nok, dvs. de kommer ikke af med luften før nyt luft kommer ind, resulterer det i autoPEEP, hvor patienten pustes mere og mere op. Dét justeres ved I:E-forholdet, men der mangler mekaniske modeller hertil. Bruges atelektase i udregningen af totalpenalty i INVENT? Der er noget integreret i INVENT, som kører på tidalvolumen, men det er bygget på en gammel forståelse af lungedynamikken, hvilken er væsentlig ringere end forståelsen nu. Det kan være en årsag til ikke at inkludere atelektase i Dr. Know. Vil det være væsentligt for en udvikler af INVENT at kunne få information om, hvilke klinikere der har anvendt Dr. Know? Steen Andreassen synes, det kunne være interessant at få information om klinikeren, men mener ikke, det er dér kræfterne skal bruges. Det er en bedre idé at hjælpe klinikeren med at forstå og analysere patientcases ud fra et klinisk synspunkt, og statistikken er ikke nødvendigvis så interessant. Vil en udvikler af INVENT foretrække et format til at gemme vægtningerne i? Umiddelbart er formatet ligegyldigt. Det skal selvfølgelig være let tilgængeligt at vide, hvilken patientgruppe der er udregnet lambdaer for. Hvis det skal kunne implementeres direkte i INVENT, skal der være mulighed for at kunne tilgå det og evt. redigere i de beregnede lambda. Der vil helt klart være situationer, hvor det kan være nødvendigt at ændre vægtningerne, og også tillade en form for kommunikation med klinikeren på lambda-niveau. Vil en udvikler af INVENT være interesseret i at få errorgrafer visualiseret i Dr. Know? Det kan være interessant at se, hvor tæt overensstemmelse der er mellem systemets forslag og klinikerens forslag til respiratorindstillingerne. Herved vil det blive illusteret, hvorvidt de producerede vægtninger er anvendelige eller ej. 174
© Copyright 2024