This wiki has undergone a migration to Confluence found Here
<meta name="googlebot" content="noindex">

Arden Syntax:Implementation Guide:Engineering Use Cases

From HL7Wiki
Revision as of 13:21, 17 November 2013 by Karstenf77 (talk | contribs) (→‎Guidelines)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Programming / Engineering Use Cases:

Every use case should contain at least one example MLM.

  • decision trees/tables
  • production system
  • state machines / transitions
  • guidelines
  • fuzzy control
  • use of external knowledge bases
  • creation and maintenance of documents (e.g., CHICA system)
  • (any other ideas ?)

Guidelines

The following MLM is part of a larger knowledge base implementing a guideline for borreliosis detection and support. The calling instance sends a set of patient parameter to this MLM. The MLM checks if relevant parameter for a decision are in the list. If at some point of the decision a parameter (necessary for the decision) is missing, the MLM will create a so called 'question object' that is sent back to the calling instance. The calling instance can then use this question object to ask the corresponding medical staff for the specific parameter of the patient. With the additional parameter (additional to the orginal list) the MLM is called again. If no other parameter for the final decision is needed, the MLM will return a result or a recommendation based on the guideline.

maintenance:
 title: borreliosis_erythema_migrans_treatment;;
 mlmname: borreliosis_erythema_migrans_treatment;;
 arden: Version 2.9;;
 version: 1.08;;
 institution: Medexter Healthcare GmbH, Vienna, Austria;;
 author: Alexander Seitinger;;
 specialist: Alexander Seitinger;;
 date: 2008−08−20;;
 validation: testing;;
library:
 purpose: borreliosis support;;
 explanation:
   managing all borreliosis EM treatment
 ;;
 keywords: borreliosis, decision support;;
 citations: ;;
 links: ;;
