| 1 | IBDF18E0 ;ALB/CJM - ENCOUNTER FORM - PCE DEVICE INTERFACE utilities ;04-OCT-94 | 
|---|
| 2 | ;;3.0;AUTOMATED INFO COLLECTION SYS;**11,25,38,36,23**;APR 24, 1997 | 
|---|
| 3 | ; | 
|---|
| 4 | SETPXCA ;set values from TEMP() into the PXCA() | 
|---|
| 5 | ; | 
|---|
| 6 | N NODE,NUMBER,IBQUIT,Y,Y1,X | 
|---|
| 7 | S PROVIDER=+$P(PXCA("ENCOUNTER"),"^",4) | 
|---|
| 8 | I PROVIDER,"^P^S^"'[("^"_$P(PXCA("ENCOUNTER"),"^",15)_"^") S $P(PXCA("ENCOUNTER"),"^",15)="S" D LOGERR^IBDF18E2(3579603,.FORMID,"",PROVIDER) | 
|---|
| 9 | ; | 
|---|
| 10 | S NODE="" F  S NODE=$O(TEMP(NODE)) Q:NODE=""  S NUMBER=0,FID="" F  S FID=$O(TEMP(NODE,FID)) Q:FID=""  S ITEM="" F  S ITEM=$O(TEMP(NODE,FID,ITEM)) Q:ITEM=""  D | 
|---|
| 11 | .S IBQUIT=0 | 
|---|
| 12 | .I NODE="PROCEDURE" S X=TEMP(NODE,FID,ITEM) D | 
|---|
| 13 | ..I $P(X,"^",2)="" S $P(X,"^",2)=1 | 
|---|
| 14 | ..S Y=0 F  S Y=$O(PXCA(NODE,PROVIDER,Y)) Q:'Y!(IBQUIT)  D | 
|---|
| 15 | ...S Y1=$G(PXCA(NODE,PROVIDER,Y)) | 
|---|
| 16 | ...I $P(X,"^")=$P(Y1,"^"),$P(X,"^",3,7)=$P(Y1,"^",3,7) S $P(PXCA(NODE,PROVIDER,Y),"^",2)=$P(PXCA(NODE,PROVIDER,Y),"^",2)+$P(X,"^",2),IBQUIT=1 | 
|---|
| 17 | ..Q:IBQUIT | 
|---|
| 18 | ..S TEMP(NODE,FID,ITEM)=X | 
|---|
| 19 | .I IBQUIT K TEMP(NODE,FID,ITEM) Q | 
|---|
| 20 | .S NUMBER=NUMBER+1 | 
|---|
| 21 | .S PXCA(NODE,PROVIDER,NUMBER)=TEMP(NODE,FID,ITEM) | 
|---|
| 22 | .I $D(TEMP(NODE,FID,ITEM,"MODIFIER")) D MODPXCA | 
|---|
| 23 | .K TEMP(NODE,FID,ITEM) | 
|---|
| 24 | ; | 
|---|
| 25 | ; -- default c/o date time to now if not passed | 
|---|
| 26 | I '$P($G(^IBD(357.09,1,1)),"^",2) D  ;cont only if s/p not answerred | 
|---|
| 27 | .I $D(PXCA("ENCOUNTER")) I $P(PXCA("ENCOUNTER"),"^",14)="" D  ;quit if we are already passing c/o date/time | 
|---|
| 28 | ..N SDOE S SDOE=$$FNDSDOE^IBDFDE($S(+$G(FORMID("DFN")):+$G(FORMID("DFN")),+$G(IBDF("DFN")):+$G(IBDF("DFN")),1:$G(DFN)),$S(+$G(FORMID("APPT")):+$G(FORMID("APPT")),+$G(IBDF("APPT")):+$G(IBDF("APPT")),1:$G(APPT))) | 
|---|
| 29 | ..Q:$$COMDT^SDCOU(+SDOE)  ;c/o already performed, don't overwrite | 
|---|
| 30 | ..N IBDDFN,IBDAPPT,IBDCLN,IBDCOST | 
|---|
| 31 | ..S IBDDFN=$S(+$G(FORMID("DFN")):+$G(FORMID("DFN")),+$G(IBDF("DFN")):+$G(IBDF("DFN")),1:$G(DFN)) | 
|---|
| 32 | ..S IBDAPPT=$S(+$G(FORMID("APPT")):+$G(FORMID("APPT")),+$G(IBDF("APPT")):+$G(IBDF("APPT")),1:$G(APPT)) | 
|---|
| 33 | ..S IBDCLN=$S(+$G(FORMID("CLINIC")):+$G(FORMID("CLINIC")),+$G(IBDF("CLINIC")):+$G(IBDF("CLINIC")),1:$G(CLN)) | 
|---|
| 34 | ..S IBDCOST=$$STATUS^SDAM1(IBDDFN,IBDAPPT,IBDCLN,$G(^DPT(IBDDFN,0))) Q:$P(IBDCOST,";",5) | 
|---|
| 35 | ..S $P(PXCA("ENCOUNTER"),"^",14)=$E($$HTFM^XLFDT($H),1,12) | 
|---|
| 36 | ; | 
|---|
| 37 | D OTHRBUB | 
|---|
| 38 | Q | 
|---|
| 39 | ; | 
|---|
| 40 | ; | 
|---|
| 41 | OTHRBUB ; -- check procedure and diagnosis node for other bubble, but no data | 
|---|
| 42 | N NODE,CODE | 
|---|
| 43 | S I=0 F  S I=$O(PXCA("PROCEDURE",I)) Q:I=""  S J=0 F  S J=$O(PXCA("PROCEDURE",I,J)) Q:J=""  D | 
|---|
| 44 | .I +$G(PXCA("PROCEDURE",I,J))<1 D  ;no code, may be treatment | 
|---|
| 45 | ..I $P($G(PXCA("PROCEDURE",I,J)),"^",6)["OTHER#" D  ;no code, narr=other | 
|---|
| 46 | ...D LOGERR^IBDF18E2(3579612,.FORMID) | 
|---|
| 47 | ...K PXCA("PROCEDURE",I,J) | 
|---|
| 48 | .I +$G(PXCA("PROCEDURE",I,J)),$P($G(PXCA("PROCEDURE",I,J)),"^",6)["OTHER#" D | 
|---|
| 49 | ..;; --change to api cpt ; dhh | 
|---|
| 50 | ..S CODE=$$CPT^ICPTCOD(CODE) | 
|---|
| 51 | ..S $P(PXCA("PROCEDURE",I,J),"^",6)=$S(+CODE'=-1:$E($P((CODE),"^",3),1,80),1:"") | 
|---|
| 52 | ; | 
|---|
| 53 | S I=0 F  S I=$O(PXCA("DIAGNOSIS/PROBLEM",I)) Q:I=""  S J=0 F  S J=$O(PXCA("DIAGNOSIS/PROBLEM",I,J)) Q:J=""  D | 
|---|
| 54 | .I $P($G(PXCA("DIAGNOSIS/PROBLEM",I,J)),"^",13)="" D | 
|---|
| 55 | ..S $P(PXCA("DIAGNOSIS/PROBLEM",I,J),"^",13)=$E($G(^ICD9(+PXCA("DIAGNOSIS/PROBLEM",I,J),1)),1,79) | 
|---|
| 56 | .I $P($G(PXCA("DIAGNOSIS/PROBLEM",I,J)),"^",13)["OTHER#" D | 
|---|
| 57 | ..S $P(PXCA("DIAGNOSIS/PROBLEM",I,J),"^",13)=$E($G(^ICD9(+PXCA("DIAGNOSIS/PROBLEM",I,J),1)),1,79) | 
|---|
| 58 | Q | 
|---|
| 59 | ; | 
|---|
| 60 | PRO ; -- make sure diagnosis code is added to DIAGNOSIS/PROBLEM node | 
|---|
| 61 | S I=0 F  S I=$O(PXCA("DIAGNOSIS/PROBLEM",I)) Q:I=""  S J=0 F  S J=$O(PXCA("DIAGNOSIS/PROBLEM",I,J)) Q:J=""  D | 
|---|
| 62 | .I $TR($P(PXCA("DIAGNOSIS/PROBLEM",I,J),"^",5,8),"^","")']"",($P(PXCA("DIAGNOSIS/PROBLEM",I,J),"^",2)="") S $P(PXCA("DIAGNOSIS/PROBLEM",I,J),"^",2)="S" D | 
|---|
| 63 | ..D LOGERR^IBDF18E2(3579505,.FORMID,"",+PXCA("DIAGNOSIS/PROBLEM",I,J),"","","",$P(PXCA("DIAGNOSIS/PROBLEM",I,J),"^",13)) | 
|---|
| 64 | .Q:+$P(PXCA("DIAGNOSIS/PROBLEM",I,J),"^") | 
|---|
| 65 | .I +$P(PXCA("DIAGNOSIS/PROBLEM",I,J),"^",3) D | 
|---|
| 66 | ..S IBX=$P(PXCA("DIAGNOSIS/PROBLEM",I,J),"^",3) D | 
|---|
| 67 | ...I $D(^LEX)>1 S X="LEXU" X ^%ZOSF("TEST") I $T S IBX=$$ICDONE^LEXU(IBX) S:$L(IBX)<1 IBX=799.9 Q  ; clinical lexicon next version to be in ^LEX | 
|---|
| 68 | ...S X="GMPTU" X ^%ZOSF("TEST") I $T S IBX=$$ICDONE^GMPTU(IBX) S:$L(IBX)<1 IBX=799.9 Q | 
|---|
| 69 | ...S IBX=799.9 | 
|---|
| 70 | ...Q | 
|---|
| 71 | ..S IBXI=+$O(^ICD9("BA",IBX_" ",0)) I +IBXI<1 S IBXI=+$O(^ICD9("BA",799.9_" ",0)) | 
|---|
| 72 | ..I +IBXI<1 D LOGERR^IBDF18E2(3579506,.FORMID,"",$P(PXCA("DIAGNOSIS/PROBLEM",I,J),"^",3),"","","",$P(PXCA("DIAGNOSIS/PROBLEM",I,J),"^",13)) Q | 
|---|
| 73 | ..S $P(PXCA("DIAGNOSIS/PROBLEM",I,J),"^")=IBXI | 
|---|
| 74 | ..Q | 
|---|
| 75 | .; | 
|---|
| 76 | .; -- set diagnosis code from problem list into piece 1 of array | 
|---|
| 77 | .I +$P(PXCA("DIAGNOSIS/PROBLEM",I,J),"^",4) S $P(PXCA("DIAGNOSIS/PROBLEM",I,J),"^")=$$PROBDIA^IBDFBK3(+$P(PXCA("DIAGNOSIS/PROBLEM",I,J),"^",4)) | 
|---|
| 78 | Q | 
|---|
| 79 | ; | 
|---|
| 80 | CODES ; -- if addt'l codes to pass and qual is prim or sec, send 2nd code | 
|---|
| 81 | N VALUE,IBI,OQLFR | 
|---|
| 82 | S OQLFR=QLFR | 
|---|
| 83 | Q:$G(QLFR)']"" | 
|---|
| 84 | Q:"PRIMARYSECONDARYADD TO PROBLEM LIST"'[$P($G(^IBD(357.98,QLFR,0)),"^") | 
|---|
| 85 | F IBI=3,4 S VALUE=$P($G(^IBD(357.95,FORMTYPE,1,BUB,2)),"^",IBI) Q:'$G(VALUE)  D | 
|---|
| 86 | .N QLFR,TEXT,X,Y | 
|---|
| 87 | .D | 
|---|
| 88 | ..S X=VALUE | 
|---|
| 89 | ..I $G(^ICD9($G(X),0))="" K X S Y="" Q | 
|---|
| 90 | ..E  S Y=$P(^ICD9(X,0),"^",3) | 
|---|
| 91 | .S TEXT=Y | 
|---|
| 92 | .S QLFR=$O(^IBD(357.98,"B",$S($E(OQLFR)="S":"SECONDARY",1:"ADD TO PROBLEM LIST"),0)) | 
|---|
| 93 | .S ITEM=ITEM_"."_IBI | 
|---|
| 94 | .D SETTEMP^IBDF18E1 | 
|---|
| 95 | .S ITEM=$P(ITEM,".") | 
|---|
| 96 | Q | 
|---|
| 97 | ; | 
|---|
| 98 | TRACKING(FORMID) ;get form tracking info,sets FORMID array, which should be passed by reference, return 0 if not found | 
|---|
| 99 | ; | 
|---|
| 100 | S NODE=$G(^IBD(357.96,FORMID,0)) | 
|---|
| 101 | Q:NODE="" 0 | 
|---|
| 102 | S FORMID("APPT")=$P(NODE,"^",3),FORMID("CLINIC")=$P(NODE,"^",10),FORMID("DFN")=$P(NODE,"^",2),FORMID("SOURCE")=$P(NODE,"^",7) | 
|---|
| 103 | Q 1 | 
|---|
| 104 | ; | 
|---|
| 105 | SC ; -- if SC answered yes then all other classifications = null | 
|---|
| 106 | I $P(PXCA("ENCOUNTER"),"^",6) S $P(PXCA("ENCOUNTER"),"^",7,9)="^^" | 
|---|
| 107 | ; | 
|---|
| 108 | ; - If 'no classifications' was bubbled in then all other | 
|---|
| 109 | ;   classifications = null | 
|---|
| 110 | I $P($G(PXCA("IBD NOCLASSIFICATION")),"^",3) S $P(PXCA("ENCOUNTER"),"^",6,10)="^^^^" | 
|---|
| 111 | Q | 
|---|
| 112 | ; | 
|---|
| 113 | INPT(DFN,APPT) ; -- determine inpatient status | 
|---|
| 114 | N INPT | 
|---|
| 115 | S INPT=$P($G(^DPT(+$G(DFN),"S",+$G(APPT),0)),"^",2)="I" | 
|---|
| 116 | Q:'INPT | 
|---|
| 117 | ; | 
|---|
| 118 | ; -- kill erroneous warnings for inpatients | 
|---|
| 119 | I $G(PXCA("WARNING","ENCOUNTER",0,0,6))["SC flag is missing" K PXCA("WARNING","ENCOUNTER",0,0,6) | 
|---|
| 120 | I $G(PXCA("WARNING","ENCOUNTER",0,0,7))["AO flag is missing" K PXCA("WARNING","ENCOUNTER",0,0,7) | 
|---|
| 121 | I $G(PXCA("WARNING","ENCOUNTER",0,0,8))["IR flag is missing" K PXCA("WARNING","ENCOUNTER",0,0,8) | 
|---|
| 122 | I $G(PXCA("WARNING","ENCOUNTER",0,0,9))["EC flag is missing" K PXCA("WARNING","ENCOUNTER",0,0,9) | 
|---|
| 123 | Q | 
|---|
| 124 | MODPXCA ; -- copy CPT Modifier information from TEMP to PXCA | 
|---|
| 125 | ; | 
|---|
| 126 | N MOD,MODX,MODNODE,CODE | 
|---|
| 127 | S CODE=$P($G(TEMP(NODE,FID,ITEM)),"^") | 
|---|
| 128 | S MOD=0 F  S MOD=$O(TEMP(NODE,FID,ITEM,"MODIFIER",MOD)) Q:MOD']""  D | 
|---|
| 129 | . S MODX=TEMP(NODE,FID,ITEM,"MODIFIER",MOD) | 
|---|
| 130 | . S MODNODE=$$MODP^ICPTMOD(CODE,MODX) | 
|---|
| 131 | . S:+MODNODE>0 PXCA(NODE,PROVIDER,NUMBER,MODX)=$$MOD^ICPTMOD(+MODNODE,"I") | 
|---|
| 132 | Q | 
|---|
| 133 | VSTPXCA ; -- copy CPT Modifier information from TEMP to PXCA for Visit | 
|---|
| 134 | ; | 
|---|
| 135 | N I,J,MOD,MODX | 
|---|
| 136 | S I=0 F  S I=$O(TEMP("ENCOUNTER",I)) Q:I']""  D | 
|---|
| 137 | . S J=0 F  S J=$O(TEMP("ENCOUNTER",I,J)) Q:'J  D | 
|---|
| 138 | .. S MOD=0 F  S MOD=$O(TEMP("ENCOUNTER",I,J,"MODIFIER",MOD)) Q:MOD']""  D | 
|---|
| 139 | ... S MODX=TEMP("ENCOUNTER",I,J,"MODIFIER",MOD) | 
|---|
| 140 | ... S PXCA("ENCOUNTER","MODIFIER",MODX)="" | 
|---|
| 141 | K TEMP("ENCOUNTER") | 
|---|
| 142 | Q | 
|---|