| 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
 | 
|---|