knowledge:
 type: data_driven;;
 data:
   parameterlist := argument;
   result_obj := object[result, next_questions];
   question_obj := object[q_type, q_label, q_info];
 ;;
 priority: ;;
 evoke: ;;
 logic:
   resultobj := new result_obj;
   resultobj.result := ();
   resultobj.next_questions := ();
 
   age := −1;
   gender := −1;
   
   pregnant := −1;
   breastfeeding := −1;
   allergy_amocicilline_doxycycline := −1;
   contraindication_amocicilline_doxycycline := −1;
   
   for parameter in parameterlist do
       if parameter.key eq "Age" then
           age := parameter.val;
       elseif parameter.key eq "Gender" then
           gender := parameter.val;
       elseif parameter.key eq "Pregnant" then
           pregnant := parameter.val;
       elseif parameter.key eq "Breastfeeding" then
           breastfeeding := parameter.val;
       elseif parameter.key eq "Allergy" then
           allergy_amocicilline_doxycycline := parameter.val;
       elseif parameter.key eq "Contraindication" then
           contraindication_amocicilline_doxycycline := parameter.val;
       endif;
   enddo;
   // if female: pregnant? breastfeeding?
   if gender eq 1 then // female
       if pregnant eq −1 then
           question := new question_obj;
           question.q_type := "polar_bool";
           question.q_label := "Pregnant";
           question.q_info := "Pregnancy is the fertilization and development of one or more offspring.";
           
           resultobj.result := resultobj.result, localized ’pregnant’;
           resultobj.next_questions := resultobj.next_questions, question;
       endif;
       if breastfeeding eq −1 then
           question := new question_obj;
           question.q_type := "polar_bool";
           question.q_label := "Breastfeeding";
           question.q_info := "Breastfeeding is the feeding of an infant or young child with breast milk directly from female human breasts.";
           
           resultobj.result := resultobj.result, localized ’breastfeeding’;
           resultobj.next_questions := resultobj.next_questions, question;
       endif
   endif;
   
   // check for allergies
   if allergy_amocicilline_doxycycline eq −1 then // then contraindication_amocicilline_doxycycline also -1
       question := new question_obj;
       question.q_type := "polar_fuzzy";
       question.q_label := "Allergy";
       question.q_info := "mocicilline and/or Doxycycline allergy.";
       question2 := new question_obj;
       question2.q_type := "polar_fuzzy";
       question2.q_label := "Contraindication";
       question2.q_info := "Amocicilline and/or Doxycycline contraindication.";
       resultobj.result := resultobj.result, localized ’allerg_amocicilline_doxycycline’, localized ’contra_amocicilline_doxycycline’;
       resultobj.next_questions := resultobj.next_questions, question, question2;
   elseif allergy_amocicilline_doxycycline then
       if pregnant then
           resultobj.result := resultobj.result, localized ’erythema_migrans_alergy_therapy_pregnant’;
       else
           if age < 18 then // child
               resultobj.result := resultobj.result, localized ’erythema_migrans_alergy_therapy_child’;
           else
               resultobj.result := resultobj.result, localized ’erythema_migrans_alergy_therapy_adult’;
           endif;
       endif;
       
       question := new question_obj;
       question.q_type := "polar_bool";
       question.q_label := "Executed EM Therapy";
       question.q_info := "Patient took the medication for the adviced duration and dosage.";
       
       resultobj.next_questions := resultobj.next_questions, question;
   elseif contraindication_amocicilline_doxycycline then // same as allergy_amocicilline_doxycycline - should be solved with or
       if pregnant then
           resultobj.result := resultobj.result, localized ’erythema_migrans_alergy_therapy_pregnant’;
       else
           if age < 18 then // child
               resultobj.result := resultobj.result, localized ’erythema_migrans_alergy_therapy_child’;
           else
               resultobj.result := resultobj.result, localized ’erythema_migrans_alergy_therapy_adult’;
           endif;
       endif;
       question := new question_obj;
       question.q_type := "polar_bool";
       question.q_label := "Executed EM Therapy";
       question.q_info := "Patient took the medication for the adviced duration and dosage.";
       resultobj.next_questions := resultobj.next_questions, question;
   else // no allergy or contradiction
       if pregnant then
           resultobj.result := resultobj.result, localized ’erythema_migrans_therapy_adult1’;
       elseif breastfeeding then // same as pregnant
           resultobj.result := resultobj.result, localized ’erythema_migrans_therapy_adult1’;
       else
           if age < 18 then // child
               resultobj.result := resultobj.result, localized ’erythema_migrans_therapy_child1’;
               if age > 9 then
                   resultobj.result := resultobj.result, localized ’erythema_migrans_therapy_child2’;
               endif;
           else
               resultobj.result := resultobj.result, localized ’erythema_migrans_therapy_adult1’, localized ’erythema_migrans_therapy_adult2’;
           endif;
       endif;
       question := new question_obj;
       question.q_type := "polar_bool";
       question.q_label := "Executed EM Therapy";
       question.q_info := "Patient took the medication for the adviced duration and dosage.";
       resultobj.next_questions := resultobj.next_questions, question;
   endif;
   conclude true;
 ;;
 action:
   return resultobj;
 ;;
 urgency: ;;
 resources:
   default: en;;
   language: en
       ’pregnant’: "Check if patient is pregnant.";
       ’breastfeeding’: "Ask patient if she is breastfeeding";
       ’allerg_amocicilline_doxycycline’: "Check if patient has an Amocicilline or Doxycycline allergy.";
       ’contra_amocicilline_doxycycline’: "Check if there are contraindications for Amocicilline or Doxycycline.";
       ’erythema_migrans_alergy_therapy_pregnant’: "Choose Azithromycin or Erytromycin and take Ceftriaxone (under clinical surveillance) into consideration.";
       ’erythema_migrans_alergy_therapy_adult’: "Choose Cefuroxim (2x500 mg p.o., 14−21 days), Azithromycin (1x500 mg p.o., 7−10 days) or Clarithromycin (2x500 mg p.o., 14−21 days)";
       ’erythema_migrans_alergy_therapy_child’: "Choose Cefuroxim (30 mg/kg/day, 14−21 days), Azithromycin (5−10 mg/kg/day, 5−10 days) or Clarithromycin (2x500 mg p.o., 14−21 days)";
       ’erythema_migrans_therapy_adult1’: "Choose Amaxicillin (3x500 mg p.o., 14−21 days).";
       ’erythema_migrans_therapy_adult2’: "Doxycycline (2x100 mg p.o., 10 days) is also an option.";
       ’erythema_migrans_therapy_child1’: "For children use Amaxicillin (2−4 mg/kg/day, 14−21 days)";
       ’erythema_migrans_therapy_child2’: "For children older than 9 years Doxycycline (2−4 mg/kg/day, 10 days) is an option";;
end: