| 1 | IBDFDE21 ;ALB/AAS - AICS Data Entry, process selection lists ; 11/22/99 4:35pm | 
|---|
| 2 | ;;3.0;AUTOMATED INFO COLLECTION SYS;**4,38,23**;APR 24, 1997 | 
|---|
| 3 | ; | 
|---|
| 4 | % G ^IBDFDE | 
|---|
| 5 | ; | 
|---|
| 6 | SEL(SEL) ; -- Build results array | 
|---|
| 7 | N IBDX,DSPTXT,IBQUIT,IBDQL,QCNT,IBDQLFR | 
|---|
| 8 | S IBQUIT=0 | 
|---|
| 9 | ; | 
|---|
| 10 | S IBDQL=$$QLFR(.RULE,.QLFR) | 
|---|
| 11 | Q:IBQUIT!(IBDQL="^") | 
|---|
| 12 | S IBDQLFR=$P(IBDQL,"^",1) D SEL1 | 
|---|
| 13 | ; | 
|---|
| 14 | F QCNT=2:1 S IBDQLFR=$P(IBDQL,"^",QCNT) Q:IBDQLFR=""  D SEL1 | 
|---|
| 15 | Q | 
|---|
| 16 | ; | 
|---|
| 17 | SEL1 ; -- build selections | 
|---|
| 18 | S IBDX=$G(RESULT(0))+1,RESULT(0)=IBDX | 
|---|
| 19 | I +SEL=SEL S CHOICE=$$CHOICE^IBDFDE2(SEL) | 
|---|
| 20 | I +SEL'=SEL S CHOICE=SEL | 
|---|
| 21 | S DISPTXT=$S($P(CHOICE,"^",5)="":$P(CHOICE,"^"),1:$P(CHOICE,"^",5)) | 
|---|
| 22 | W:+$G(QCNT)<2 "  ",DISPTXT,"   ",$S($P(CHOICE,"^",2)'="":$P(CHOICE,"^",2),$P($G(^IBE(357.6,IBDF("PI"),0)),"^")="GMP INPUT CLINIC COMMON PROBLEMS":$$LEX^IBDFDE1($P(CHOICE,"^",3)),1:$P(CHOICE,"^",3)),"   ",$P(CHOICE,"^",8)_"   ",$P(CHOICE,"^",4) | 
|---|
| 23 | ; | 
|---|
| 24 | S RESULT(IBDX)=IBDF("PI")_"^"_$P(CHOICE,"^",3)_"^"_DISPTXT_"^"_$P(CHOICE,"^",8)_"^"_$P(CHOICE,"^",6)_"^"_IBDQLFR_"^"_$G(IBDF("IEN"))_"^^"_$P(CHOICE,"^",9)_"^"_$P(CHOICE,"^",2)_"^^"_$P(CHOICE,"^",12) | 
|---|
| 25 | S IBDPI(IBDF("PI"),IBDX)=RESULT(IBDX) | 
|---|
| 26 | ; | 
|---|
| 27 | ; --validate code for active problem list | 
|---|
| 28 | I $P($G(^IBE(357.6,IBDF("PI"),0)),"^")="PX INPUT PATIENT ACTIVE PROBLEM" D | 
|---|
| 29 | .N X S X=$P(CHOICE,"^",2) Q:X="" | 
|---|
| 30 | .I X=799.9 W !,$C(7),IOINHI,"Warning: The ICD9 Diagnosis associated with this problem needs to be updated!",IOINORM Q | 
|---|
| 31 | .D TESTICD^IBDFN7 | 
|---|
| 32 | .I '$D(X) W !,$C(7),IOINHI,"Warning: The ICD9 code associated with this problem is inactive.",IOINORM | 
|---|
| 33 | .;I $D(X) W !,"This is a valid icd9 code" | 
|---|
| 34 | ; | 
|---|
| 35 | ; -- send second and third codes if applicable | 
|---|
| 36 | Q:"PRIMARYSECONDARYADD TO PROBLEM LIST"'[IBDQLFR | 
|---|
| 37 | N IBDQUAL | 
|---|
| 38 | S IBDQUAL=$S(IBDQLFR="PRIMARY":"SECONDARY",1:IBDQLFR) | 
|---|
| 39 | N I,IBDXCD,DISPTXT F I=10,11 I $P(CHOICE,"^",I)]"" D | 
|---|
| 40 | .S IBDX=$G(RESULT(0))+1,RESULT(0)=IBDX | 
|---|
| 41 | .S IBDXCD=$P(CHOICE,"^",I) | 
|---|
| 42 | .N X,Y S X=IBDXCD | 
|---|
| 43 | .D | 
|---|
| 44 | ..I $G(X)="" K X S Y="" Q | 
|---|
| 45 | ..S:$E(X,$L(X))'=" " X=X_" " ; use ba xref, add space to end for lookup. | 
|---|
| 46 | ..S X=$O(^ICD9("BA",X,0)) | 
|---|
| 47 | ..I 'X S Y="" | 
|---|
| 48 | ..E  S Y=$P(^ICD9(X,0),"^",3) | 
|---|
| 49 | .S DISPTXT=Y | 
|---|
| 50 | .S RESULT(IBDX)=IBDF("PI")_"^"_IBDXCD_"^"_DISPTXT_"^"_$P(CHOICE,"^",8)_"^"_$P(CHOICE,"^",6)_"^"_IBDQUAL_"^"_$G(IBDF("IEN"))_"^^"_$P(CHOICE,"^",9) | 
|---|
| 51 | .S IBDPI(IBDF("PI"),IBDX)=RESULT(IBDX) | 
|---|
| 52 | ; | 
|---|
| 53 | ; -- if ans contains - go to modifier routine | 
|---|
| 54 | I IBDASK="CPT Procedure Code" D MOD^IBDFDE23 | 
|---|
| 55 | I IBDASK="Visit Type (EM) Code" D MOD^IBDFDE23 | 
|---|
| 56 | Q | 
|---|
| 57 | ; | 
|---|
| 58 | QLFR(RULE,QLFR) ; -- ask Qualifier from array, impose rules | 
|---|
| 59 | N I,X,IBDQ,IBDQ1,QCNT,CNT,ANS,IBDI,OVER,X1,X2,NUM | 
|---|
| 60 | S IBDQ="",CNT=0 | 
|---|
| 61 | ; | 
|---|
| 62 | ; -- if only 1 qualifier use it | 
|---|
| 63 | I RULE=1 S IBDQ=$G(QLFR(+$O(QLFR(0)))) W "  ",IBDQ G QLFRQ | 
|---|
| 64 | ; | 
|---|
| 65 | S IBDI=0 | 
|---|
| 66 | F  S IBDI=$O(QLFR(IBDI)) Q:'IBDI  S X=$G(QLFR(IBDI)) I X'="" D | 
|---|
| 67 | .S CNT=CNT+1,X(CNT)=X,X2(X)=X | 
|---|
| 68 | .I '$D(X1($E(X),1)) S X1($E(X),1)=X Q | 
|---|
| 69 | .S NUM=$O(X1($E(X),""),-1) S X1($E(X),NUM+1)=X | 
|---|
| 70 | I CNT=1 S IBDQ=$G(X(CNT)) W "  ",IBDQ G QLFRQ | 
|---|
| 71 | ; | 
|---|
| 72 | I $D(IBNAQLFR) S ANS=1 S IBDQ=X(ANS)  W !,IOINHI,"Using Default Qualifier: "_X(ANS),IOINORM,! Q IBDQ | 
|---|
| 73 | OVER1 ; | 
|---|
| 74 | I CNT<1 G QLFRQ | 
|---|
| 75 | W !,IOINHI,"   Select a Qualifier",IOINORM | 
|---|
| 76 | I CNT>1 F I=1:1:CNT I X(I)'="" W !?6,I,?10,X(I) | 
|---|
| 77 | W !,"   Choose 1-",CNT,": " R ANS:DTIME | 
|---|
| 78 | I '$T!($E(ANS,1)="^") S IBDQ="",IBQUIT=1 G QLFRQ | 
|---|
| 79 | I ANS="" G OVER1 | 
|---|
| 80 | S OVER=0 | 
|---|
| 81 | I $E(ANS,1)="?" D HELP G OVER1 | 
|---|
| 82 | I ANS=+ANS D  G:OVER OVER1 | 
|---|
| 83 | .I ANS<1!(ANS>CNT) S OVER=1 Q | 
|---|
| 84 | .I $G(X(ANS))="" S OVER=1 Q | 
|---|
| 85 | .S IBDQ=X(ANS) W "  ",X(ANS) | 
|---|
| 86 | .W ! | 
|---|
| 87 | I ANS'=+ANS D  G:OVER OVER1 | 
|---|
| 88 | .S ANS1=ANS,QCNT=0,IBDQ1="" | 
|---|
| 89 | .F IBD=1:1 S ANS=$P(ANS1,",",IBD) Q:ANS=""!OVER  D ONEQLFR I 'OVER,IBDQ'="" S QCNT=QCNT+1,$P(IBDQ1,"^",QCNT)=IBDQ | 
|---|
| 90 | .S IBDQ=IBDQ1 | 
|---|
| 91 | .K QCNT,IBDQ1 | 
|---|
| 92 | ; | 
|---|
| 93 | QLFRQ Q IBDQ | 
|---|
| 94 | ; | 
|---|
| 95 | ONEQLFR ; -- parse qualifiers | 
|---|
| 96 | S ANS=$$UP^XLFSTR(ANS) | 
|---|
| 97 | I +ANS=ANS D  Q | 
|---|
| 98 | .I $G(X(ANS))="" W !,"'"_ANS_"' IS NOT A VALID SELECTION, RE-ENTER" S OVER=1 Q | 
|---|
| 99 | .S IBDQ=X(ANS) W "  ",X(ANS) | 
|---|
| 100 | ; | 
|---|
| 101 | I $L(ANS)=1,$G(X1(ANS,1))'="",$O(X1(ANS,1))="" S IBDQ=X1(ANS,1) W:ANS=ANS1 $E(X1(ANS,1),2,99) W:ANS'=ANS1 "  ",X1(ANS,1) Q | 
|---|
| 102 | I $G(X2(ANS))'="" S IBDQ=X2(ANS) W "  ",X2(ANS) Q | 
|---|
| 103 | I $L(ANS)=1,$G(X1(ANS,1))'="",$O(X1(ANS,1)) S OVER=1 W "  Ambiguous answer, enter the number." Q  ;S IBDQ=$$PARTLST("X1",ANS,ANS) W $E(X1(ANS,1),2,99) Q | 
|---|
| 104 | S OVER=1 | 
|---|
| 105 | Q | 
|---|
| 106 | ; | 
|---|
| 107 | LST ; -- List previous selections and selections to choose from. | 
|---|
| 108 | N I,CNT,IBQUIT,NUM | 
|---|
| 109 | ; | 
|---|
| 110 | ; -- list previous selections | 
|---|
| 111 | D PREVSEL | 
|---|
| 112 | ; | 
|---|
| 113 | ; -- list available choices | 
|---|
| 114 | S (IBQUIT,CNT)=0 | 
|---|
| 115 | S NUM=+$$CHOICE^IBDFDE2(0) | 
|---|
| 116 | W !!,"Choose from: " | 
|---|
| 117 | S I=0 F  S I=$O(^TMP("IBD-LST",$J,IBDFMIEN,IBDF("PI"),IBDF("IEN"),I)) Q:'I!(IBQUIT)  D | 
|---|
| 118 | .S CHOICE=$$CHOICE^IBDFDE2(I) | 
|---|
| 119 | .I '$P(CHOICE,"^",7) W !?16,IOINHI,$P(CHOICE,"^"),IOINORM Q | 
|---|
| 120 | .S CNT=CNT+1,NUMBER(CNT)=I | 
|---|
| 121 | .W !?3,CNT,?7,$S($P(CHOICE,"^",2)'="":$P(CHOICE,"^",2),1:$P(CHOICE,"^",3)),?16,$P(CHOICE,"^",1) | 
|---|
| 122 | .I NUM>15,NUM>I,'(CNT#15) D PAUSE^IBDFDE I 'IBQUIT W $C(13),$J("",55),$C(13) | 
|---|
| 123 | .;I NUM>15,CNT'=NUM,'(CNT#15) D READ I $G(LISTSEL)<1!($G(LISTSEL)>CNT) K LISTSEL | 
|---|
| 124 | .;I $G(LISTSEL) S SEL=NUMBER(LISTSEL) | 
|---|
| 125 | Q | 
|---|
| 126 | ; | 
|---|
| 127 | PREVSEL ; -- List previous selections | 
|---|
| 128 | N I,CNT | 
|---|
| 129 | S CNT=0 | 
|---|
| 130 | ; | 
|---|
| 131 | ; -- list previous selections | 
|---|
| 132 | I $D(IBDPI(IBDF("PI")))>1 S I=0 F  S I=$O(IBDPI(IBDF("PI"),I)) Q:'I  D | 
|---|
| 133 | .Q:$P(IBDPI(IBDF("PI"),I),"^",7)'=IBDF("IEN")  ; not the same list | 
|---|
| 134 | .S CNT=CNT+1 | 
|---|
| 135 | .W:CNT=1 !!,IOINHI,"   You have previously selected: ",IOINORM | 
|---|
| 136 | .W !,?7,$S($P($G(^IBE(357.6,+IBDPI(IBDF("PI"),I),0)),"^")="GMP INPUT CLINIC COMMON PROBLEMS":$$LEX^IBDFDE1($P(IBDPI(IBDF("PI"),I),"^",2)),1:$P(IBDPI(IBDF("PI"),I),"^",2)) | 
|---|
| 137 | .W ?16,$P(IBDPI(IBDF("PI"),I),"^",3),?50,$P(IBDPI(IBDF("PI"),I),"^",6) | 
|---|
| 138 | W ! | 
|---|
| 139 | Q | 
|---|
| 140 | ; | 
|---|
| 141 | DEFAULT ; -- compute default answer | 
|---|
| 142 | N CNT,SEL,NAME,PIECE,SELAST | 
|---|
| 143 | S (CNT,SEL,SELAST)=0 | 
|---|
| 144 | S NAME=$P($G(^IBE(357.6,+IBDF("PI"),0)),"^") | 
|---|
| 145 | S PIECE=$S(NAME["INPUT PROCEDURE CODE":2,NAME["INPUT DIAGNOSIS CODE":2,NAME["INPUT VISIT TYPE":2,1:3) | 
|---|
| 146 | F  S SEL=$O(IBDPI(IBDF("PI"),SEL)) Q:'SEL  D | 
|---|
| 147 | .Q:$P(IBDPI(IBDF("PI"),SEL),"^",7)'=IBDF("IEN")  ; not the same list | 
|---|
| 148 | .S CNT=CNT+1,SELAST=SEL | 
|---|
| 149 | I $G(SELAST) S DIR("B")=$P(IBDPI(IBDF("PI"),SELAST),"^",PIECE),IBDEFLT(IBDF("PI"))=DIR("B") | 
|---|
| 150 | D PREVSEL | 
|---|
| 151 | Q | 
|---|
| 152 | ; | 
|---|
| 153 | DEFPROV ; -- find default provider, not on form | 
|---|
| 154 | N SEL,IBDX | 
|---|
| 155 | S IBDF("PI")=$O(^IBE(357.6,"B","INPUT PROVIDER",0)) | 
|---|
| 156 | Q:$D(IBDPI(IBDF("PI"))) | 
|---|
| 157 | S SEL=$G(IBDF("PROVIDER")) I 'SEL S SEL=$$PRDEF^IBDFRPC3(IBDF("CLINIC")) | 
|---|
| 158 | Q:'SEL | 
|---|
| 159 | S $P(IBDF("PROVIDER PI"),"^",2)=1 ;flag not on form | 
|---|
| 160 | S IBDX=$G(IBDSEL(0))+1,IBDSEL(0)=IBDX | 
|---|
| 161 | S IBDSEL(IBDX)=IBDF("PI")_"^"_SEL_"^"_$P($G(^VA(200,+SEL,0)),"^")_"^^^PRIMARY^" | 
|---|
| 162 | S IBDPI(IBDF("PI"),IBDX)=IBDSEL(IBDX) | 
|---|
| 163 | W:'$G(IBDF("PROVIDER")) !!,"No Provider Block on form.  Using Default Provider from Clinic as Primary.",! | 
|---|
| 164 | W:$G(IBDF("PROVIDER")) !!,"Using Provider: " | 
|---|
| 165 | W "   ",$P(^VA(200,+SEL,0),"^"),"    PRIMARY",! | 
|---|
| 166 | Q | 
|---|
| 167 | ; | 
|---|
| 168 | HELP ; -- | 
|---|
| 169 | W !,"You must choose a data qualifier for this item.  Enter a number from 1-",CNT,!,"Or enter the first letter, or enter the full name.  Enter more than one",!,"qualifier separated by commas (ie 1,2 or P,A).",! | 
|---|
| 170 | Q | 
|---|
| 171 | ; | 
|---|
| 172 | OTHER(IBDX) ; -- allow input of an additional item | 
|---|
| 173 | N I,J,X,Y,DIR,DIRUT,DUOUT,SEL,SELX,NARR,DIC,DIE,DA,DR,GMPTUN,GMPTSUB,GMPTSHOW,XTLKGLB,XTLKHLP,XTLKKSCH,XTLKSAY,IBDLEX,IBDFILE | 
|---|
| 174 | ; | 
|---|
| 175 | ; -- strip the cpt code if modifiers are added cpt-mod,mod,mod... | 
|---|
| 176 | ; | 
|---|
| 177 | I IBDX["-" S IBDX=$P(IBDX,"-") | 
|---|
| 178 | I $G(IBDF("LEXICON")) D  Q:'$D(IBDLEX) | 
|---|
| 179 | .I $D(^LEX)>1 S X="LEXSET" X ^%ZOSF("TEST") I $T D CONFIG^LEXSET("ICD","ICD") S IBDLEX=1 | 
|---|
| 180 | .I '$D(IBDLEX) S X="GMPTSET" X ^%ZOSF("TEST") I $T D CONFIG^GMPTSET("GMPL","PL1") S IBDLEX=1 | 
|---|
| 181 | .;D CONFIG^GMPTSET("ICD","ICD") (this is an alternate filter) | 
|---|
| 182 | S SELX=-1 | 
|---|
| 183 | I '$G(IBDF("OTHER")) G OTHQ | 
|---|
| 184 | I $L($G(IBDX)) S X=IBDX S DIC(0)="EQMZ" | 
|---|
| 185 | S DIC("A")="Select Other "_$G(IBDASK) | 
|---|
| 186 | S DIC=$P(IBDF("OTHER"),"^") I $P(IBDF("OTHER"),"^",2)'="" S DIC("S")=$P(IBDF("OTHER"),"^",2,99) | 
|---|
| 187 | D ^DIC G OTHQ:+Y<1 | 
|---|
| 188 | K DIC | 
|---|
| 189 | S SEL=Y | 
|---|
| 190 | W !!,$C(7),"WARNING: Item selected not from Encounter Form." | 
|---|
| 191 | ; | 
|---|
| 192 | I IBDF("PI")=$G(IBDF("PROVIDER PI")) W ! S SELX=$P($G(^VA(200,+Y,0)),"^",1)_"^^"_+Y_"^^^^1" G OTHQ | 
|---|
| 193 | ; | 
|---|
| 194 | W "...Entry of Narrative Required!",! | 
|---|
| 195 | S IBDFILE=+IBDF("OTHER") | 
|---|
| 196 | S:IBDFILE=81 DIR("B")=$P(Y(0),"^",2) | 
|---|
| 197 | ;S:IBDFILE=80 DIR("B")=$P(Y(0),"^",3) | 
|---|
| 198 | S:IBDFILE=80 DIR("B")=$S($L($G(^ICD9(+Y,1)))<81:^ICD9(+Y,1),1:$P(Y(0),"^",3)) | 
|---|
| 199 | S:IBDFILE=357.69 DIR("B")=$P(Y(0),"^",3) | 
|---|
| 200 | I IBDFILE>9999999,IBDFILE<10000000 S DIR("B")=$P(Y(0),"^",1) | 
|---|
| 201 | S DIR(0)="FO^3:80",DIR("A")="Narrative" D ^DIR K DIR G:$G(DIRUT) OTHQ | 
|---|
| 202 | S NARR=Y | 
|---|
| 203 | ; | 
|---|
| 204 | S SELX=$S((IBDFILE<9999999)&(IBDFILE'=757.01):NARR_"^^"_$P(SEL,"^",2)_"^^^^1",1:NARR_"^^"_$P(SEL,"^",1)_"^^^^1") | 
|---|
| 205 | OTHQ Q $S(SELX=-1:"",1:SELX) | 
|---|
| 206 | ; | 
|---|
| 207 | PARTLST(ARY,NEXT,ANS) ; -- input has more than one match, prompt for which one | 
|---|
| 208 | N I,J,K,N,IBD,ANS2,SEL,CHOICE | 
|---|
| 209 | S SEL=0 | 
|---|
| 210 | S NEXT=$E(NEXT,1,$L(NEXT)-1)_$C($A($E(NEXT,$L(NEXT)))-1)_"~" | 
|---|
| 211 | ; | 
|---|
| 212 | S J=0,K=NEXT F  S K=$O(@ARY@(K)) Q:$E(K,1,$L(ANS))'=ANS  D | 
|---|
| 213 | .S N=0 F  S N=$O(@ARY@(K,N)) Q:'N  D | 
|---|
| 214 | ..S J=J+1,IBD(J)=@ARY@(K,N),CHOICE=$$CHOICE^IBDFDE2(IBD(J)) | 
|---|
| 215 | ..W !?6,J,?10,$S($P(CHOICE,"^",2)'="":$P(CHOICE,"^",2),1:$P(CHOICE,"^",3)),?20,$P(CHOICE,"^",1),?50,"   ",$P(CHOICE,"^",8),"   ",$P(CHOICE,"^",4) | 
|---|
| 216 | ; | 
|---|
| 217 | ASKNUM I J<1 G PARTLQ | 
|---|
| 218 | W !,"   Choose 1-",J,": " R ANS2:DTIME | 
|---|
| 219 | I '$T!($E(ANS2,1)="^")!(ANS2="") S SEL="" G PARTLQ | 
|---|
| 220 | I $E(ANS2,1)="?" W !,"Enter a number from 1 - ",J G ASKNUM | 
|---|
| 221 | S ANS2=+ANS2 | 
|---|
| 222 | I ANS2<1!(ANS2>J) G ASKNUM | 
|---|
| 223 | I $G(IBD(ANS2))="" G ASKNUM | 
|---|
| 224 | W ! | 
|---|
| 225 | S SEL=$G(IBD(ANS2)) | 
|---|
| 226 | PARTLQ Q SEL | 
|---|
| 227 | ; | 
|---|
| 228 | READ ; -- get input from list | 
|---|
| 229 | N ANS2 | 
|---|
| 230 | G:CNT<1 READQ | 
|---|
| 231 | W !,"   Choose 1-",CNT,": " R ANS2:DTIME | 
|---|
| 232 | I '$T!($E(ANS2,1)="^") S IBQUIT=1 G READQ | 
|---|
| 233 | I $E(ANS2,1)="?" W !,"Enter a number from 1 - ",CNT," or return to see more." G READ | 
|---|
| 234 | S ANS2=+ANS2 | 
|---|
| 235 | I ANS2<1!(ANS2>CNT) W $C(7),! G READ | 
|---|
| 236 | I $G(NUMBER(CNT))="" G READ | 
|---|
| 237 | W ! | 
|---|
| 238 | READQ Q | 
|---|