| 1 | IBDF4 ;ALB/CJM - ENCOUNTER FORM - BUILD FORM(editing group's selections) ;NOV 16,1992 | 
|---|
| 2 | ;;3.0;AUTOMATED INFO COLLECTION SYS;**19,38,56**;APR 24, 1997 | 
|---|
| 3 | ; | 
|---|
| 4 | SLCTNS ; | 
|---|
| 5 | N IBRTN | 
|---|
| 6 | Q:IBLIST'=$P($G(^IBE(357.4,IBGRP,0)),"^",3) | 
|---|
| 7 | S IBRTN=IBLIST("RTN") | 
|---|
| 8 | D RTNDSCR^IBDFU1B(.IBRTN) | 
|---|
| 9 | D KILL^IBDFUA | 
|---|
| 10 | D EN^VALM("IBDF EDIT GROUP'S SELECTIONS") ;call the list manager | 
|---|
| 11 | Q | 
|---|
| 12 | ONENTRY ;entry code for list manager | 
|---|
| 13 | D IDXSLCTN | 
|---|
| 14 | Q | 
|---|
| 15 | ONEXIT ;exit code for the list manager | 
|---|
| 16 | K @VALMAR | 
|---|
| 17 | Q | 
|---|
| 18 | ; | 
|---|
| 19 | IDXSLCTN ;build an array of selections in print order for the list processor | 
|---|
| 20 | N SLCTN,ODR,NODE | 
|---|
| 21 | K @VALMAR | 
|---|
| 22 | S ODR="",VALMCNT=0 | 
|---|
| 23 | F  S ODR=$O(^IBE(357.3,"APO",IBLIST,IBGRP,ODR)) Q:ODR=""  D | 
|---|
| 24 | .S SLCTN="" F  S SLCTN=$O(^IBE(357.3,"APO",IBLIST,IBGRP,ODR,SLCTN)) Q:'SLCTN  D | 
|---|
| 25 | ..;check for messed up index and take appropriate action | 
|---|
| 26 | ..S NODE=$G(^IBE(357.3,SLCTN,0)) | 
|---|
| 27 | ..I ($P(NODE,"^",3)'=IBLIST)!($P(NODE,"^",4)'=IBGRP) D  Q | 
|---|
| 28 | ...K ^IBE(357.3,"APO",IBLIST,IBGRP,ODR,SLCTN) | 
|---|
| 29 | ...I $P(NODE,"^",3)'=IBLIST,$P(NODE,"^",4)=IBGRP D  Q | 
|---|
| 30 | ....K DIK,DA S DIK="^IBE(357.3,",DA=SLCTN D ^DIK K DIK,DA | 
|---|
| 31 | ...I $P(NODE,"^",3)=IBLIST,$P($G(^IBE(357.4,+IBGRP,0)),"^",3)'=IBLIST D  Q | 
|---|
| 32 | ....K DIK,DA S DIK="^IBE(357.3,",DA=SLCTN D ^DIK K DIK,DA | 
|---|
| 33 | ...K DIK,DA S DIK="^IBE(357.3,",DA=SLCTN D IX^DIK K DIK,DA | 
|---|
| 34 | ..; | 
|---|
| 35 | ..S VALMCNT=VALMCNT+1 | 
|---|
| 36 | ..S @VALMAR@(VALMCNT,0)=$$DISPLAY(SLCTN,VALMCNT),@VALMAR@("IDX",VALMCNT,VALMCNT)=SLCTN | 
|---|
| 37 | ..D FLDCTRL^VALM10(VALMCNT,"ID") ;set video for ID column | 
|---|
| 38 | Q | 
|---|
| 39 | LMGRPHDR ;header for the screen | 
|---|
| 40 | S VALMHDR(1)="SELECTIONS CURRENTLY DEFINED FOR '"_$$GRPNAME_"' PRINT GROUP" | 
|---|
| 41 | Q | 
|---|
| 42 | ; | 
|---|
| 43 | GRPNAME() ;the name of the selection group | 
|---|
| 44 | Q $P($G(^IBE(357.4,IBGRP,0)),"^",1) | 
|---|
| 45 | ; | 
|---|
| 46 | DISPLAY(SLCTN,COUNT) ;returns a line to display to the list containing a selection - SLCTN is a ptr to the selectin, COUNT is the number of the selection on the list | 
|---|
| 47 | N SC,SCDA,VAL,RET,W,NODE,ORDER | 
|---|
| 48 | ;W - an array cotaining the widths of the subcolumns that contain text | 
|---|
| 49 | S VAL="" | 
|---|
| 50 | S RET=$$PADRIGHT^IBDFU(COUNT,4) | 
|---|
| 51 | S NODE=$G(^IBE(357.3,SLCTN,0)) | 
|---|
| 52 | S ORDER=$P(NODE,"^",5),RET=RET_$J(ORDER,6,2) | 
|---|
| 53 | I $P(NODE,"^",2) S RET=RET_$S($P(NODE,"^",7):" SH",1:" PH")_"| "_$P(NODE,"^",6) | 
|---|
| 54 | I '$P(NODE,"^",2) S RET=RET_"  ",SC="" F SC=1:1:8 S SCDA=$O(^IBE(357.3,SLCTN,1,"B",SC,"")) D | 
|---|
| 55 | .I $G(IBLIST("SCTYPE",SC))=1 S W(SC)=IBLIST("SCW",SC)*(1+IBLIST("BTWN")) | 
|---|
| 56 | .S:$G(W(SC)) VAL=$$PADRIGHT^IBDFU($S(SCDA:$P($G(^IBE(357.3,SLCTN,1,SCDA,0)),"^",2),1:""),W(SC)) | 
|---|
| 57 | .S:VAL'="" RET=RET_" | "_VAL | 
|---|
| 58 | .S VAL="" | 
|---|
| 59 | I $D(^IBE(357.3,SLCTN,2)) S RET=RET_"  ",SC="" F SC=1:1:2 S SCDA=$P(^IBE(357.3,SLCTN,2),"^",SC) S:SC=2 SCDA=$S($D(^LEX)>1:$P($G(^LEX(757.01,+SCDA,0)),"^"),1:$P($G(^GMP(757.01,+SCDA,0)),"^")) D | 
|---|
| 60 | .S W(SC)=25 | 
|---|
| 61 | .S VAL=$$PADRIGHT^IBDFU($S(SCDA]"":SCDA,1:""),W(SC)) | 
|---|
| 62 | .S:VAL'="" RET=RET_" | "_VAL | 
|---|
| 63 | .S VAL="" | 
|---|
| 64 | Q RET | 
|---|
| 65 | ADDSLCTN ;allows the user to add a selection to the selection group | 
|---|
| 66 | N QUIT,SUB | 
|---|
| 67 | ; | 
|---|
| 68 | S VALMBCK="R" | 
|---|
| 69 | D FULL^VALM1 | 
|---|
| 70 | I IBRTN("ACTION")'=3 D NOGOOD G ADDEXIT | 
|---|
| 71 | K @IBRTN("DATA_LOCATION") | 
|---|
| 72 | S QUIT=0 F  D  Q:QUIT  W !!!,"Now for another SELECTION LIST entry!" | 
|---|
| 73 | .I '$$DORTN^IBDFU1B(.IBRTN) S QUIT=1 D NOGOOD Q | 
|---|
| 74 | .I '$D(@IBRTN("DATA_LOCATION")) S QUIT=1 Q | 
|---|
| 75 | .D ADDREC(.QUIT) ;edits and adds the selection | 
|---|
| 76 | .K @IBRTN("DATA_LOCATION") | 
|---|
| 77 | ADDEXIT ; | 
|---|
| 78 | D IDXSLCTN | 
|---|
| 79 | Q | 
|---|
| 80 | ADDREC(QUIT,ORDER,SLCTN) ;allows the user to number the selection, edit the editable subcolumns, then adds the record - sets QUIT=1 if user quits | 
|---|
| 81 | N SUB,COUNT,NODE,VAL,DLAYGO,QTY,DTOUT,DUOUT,DIRUT | 
|---|
| 82 | I $P($G(^IBE(357.6,$P($G(^IBE(357.2,+IBLIST,0)),"^",11),16)),"^",8) S DIR(0)="NO",DIR("A")="Quantity",DIR("B")=1,DIR("?")="Enter the number of occurrences" D ^DIR K DIR S:$D(DTOUT)!$D(DUOUT) QUIT=1 Q:QUIT  S QTY=$G(Y) | 
|---|
| 83 | I '$G(ORDER) D  Q:QUIT | 
|---|
| 84 | .K DIR S DIR(0)="357.3,.05",DIR("B")=$$NEXT^IBDF4A(IBLIST,IBGRP) D ^DIR K DIR I $D(DIRUT) S QUIT=1 Q | 
|---|
| 85 | .S ORDER=+Y | 
|---|
| 86 | S VAL=$G(@IBRTN("DATA_LOCATION")) | 
|---|
| 87 | Q:QUIT | 
|---|
| 88 | ;we have all the data needed to add the selection - so add it | 
|---|
| 89 | S NODE=$S($P(VAL,"^")'="":$P(VAL,"^"),1:ORDER)_"^^"_IBLIST_"^"_IBGRP_"^"_ORDER_$S($G(QTY):"^^^^"_QTY,1:"") | 
|---|
| 90 | K DIC,DD,DO,DINUM S DIC="^IBE(357.3,",X=$P(NODE,"^",1),DIC(0)="FL",DLAYGO=357.3 | 
|---|
| 91 | D FILE^DICN K DIC,DIE,DA | 
|---|
| 92 | S SLCTN=$S(+Y<0:"",1:+Y) | 
|---|
| 93 | I 'SLCTN W !,"Unable to create a new selection record!" D PAUSE^VALM1 S QUIT=1 Q | 
|---|
| 94 | S ^IBE(357.3,SLCTN,0)=NODE | 
|---|
| 95 | ;--- move codes and add modifiers | 
|---|
| 96 | D CODES^IBDF4A,ADD^IBDF4C | 
|---|
| 97 | ;---move the subcolum set up | 
|---|
| 98 | F SUB=1:1:8 D  Q:QUIT | 
|---|
| 99 | .I $G(IBLIST("SCTYPE",SUB))=1 I IBLIST("SCPIECE",SUB),IBLIST("SCW",SUB) D | 
|---|
| 100 | ..S NODE=$$DATANODE^IBDFU1B(IBRTN,IBLIST("SCPIECE",SUB)) | 
|---|
| 101 | ..I NODE]"" S VAL(SUB)=$P($G(@IBRTN("DATA_LOCATION")@(NODE)),"^",IBLIST("SCPIECE",SUB)) | 
|---|
| 102 | ..E  S VAL(SUB)=$P(VAL,"^",IBLIST("SCPIECE",SUB)) | 
|---|
| 103 | ..Q:('IBLIST("SCEDITABLE",SUB))!((IBRTN("WIDTH",1))&(IBLIST("SCPIECE",SUB)=1)) | 
|---|
| 104 | ..W !!,"Subcolumn Header: "_IBLIST("SCHDR",SUB) K DIR S DIR(0)="FO^0:"_(IBLIST("SCW",SUB)*(1+IBLIST("BTWN"))),DIR("A")="Edit Subcolumn "_SUB,DIR("B")=VAL(SUB)_$S($G(QTY)>1:" x "_QTY,1:"") | 
|---|
| 105 | ..I $P($G(^IBE(357.3,SLCTN,3,0)),"^",4)>0 D | 
|---|
| 106 | ...S:DIR("B")'["w/ mod" DIR("B")=DIR("B")_"w/ mod" | 
|---|
| 107 | ..D ^DIR K DIR S:$D(DTOUT)!$D(DUOUT) QUIT=1 Q:QUIT  S VAL(SUB)=Y I IBLIST("SCPIECE",SUB)=1,X="" S QUIT=1 | 
|---|
| 108 | ; | 
|---|
| 109 | ;add the subcolumn value multiple | 
|---|
| 110 | S COUNT=0 F SUB=1:1:8 I $G(VAL(SUB))'="" S COUNT=COUNT+1,^IBE(357.3,SLCTN,1,COUNT,0)=SUB_"^"_VAL(SUB) | 
|---|
| 111 | S ^IBE(357.3,SLCTN,1,0)="^357.31IA^"_COUNT_"^"_COUNT | 
|---|
| 112 | K DA S DA=SLCTN,DIK="^IBE(357.3," D IX^DIK K DIK,DA | 
|---|
| 113 | D NARR,TERM | 
|---|
| 114 | Q | 
|---|
| 115 | ; | 
|---|
| 116 | NARR ; -- edit provider narrative, but only for selections where the | 
|---|
| 117 | ;    interface allows editing | 
|---|
| 118 | N DIE,DA,DR | 
|---|
| 119 | I $P($G(^IBE(357.6,+$P($G(^IBE(357.2,+IBLIST,0)),U,11),0)),U,17) D | 
|---|
| 120 | .S DIE="^IBE(357.3,",DA=SLCTN,DR=2.01 D ^DIE K DIE,DA,DR | 
|---|
| 121 | Q | 
|---|
| 122 | ; | 
|---|
| 123 | TERM ; -- map selection to clinical lexicon, but only for selections where | 
|---|
| 124 | ;    the package interface allows editing | 
|---|
| 125 | N DIE,DA,DR,GMPTUN,GMPTSUB,GMPTSHOW,XTLKGLB,XTLKHLP,XTLKKSCH,XTLKSAY,IBDLEX | 
|---|
| 126 | I $P($G(^IBE(357.6,+$P($G(^IBE(357.2,+IBLIST,0)),U,11),0)),U,18) D | 
|---|
| 127 | .I $D(^LEX)>1 S X="LEXSET" X ^%ZOSF("TEST") I $T D CONFIG^LEXSET("GMPL","PL1") S IBDLEX=1 | 
|---|
| 128 | .I '$D(IBDLEX) S X="GMPTSET" X ^%ZOSF("TEST") I $T D CONFIG^GMPTSET("GMPL","PL1") S IBDLEX=1 | 
|---|
| 129 | .;D CONFIG^GMPTSET("ICD","ICD") (this is an alternate filter) | 
|---|
| 130 | .Q:'$D(IBDLEX) | 
|---|
| 131 | .S DIE="^IBE(357.3,",DA=SLCTN,DR="2.02//"_$P($G(^IBE(357.3,DA,0)),"^") D ^DIE | 
|---|
| 132 | K DIC | 
|---|
| 133 | Q | 
|---|
| 134 | ; | 
|---|
| 135 | CODES ; -- allow selection of a second code to pass through for this entry | 
|---|
| 136 | ; -- only as if pi allows input of more than one code | 
|---|
| 137 | ;N PI S PI=+$P($G(^IBE(357.2,+IBLIST,0)),U,11) | 
|---|
| 138 | ;Q:'$P($G(^IBE(357.6,PI,16)),U,9) | 
|---|
| 139 | ;N IBI,QUIT,IBVAL S QUIT=0 | 
|---|
| 140 | ;F IBI=1,2 D  Q:QUIT | 
|---|
| 141 | ;.W !,"****Select a ",$S(IBI=1:"second",1:"third")," code to pass along with original." | 
|---|
| 142 | ;.I '$$DORTN^IBDFU1B(.IBRTN) S QUIT=1 Q | 
|---|
| 143 | ;.I +Y'>0 S QUIT=1 Q | 
|---|
| 144 | ;.X $G(^IBE(357.6,PI,9)) S IBVAL=X | 
|---|
| 145 | ;.S DIE="^IBE(357.3,",DA=SLCTN,DR=$S(IBI=1:"2.03",1:"2.04")_"////^S X=IBVAL" D ^DIE K DIE,DA,DR | 
|---|
| 146 | ;Q | 
|---|
| 147 | ; | 
|---|
| 148 | NOGOOD ; | 
|---|
| 149 | W !,"The package interface routine for selection is not properly defined" D PAUSE^VALM1 | 
|---|
| 150 | Q | 
|---|
| 151 | ; | 
|---|
| 152 | SEQUENCE ;allows the user to resequence all of the selections on the list | 
|---|
| 153 | ; | 
|---|
| 154 | N SUBCOL,CNT,P,SORT,GROUP,NODE,VALUE,ITEM,IEN,HDR,DTOUT,DUOUT,DIRUT,SORT1 | 
|---|
| 155 | S VALMBCK="R" | 
|---|
| 156 | D FULL^VALM1 | 
|---|
| 157 | ; | 
|---|
| 158 | ;sort by which subcolumn? | 
|---|
| 159 | K DIR S DIR("A")="Which subcolumn do you want to sort by?",DIR("?")=" " | 
|---|
| 160 | S SUBCOL=0 F  S SUBCOL=$O(IBLIST("SCTYPE",SUBCOL)) Q:'SUBCOL  I IBLIST("SCTYPE",SUBCOL)=1 S SUBCOL(SUBCOL)="" | 
|---|
| 161 | S (CNT,SUBCOL)=0,DIR(0)="SOX^" | 
|---|
| 162 | F CNT=1:1 S SUBCOL=$O(SUBCOL(SUBCOL)) Q:'SUBCOL  D | 
|---|
| 163 | .S P=IBLIST("SCPIECE",SUBCOL),P=$S(P=1:1,P=2:3,P=3:5,P=4:7,P=5:9,P=6:11,P=7:13,1:0),HDR=$P($G(^IBE(357.6,+IBLIST("RTN"),2)),"^",P),DIR("?",CNT)=SUBCOL_" = "_HDR | 
|---|
| 164 | .S HDR=$S($G(IBLIST("SCHDR",SUBCOL))="":HDR,1:IBLIST("SCHDR",SUBCOL)) | 
|---|
| 165 | .S DIR(0)=DIR(0)_SUBCOL_":"_HDR_";" | 
|---|
| 166 | D ^DIR | 
|---|
| 167 | Q:$D(DIRUT)!(Y=-1) | 
|---|
| 168 | K SUBCOL S SUBCOL=+Y | 
|---|
| 169 | ; | 
|---|
| 170 | ;sort aphabetically or numerically? | 
|---|
| 171 | K DIR | 
|---|
| 172 | S DIR("A")="How should the list be sorted?",DIR(0)="SO^1:ALPHABETICALLY;2:NUMERICALLY;",DIR("B")="ALPHABETICALLY" | 
|---|
| 173 | D ^DIR | 
|---|
| 174 | Q:$D(DIRUT)!(Y=-1) | 
|---|
| 175 | S SORT=Y | 
|---|
| 176 | ;  -- Resequence by group or group and placeholders | 
|---|
| 177 | K DIR | 
|---|
| 178 | S DIR("A")="Resequence by Group or Group and Place Holders?",DIR(0)="SO^1:GROUP/PLACE HOLDERS;2:GROUP;",DIR("B")="GROUP/PLACE HOLDERS" | 
|---|
| 179 | D ^DIR | 
|---|
| 180 | Q:$D(DIRUT)!(Y=-1) | 
|---|
| 181 | S SORT1=Y | 
|---|
| 182 | ; | 
|---|
| 183 | ;sort | 
|---|
| 184 | I SORT1=2 D EN^IBDF4A Q | 
|---|
| 185 | N CNTR,GROUP1,IBGROUP,IBORDER | 
|---|
| 186 | K ^TMP("IBDF",$J) | 
|---|
| 187 | S (GROUP,GROUP1,CNTR,IBGROUP)=0 | 
|---|
| 188 | ;  -- Resequence only specific groups in block. | 
|---|
| 189 | I $D(IBGRUP) F  S IBGROUP=$O(IBGRUP(IBGROUP)) Q:'IBGROUP  D RESEQ | 
|---|
| 190 | I $D(IBGRUP) D ORDER Q | 
|---|
| 191 | ;  -- Resequence all groups of the block. | 
|---|
| 192 | I '$D(IBGRUP) F  S IBGROUP=$O(^IBE(357.3,"APO",IBLIST,IBGROUP)) Q:'IBGROUP  D RESEQ | 
|---|
| 193 | I '$D(IBGRUP) D ORDER Q | 
|---|
| 194 | Q | 
|---|
| 195 | RESEQ S IBORDER=0 F  S IBORDER=$O(^IBE(357.3,"APO",IBLIST,IBGROUP,IBORDER)) Q:'IBORDER  S ITEM=0 F  S ITEM=$O(^IBE(357.3,"APO",IBLIST,IBGROUP,IBORDER,ITEM)) Q:'ITEM  D | 
|---|
| 196 | .S NODE=$G(^IBE(357.3,ITEM,0)) | 
|---|
| 197 | .I ($P(NODE,"^",3)'=IBLIST) Q | 
|---|
| 198 | .S GROUP1=GROUP,GROUP=+$P(NODE,"^",4) | 
|---|
| 199 | .Q:$P($G(^IBE(357.4,GROUP,0)),"^",3)'=IBLIST | 
|---|
| 200 | .I $P(NODE,"^",2)=1 D  Q | 
|---|
| 201 | ..S CNTR=CNTR+1 | 
|---|
| 202 | ..S VALUE=$S(SORT=1:" ",1:+$P(NODE,"^",1)) | 
|---|
| 203 | ..S ^TMP("IBDF",$J,"RESEQUENCE LIST",GROUP,CNTR,VALUE,ITEM)="" | 
|---|
| 204 | .S IEN=$O(^IBE(357.3,ITEM,1,"B",SUBCOL,0)) Q:'IEN | 
|---|
| 205 | .S VALUE=$P($G(^IBE(357.3,ITEM,1,IEN,0)),"^",2) | 
|---|
| 206 | .S VALUE=$S(SORT=1:VALUE=" "_VALUE,1:+$P(NODE,"^",1)) | 
|---|
| 207 | .I GROUP'=GROUP1 S CNTR=CNTR+1 | 
|---|
| 208 | .S ^TMP("IBDF",$J,"RESEQUENCE LIST",GROUP,CNTR,$E(VALUE,1,40),ITEM)="" | 
|---|
| 209 | ;set the order | 
|---|
| 210 | ORDER S GROUP=0,CNTR=0 | 
|---|
| 211 | F  S GROUP=$O(^TMP("IBDF",$J,"RESEQUENCE LIST",GROUP)) Q:'GROUP  D | 
|---|
| 212 | .S VALUE="",CNT=0 | 
|---|
| 213 | .F  S CNTR=$O(^TMP("IBDF",$J,"RESEQUENCE LIST",GROUP,CNTR)) Q:'CNTR  F  S VALUE=$O(^TMP("IBDF",$J,"RESEQUENCE LIST",GROUP,CNTR,VALUE)) Q:VALUE=""  D | 
|---|
| 214 | ..S ITEM=0 F  S ITEM=$O(^TMP("IBDF",$J,"RESEQUENCE LIST",GROUP,CNTR,VALUE,ITEM)) Q:'ITEM  D | 
|---|
| 215 | ...S CNT=CNT+1 | 
|---|
| 216 | ...K DIE,DA,DR S DIE="^IBE(357.3,",DR=".05///"_CNT,DA=ITEM D ^DIE K DIE,DA,DR | 
|---|
| 217 | ; | 
|---|
| 218 | K Y,X,DIR,^TMP("IBDF",$J,"RESEQUENCE LIST") | 
|---|
| 219 | D IDXGRP^IBDF3 | 
|---|
| 220 | Q | 
|---|