| 1 | IBDF18 ;A;B/CJM - ENCOUNTER FORM - utilities for Problem List ;15OCT93
 | 
|---|
| 2 |  ;;3.0;AUTOMATED INFO COLLECTION SYS;;APR 24, 1997
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 | GETFORM() ;allows the user to select an encounter form with a Clinic Common Problem List
 | 
|---|
| 5 |  ;returns <the form ien, or 0 if none selected>^<form name>
 | 
|---|
| 6 |  N FORM,LIST,QUIT,ANS
 | 
|---|
| 7 |  S (LIST,QUIT)=0 F  D  Q:QUIT
 | 
|---|
| 8 |  .S FORM=$$SLCTFORM^IBDFU4(0)
 | 
|---|
| 9 |  .I 'FORM S QUIT=1 Q
 | 
|---|
| 10 |  .D FIND(FORM,0,.LIST,0)
 | 
|---|
| 11 |  .I LIST S QUIT=1 Q
 | 
|---|
| 12 |  .W !,"The form you selected doesn't contain a Clinic Common Problem List!",!,"Do you want to select another form? "
 | 
|---|
| 13 |  .R ANS:DTIME
 | 
|---|
| 14 |  .S:'$T!(ANS="")!(ANS["^")!(ANS["N")!(ANS["n") QUIT=1,FORM=0
 | 
|---|
| 15 |  Q FORM_"^"_$P($G(^IBE(357,FORM,0)),"^")
 | 
|---|
| 16 |  ;
 | 
|---|
| 17 |  ;
 | 
|---|
| 18 | COPYFORM(FORM,ARY) ;creates a list of problem groups and problems found in FORM on the list of clinic common problems
 | 
|---|
| 19 |  ;returns the length of the returned list
 | 
|---|
| 20 |  ;FORM is the ien of an encounter form
 | 
|---|
| 21 |  ;@ARY is the array where the list should be placed
 | 
|---|
| 22 |  ;each problem will have the format 'problem ien^problem text'
 | 
|---|
| 23 |  ;each group will have the format '^header text to display (could be null)'
 | 
|---|
| 24 |  ;following each group will be the problems on it
 | 
|---|
| 25 |  ;
 | 
|---|
| 26 |  ;the ruturned list will look like this:
 | 
|---|
| 27 |  ;@ARY@(1)=^group header
 | 
|---|
| 28 |  ;@ARY@(2)=problem ien^problem text
 | 
|---|
| 29 |  ;@ARY@(3)=problem ien^problem text
 | 
|---|
| 30 |  ;
 | 
|---|
| 31 |  ;
 | 
|---|
| 32 |  ;@ARY@(k)=^next group header
 | 
|---|
| 33 |  ;@ARY@(k+1)=problem ien^problem text
 | 
|---|
| 34 |  ;....
 | 
|---|
| 35 |  ;
 | 
|---|
| 36 |  Q:'$G(FORM) 0
 | 
|---|
| 37 |  Q:'$L($G(ARY)) 0
 | 
|---|
| 38 |  N BLOCK,LIST,INTRFACE,COUNT
 | 
|---|
| 39 |  S (BLOCK,LIST,INTRFACE,COUNT)=0
 | 
|---|
| 40 |  F  D FIND(FORM,.BLOCK,.LIST,.INTRFACE) Q:'LIST  D COPYLIST(LIST,ARY,.COUNT)
 | 
|---|
| 41 |  Q COUNT
 | 
|---|
| 42 |  ;
 | 
|---|
| 43 | COPYLIST(LIST,ARY,COUNT) ;copies the entries from LIST to @ARY, starting subscript at COUNT+1
 | 
|---|
| 44 |  ;
 | 
|---|
| 45 |  N SLCTN,SUBCOL,TEXT,IEN,NODE,TSUBCOL,NOTREAL,NODE,GROUP,ORDER,HDR
 | 
|---|
| 46 |  ;
 | 
|---|
| 47 |  D SUBCOL(LIST,.TSUBCOL) ;find the subcolumn containing the text
 | 
|---|
| 48 |  ;don't bother returning list of problems if there is no subcolumn containing the problem text
 | 
|---|
| 49 |  Q:'$G(TSUBCOL)
 | 
|---|
| 50 |  ;
 | 
|---|
| 51 |  S GROUP=0 F  S GROUP=$O(^IBE(357.3,"APO",LIST,GROUP)) Q:'GROUP  D
 | 
|---|
| 52 |  .S HDR=$P($G(^IBE(357.4,GROUP,0)),"^") I HDR="BLANK" S HDR=""
 | 
|---|
| 53 |  .S COUNT=COUNT+1,@ARY@(COUNT)="^"_HDR
 | 
|---|
| 54 |  .S ORDER="" F  S ORDER=$O(^IBE(357.3,"APO",LIST,GROUP,ORDER)) Q:ORDER=""  S SLCTN=0 F  S SLCTN=$O(^IBE(357.3,"APO",LIST,GROUP,ORDER,SLCTN)) Q:'SLCTN  D
 | 
|---|
| 55 |  ..S NODE=$G(^IBE(357.3,SLCTN,0)),IEN=$P(NODE,"^"),NOTREAL=$P(NODE,"^",2)
 | 
|---|
| 56 |  ..Q:'IEN!(NOTREAL)
 | 
|---|
| 57 |  ..S SUBCOL=$O(^IBE(357.3,SLCTN,1,"B",TSUBCOL,0)) Q:'SUBCOL  S NODE=$G(^IBE(357.3,SLCTN,1,SUBCOL,0)) S:$P(NODE,"^")=TSUBCOL TEXT=$P(NODE,"^",2) I $L(TEXT) S COUNT=COUNT+1,@ARY@(COUNT)=IEN_"^"_TEXT Q
 | 
|---|
| 58 |  Q
 | 
|---|
| 59 |  ;
 | 
|---|
| 60 |  ;
 | 
|---|
| 61 | SUBCOL(LIST,TSUBCOL) ;finds the subcolumn containing the text
 | 
|---|
| 62 |  ;TSUBCOL should be passed by reference - used to return the subcolumn
 | 
|---|
| 63 |  ;LIST is the selection list to search
 | 
|---|
| 64 |  S TSUBCOL=""
 | 
|---|
| 65 |  ;
 | 
|---|
| 66 |  N SC,PIECE,NODE S SC=0
 | 
|---|
| 67 |  ;
 | 
|---|
| 68 |  ;refering to the data returned by the package interface, piece 2 is the description
 | 
|---|
| 69 |  F  S SC=$O(^IBE(357.2,LIST,2,SC)) Q:'SC  S NODE=$G(^IBE(357.2,LIST,2,SC,0)),PIECE=$P(NODE,"^",5) I PIECE=2 S TSUBCOL=$P(NODE,"^") Q
 | 
|---|
| 70 |  Q
 | 
|---|
| 71 |  ;
 | 
|---|
| 72 | FIND(FORM,BLK,LIST,INTRFACE) ;finds the block & list containing the Clinic Common Problem List
 | 
|---|
| 73 |  N INTRFACE,QUIT
 | 
|---|
| 74 |  S BLK=+$G(BLK),LIST=+$G(LIST),INTRFACE=+$G(INTRFACE)
 | 
|---|
| 75 |  ;
 | 
|---|
| 76 |  ;if not already found,find the package interface for selecting PROBLEMS
 | 
|---|
| 77 |  I 'INTRFACE S INTRFACE=$O(^IBE(357.6,"B","GMP SELECT CLINIC COMMON PROBL",0))
 | 
|---|
| 78 |  I 'INTRFACE S (BLK,LIST)=0 QUIT
 | 
|---|
| 79 |  ;
 | 
|---|
| 80 |  I BLK D
 | 
|---|
| 81 |  .F  S LIST=$O(^IBE(357.2,"C",BLK,LIST)) Q:'LIST  I $P($G(^IBE(357.2,LIST,0)),"^",11)=INTRFACE Q
 | 
|---|
| 82 |  I BLK,LIST QUIT
 | 
|---|
| 83 |  S QUIT=0
 | 
|---|
| 84 |  F  S BLK=$O(^IBE(357.1,"C",FORM,BLK)) Q:'BLK  D  Q:QUIT
 | 
|---|
| 85 |  .S LIST=0 F  S LIST=$O(^IBE(357.2,"C",BLK,LIST)) Q:'LIST  I $P($G(^IBE(357.2,LIST,0)),"^",11)=INTRFACE S QUIT=1 Q
 | 
|---|
| 86 |  I 'BLK!('LIST) S (BLK,LIST)=0
 | 
|---|
| 87 |  Q
 | 
|---|