[613] | 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
|
---|