| 1 | LRCAPPH1 ;DALOI/SED/RKS/KLL - PROCESS PHLEBOTOMY WORKLOAD DATA CONT ;07/30/04 | 
|---|
| 2 | ;;5.2;LAB SERVICE;**127,136,138,158,263,264,274,291,359,308**;Sep 27, 1994 | 
|---|
| 3 | ; Reference to  ^SC( Supported by DBIA #1482 | 
|---|
| 4 | ; Reference to  $$CODM^ICPTCOD Supported by DBIA #1995-A | 
|---|
| 5 | ; Reference to  $$CPT^ICPTCOD Supported by DBIA #1995-A | 
|---|
| 6 | ; Reference to  $$DATA2PCE^PXAPI Supported by DBIA #1889-A | 
|---|
| 7 | ; Reference to  $$DELVFILE^PXAPI Supported by DBIA #1889-B | 
|---|
| 8 | ; Reference to  ENCEVENT^PXKENC Supported by DBIA #1889-F | 
|---|
| 9 | ; Reference to  $$NOW^XLFDT Supported by Reference #10103 | 
|---|
| 10 | ; Reference to  $$GET^XUA4A72 Supported by Reference #1625 | 
|---|
| 11 | EN3 ;LREDT = PATIENT ENCOUNTER DATE | 
|---|
| 12 | N LREDT,LRNOP,LRBEID | 
|---|
| 13 | K ^TMP("LRPXAPI",$J),LRXTST,LRVSITN,LRXCPT | 
|---|
| 14 | NP ;Not perform entry | 
|---|
| 15 | S:$D(^LRO(69,"AA",LRCEX,LROA)) ^(LROA)="" | 
|---|
| 16 | S LREDT=$P($G(^LRO(69,LRCDT,1,LRSN,1)),U) | 
|---|
| 17 | N LRDUZ | 
|---|
| 18 | Q:+LREDT'>0!('$D(^LR(+NODE,0))#2) | 
|---|
| 19 | S:$G(LRDBUG) LREDT=$$NOW^XLFDT | 
|---|
| 20 | S EDATE=$P(LREDT,".") | 
|---|
| 21 | S:'$P(LREDT,".",2) $P(LREDT,".",2)="1201" | 
|---|
| 22 | S LOC=+$P(NODE,U,9),LRNINS=$P(NODE(1),U,8),LRPRO=+$P(NODE,U,6) ;CHECK | 
|---|
| 23 | S LRDUZ=+$P(NODE,U,2) | 
|---|
| 24 | S LRNINS=$S($P($G(^SC(LOC,0)),U,4):$P(^(0),U,4),$G(LRNINS):LRNINS,1:LRINS) | 
|---|
| 25 | S LRPRO=$S($$GET^XUA4A72(LRPRO,EDATE)>0:LRPRO,1:LRDPRAC) | 
|---|
| 26 | I $S('$G(LOC):1,"CMZ"'[$P($G(^SC(LOC,0)),U,3):1,1:0) Q | 
|---|
| 27 | I $S('DFN:1,'LOC:1,1:0) S:$D(^LRO(69,"AA",LRCEX,LROA)) ^(LROA)=1 S LRNOP=1 Q | 
|---|
| 28 | I 'LRNINS S:$D(^LRO(69,"AA",LRCEX,LROA)) ^(LROA)=2 S LRNOP=2 Q | 
|---|
| 29 | I 'LRPRO S:$D(^LRO(69,"AA",LRCEX,LROA)) ^(LROA)=3 S LRNOP=3 Q | 
|---|
| 30 | Q:$G(LRNP) | 
|---|
| 31 | EN5 ;GET THE CPT CODES FOR THE TESTS | 
|---|
| 32 | I LRCDT,LRSN,$D(^LRO(69,LRCDT,1,LRSN,2,0)) D | 
|---|
| 33 | . S (LRTST,LRCNT,LRXAA)=0 K LRXTST S LRXTST="" | 
|---|
| 34 | . F  S LRTST=$O(^LRO(69,LRCDT,1,LRSN,2,LRTST)) Q:+LRTST'>0  D | 
|---|
| 35 | . . Q:'($D(^LRO(69,LRCDT,1,LRSN,2,LRTST,0))#2)  S LREN5=^(0) | 
|---|
| 36 | . . Q:$S($P(LREN5,U,12):1,$P(LREN5,U,11):1,1:0)  ;Don't send cancel/already sent codes | 
|---|
| 37 | . . S LRTSTP=+$P(LREN5,U),LRAA=+$P(LREN5,U,4) Q:$S('LRTSTP:1,'LRAA:1,1:0) | 
|---|
| 38 | . . ;Turn off old style PCE reporting for CH subscripts. | 
|---|
| 39 | . . ;Data passed via Billing Aware API | 
|---|
| 40 | . . I $P($G(^LRO(68,LRAA,0)),U,2)="CH" Q | 
|---|
| 41 | . . S LRBEID=$P(^LRO(69,LRCDT,1,LRSN,2,LRTST,.3),U) | 
|---|
| 42 | . . I '$G(LRDBUG),$P($G(^LRO(68,LRAA,0)),U,2)'="MI" S $P(^LRO(69,LRCDT,1,LRSN,2,LRTST,0),U,12)=1 | 
|---|
| 43 | . . I 'LRXAA S LRXAA=LRAA D LOC | 
|---|
| 44 | . . Q:'$G(LRDSSID) | 
|---|
| 45 | . . I LRXAA'=LRAA,$D(^TMP("LRPXAPI",$J,"PROCEDURE")) D SEND K ^TMP("LRPXAPI",$J) S LRXAA=LRAA D LOC Q:'$G(LRDSSID)  D EN6 Q | 
|---|
| 46 | . . D EN6 | 
|---|
| 47 | I $D(^TMP("LRPXAPI",$J,"PROCEDURE")),'$G(^LRO(69,"AA",LRCEX,LROA)) D SEND | 
|---|
| 48 | END Q:$G(LRDBUG) | 
|---|
| 49 | END0 K ^TMP("LRPXAPI",$J),LRINA,LRREL,LRNLT,CPT,LRPRO,LRICPT,EDATE,LRTST | 
|---|
| 50 | K I,LOC,LRI,LRCNT,LRSTP,LRNINS,LROK,LRAA,LRXAA,LRDSSID,LREN5,LRXTST | 
|---|
| 51 | K LRNLTN,LRIDT,LRXTSTU,LRXCPT | 
|---|
| 52 | Q | 
|---|
| 53 | EN6 ;Called from LRCAPPNP | 
|---|
| 54 | ;Turn off old style PCE reporting for CH subscripts. | 
|---|
| 55 | ;Data passed via Billing Aware API | 
|---|
| 56 | I $G(LRAA),$P($G(^LRO(68,LRAA,0)),U,2)="CH" Q | 
|---|
| 57 | S:'$D(^LRO(69,LRCDT,1,LRSN,"PCE")) ^("PCE")="" | 
|---|
| 58 | N LRFLG | 
|---|
| 59 | S LRNLT=+$P($G(^LAB(60,LRTSTP,64)),U),LRICPT=0 | 
|---|
| 60 | Q:+LRNLT'>0 | 
|---|
| 61 | Q:'$D(^LAM("AD",LRNLT,"CPT"))  S LRNLTN=$P(^LAM(LRNLT,0),U,2) | 
|---|
| 62 | Q:'LRNLTN | 
|---|
| 63 | F  S LRICPT=$O(^LAM("AD",LRNLT,"CPT",LRICPT)) Q:+LRICPT'>0  S CPT=+$P($G(^LAM(LRNLT,4,LRICPT,0)),U) I CPT,$P(^(0),U,2)="CPT" D | 
|---|
| 64 | . ;CPT must be active in file #64 before edit can continue against #81 | 
|---|
| 65 | . S LRFLG=1 | 
|---|
| 66 | . S LRREL=$P(^LAM(LRNLT,4,LRICPT,0),U,3),LRINA=$P(^(0),U,4) | 
|---|
| 67 | . I LRREL&(LRINA="") S LRFLG=0 | 
|---|
| 68 | . I LRFLG,EDATE>(LRREL-1)&((EDATE<LRINA)!(LRINA="")) S LRFLG=0 | 
|---|
| 69 | . Q:'$G(CPT)!(LRFLG) | 
|---|
| 70 | . I '$P($$CPT^ICPTCOD(CPT,$P(LREDT,"."),,),U,7) S:$D(^LRO(69,"AA",LRCEX,LROA)) ^(LROA)=4 Q | 
|---|
| 71 | . S LRREL=$P(^LAM(LRNLT,4,LRICPT,0),U,3),LRINA=$P(^(0),U,4) | 
|---|
| 72 | . D:LRREL&(LRINA="") SET Q | 
|---|
| 73 | . D:EDATE>(LRREL-1)&((EDATE<LRINA)!(LRINA="")) SET | 
|---|
| 74 | Q | 
|---|
| 75 | LOC ;Called from LRCAPPNP | 
|---|
| 76 | I '$G(LRAA) S LRNOP=4 Q | 
|---|
| 77 | S LRDSSLOC=$S($G(^LRO(68,+LRAA,.8)):+^(.8),1:LRDLOC) | 
|---|
| 78 | I 'LRDSSLOC S:$D(^LRO(69,"AA",LRCEX,LROA)) ^(LROA)=4 S LRNOP=4 Q | 
|---|
| 79 | S LRDSSID=+$P($G(^SC(LRDSSLOC,0)),U,7) | 
|---|
| 80 | I 'LRDSSID S:$D(^LRO(69,"AA",LRCEX,LROA)) ^(LROA)=5 S LRNOP=5 | 
|---|
| 81 | Q | 
|---|
| 82 | SET ;SET IF VALID PROCEDURE | 
|---|
| 83 | I $G(LRNP),'$D(LRNPX(CPT))#2 Q | 
|---|
| 84 | I '$D(^TMP("LRMOD",$J,CPT)) S ^(CPT)="" D | 
|---|
| 85 | . N X | 
|---|
| 86 | . S X=$$CODM^ICPTCOD(CPT,"^TMP(""LRMOD"",$J,CPT)",,) | 
|---|
| 87 | ;LRCNT=CPT POSITION IN TABLE LRXCPT | 
|---|
| 88 | ;LRCCT=LOCATION POSITION IN TABLE LRXCPT | 
|---|
| 89 | I $G(LRXCPT(CPT)) S LRCNT=LRXCPT(CPT) | 
|---|
| 90 | I '$G(LRXCPT(CPT)) S (LRCNT,LRCCT)=$G(LRCCT)+1,LRXCPT(CPT)=LRCCT | 
|---|
| 91 | ;S LRCNT=LRXCPT(CPT) | 
|---|
| 92 | I '$G(LRNP) S LRXCPT(CPT,"P",LRCNT)=1+$G(LRXCPT(CPT,"P",LRCNT)) | 
|---|
| 93 | I $G(LRNP) D | 
|---|
| 94 | . S LRXCPT(CPT,"P",LRCNT)=($G(LRNPX(CPT))-1) | 
|---|
| 95 | . S LRNPX(CPT)=(LRNPX(CPT)-1) | 
|---|
| 96 | S ^TMP("LRPXAPI",$J,"PROCEDURE",LRCNT,"ENC PROVIDER")=LRPRO | 
|---|
| 97 | S ^TMP("LRPXAPI",$J,"PROCEDURE",LRCNT,"PROCEDURE")=CPT | 
|---|
| 98 | I $G(LRNP) D | 
|---|
| 99 | . Q:$G(LRXCPT(CPT,"P",LRCNT))>0 | 
|---|
| 100 | . S LRXCPT(CPT,"P",LRCNT)=1 | 
|---|
| 101 | . S ^TMP("LRPXAPI",$J,"PROCEDURE",LRCNT,"DELETE")=1 | 
|---|
| 102 | S ^TMP("LRPXAPI",$J,"PROCEDURE",LRCNT,"QTY")=$S($G(LRXCPT(CPT,"P",LRCNT)):LRXCPT(CPT,"P",LRCNT),1:1) | 
|---|
| 103 | Q:$G(LRNP) | 
|---|
| 104 | I $G(LRXCPT(CPT,"P",LRCNT))>1,$D(^TMP("LRMOD",$J,CPT,59))>0 D | 
|---|
| 105 | . S ^TMP("LRPXAPI",$J,"PROCEDURE",LRCNT,"MODIFIERS",59)="" | 
|---|
| 106 | ;If Manual CPT coding always set modifier to 59 to force PCE to add CPT code. | 
|---|
| 107 | I $G(LRES) S ^TMP("LRPXAPI",$J,"PROCEDURE",LRCNT,"MODIFIERS",59)="" | 
|---|
| 108 | I $G(LRAA) D | 
|---|
| 109 | .S MOD=$$GMOD^LRBEBA2(LRAA,CPT) | 
|---|
| 110 | .I MOD'="" S ^TMP("LRPXAPI",$J,"PROCEDURE",LRCNT,"MODIFIERS",MOD)="" K MOD | 
|---|
| 111 | S LRXTST(LRTST)=LRNLTN_U_LRTSTP | 
|---|
| 112 | I $G(LRAA),$P($G(^LRO(68,LRAA,0)),U,2)="MI" D | 
|---|
| 113 | . Q:('$D(^TMP("LRPXAPI",$J,"PROCEDURE"))) | 
|---|
| 114 | . ;Get PCE data via Billing Aware API for Microbiology | 
|---|
| 115 | . D MICRO1^LRBEBA3(LRCDT,LRSN,LRTST,LRCNT) | 
|---|
| 116 | . I '$D(^TMP("LRPXAPI",$J,"PROCEDURE")) S ^LRO(69,"AA",LRCEX,LROA)=9 | 
|---|
| 117 | Q | 
|---|
| 118 | SEND ;BUILD ENCOUNTER INFO Called from LRCAPPNP | 
|---|
| 119 | I '$G(LRESCPT) Q:$G(^LRO(69,"AA",$G(LRCEX),$G(LROA))) | 
|---|
| 120 | N LRENCDT ; Check for incorrect time | 
|---|
| 121 | S LRENCDT=$J(LREDT,7,4),LRENCDT(1)=$P(LRENCDT,".",2) | 
|---|
| 122 | S:'LRENCDT(1) LRENCDT(1)=1201 | 
|---|
| 123 | I $E(LRENCDT(1),3,4)>59 S LRENCDT(1)=$E(LRENCDT(1),1,2)_59 | 
|---|
| 124 | I $E(LRENCDT(1),1,2)>23 S LRENCDT(1)=23_$E(LRENCDT(1),3,4) | 
|---|
| 125 | S $P(LRENCDT,".",2)=LRENCDT(1) | 
|---|
| 126 | S ^TMP("LRPXAPI",$J,"ENCOUNTER",1,"DSS ID")=LRDSSID | 
|---|
| 127 | S ^TMP("LRPXAPI",$J,"ENCOUNTER",1,"ENC D/T")=LRENCDT | 
|---|
| 128 | S ^TMP("LRPXAPI",$J,"ENCOUNTER",1,"HOS LOC")=LRDSSLOC | 
|---|
| 129 | S:LRNINS ^TMP("LRPXAPI",$J,"ENCOUNTER",1,"INSTITUTION")=LRNINS | 
|---|
| 130 | S ^TMP("LRPXAPI",$J,"ENCOUNTER",1,"PATIENT")=DFN | 
|---|
| 131 | S ^TMP("LRPXAPI",$J,"ENCOUNTER",1,"SERVICE CATEGORY")="X" | 
|---|
| 132 | S ^TMP("LRPXAPI",$J,"ENCOUNTER",1,"ENCOUNTER TYPE")="A" | 
|---|
| 133 | PCE ;SEND DATA TO PCE | 
|---|
| 134 | N LRLNOW,LRAAX | 
|---|
| 135 | K LRVSITN S (LROK,LRVSITN)="" | 
|---|
| 136 | I $G(LRAA) S LRAAX=$P($G(^LRO(68,LRAA,0)),U,2) | 
|---|
| 137 | I ($G(LRAAX)="CH") S LROK=1,LRVSITN=$G(LRBEVSIT) | 
|---|
| 138 | I ($G(LRAAX)="MI") D | 
|---|
| 139 | . Q:('$D(^TMP("LRPXAPI",$J,"PROCEDURE"))) | 
|---|
| 140 | . ;Get PCE data via Billing Aware API for Microbiology | 
|---|
| 141 | . D MICRO2^LRBEBA3(LRCDT,LRSN) | 
|---|
| 142 | . S LROK=$$DATA2PCE^PXAPI("^TMP(""LRPXAPI"",$J)",LRPKG,"LAB DATA",.LRVSITN,$G(LRDUZ)) | 
|---|
| 143 | . K ^TMP("LRBEDX",$J) | 
|---|
| 144 | I (";AU;BB;CY;EM;SP;"[(";"_$G(LRSS)_";"))!(";AU;BB;CY;EM;SP;"[(";"_$G(LRAAX)_";")) D | 
|---|
| 145 | .S LROK=$$DATA2PCE^PXAPI("^TMP(""LRPXAPI"",$J)",LRPKG,"LAB DATA",.LRVSITN,$G(LRDUZ)) | 
|---|
| 146 | I $G(^XTMP("LRPCELOG",0)) D  ;Used to log/debug contents of ^TMP("LRPXAPI") | 
|---|
| 147 | . F  S LRLNOW=$$NOW^XLFDT Q:'$D(^XTMP("LRPCELOG",1,LRLNOW))  H 1 | 
|---|
| 148 | . S ^XTMP("LRPCELOG",1,LRLNOW,0)=U_$G(LRBEID)_U_$G(LRVSITN) | 
|---|
| 149 | . M ^XTMP("LRPCELOG",1,LRLNOW)=^TMP("LRPXAPI",$J) | 
|---|
| 150 | W:$G(LRDBUG) !,"LROK = ",LROK,!,$G(LRVSITN) | 
|---|
| 151 | Q:$G(LRESCPT) | 
|---|
| 152 | I '$G(LRNP),$D(^LRO(69,LRCDT,1,LRSN,"PCE")) S:LRVSITN ^("PCE")=$E(^("PCE")_$S(LROK>0:LRVSITN,1:LROK)_";",1,30) D | 
|---|
| 153 | . I LROK<1,$D(^LRO(69,"AA",LRCEX,LROA)) S ^(LROA)=LROK | 
|---|
| 154 | EN7 N LRFND,LRPCE | 
|---|
| 155 | Q:'$G(LRNP)!(LROK<1)!('LRVSITN) | 
|---|
| 156 | S LRPCE=$G(^LRO(69,LRCDT,1,LRSN,"PCE")) | 
|---|
| 157 | I '$F(LRPCE,LRVSITN_"-CPT CANC") D | 
|---|
| 158 | . S LRFND=$F(LRPCE,LRVSITN) Q:'LRFND | 
|---|
| 159 | . I LRFND S LRPCE=$E(LRPCE,1,(LRFND-1))_"-CPT CANC"_$E(LRPCE,LRFND,$L(LRPCE)) | 
|---|
| 160 | . S ^LRO(69,LRCDT,1,LRSN,"PCE")=$E(LRPCE,1,30) | 
|---|
| 161 | CHK ;Determine if any CPT code remain on the encounter, then delete encounter if false | 
|---|
| 162 | K ^TMP("PXKENC",$J) | 
|---|
| 163 | D ENCEVENT^PXKENC(LRVSITN,1) | 
|---|
| 164 | I $O(^TMP("PXKENC",$J,LRVSITN,"CPT",0)) K ^TMP("PXKENC",$J) Q | 
|---|
| 165 | S LROK=$$DELVFILE^PXAPI("ALL",$G(LRVSITN),LRPKG,"LAB DATA",0,0,0) | 
|---|
| 166 | K ^TMP("PXKENC",$J) Q:LROK<1 | 
|---|
| 167 | N LRSN | 
|---|
| 168 | S LRSN=0 | 
|---|
| 169 | F  S LRSN=$O(^LRO(69,"C",LRCE,LRCDT,LRSN)) Q:LRSN<1  D DELCAN | 
|---|
| 170 | Q | 
|---|
| 171 | DELCAN ;Mark PCE Encounter number as '-CPT CANC-ENC DEL' | 
|---|
| 172 | ;LRVSITN = Encounter IEN | 
|---|
| 173 | S LRPCE=$G(^LRO(69,LRCDT,1,LRSN,"PCE")) Q:'$L(LRPCE)  D | 
|---|
| 174 | . Q:'$G(LRVSITN) | 
|---|
| 175 | . I $F(LRPCE,LRVSITN_"-CPT CANC-ENC DEL;") Q | 
|---|
| 176 | . S LRFND=$F($G(LRPCE),LRVSITN_"-CPT CANC") I LRFND D  Q | 
|---|
| 177 | . . S LRPCE=$E(LRPCE,1,(LRFND-1))_"-ENC DEL"_$E(LRPCE,LRFND,$L(LRPCE)) | 
|---|
| 178 | . . S ^LRO(69,LRCDT,1,LRSN,"PCE")=$E(LRPCE,1,30) | 
|---|
| 179 | . S LRFND=$F($G(LRPCE),LRVSITN) I LRFND D | 
|---|
| 180 | . . S LRPCE=$E(LRPCE,1,(LRFND-1))_"-CPT CANC-ENC DEL"_$E(LRPCE,LRFND,$L(LRPCE)) | 
|---|
| 181 | . . S ^LRO(69,LRCDT,1,LRSN,"PCE")=$E(LRPCE,1,30) | 
|---|
| 182 | Q | 
|---|
| 183 | TEST ; | 
|---|
| 184 | S:'$G(LRDPRAC) LRDPRAC=DUZ | 
|---|
| 185 | S LRDLOC=+$G(^LAB(69.9,1,.8)) | 
|---|
| 186 | S:'$G(LRPKG) LRPKG=26 S:'$G(LRDBUG) LRDBUG=1 S LRVSIT=2 | 
|---|
| 187 | S:'$G(LRCDT) LRCDT=DT S:'$G(LRSN) LRSN=1 S NODE=^LRO(69,LRCDT,1,LRSN,0) | 
|---|
| 188 | S NODE(1)=^LRO(69,LRCDT,1,LRSN,1) | 
|---|
| 189 | S DFN=$P(^LR(+NODE,0),U,3) | 
|---|
| 190 | D EN3 | 
|---|
| 191 | Q | 
|---|