- LRBEBA21 ;DALOI/JAH/FHS - PROCESS PANEL CPT CODE ;8/10/04
- ;;5.2;LAB SERVICE;**1031**;NOV 1, 1997
- ;
- ;;VA LR Patche(s): 291,359
- ;
- ;Continued LRBEBA2
- ;Process panel test for CPT
- ;Set 13th piece of LRSB(X) to prevent double counting
- EN(LRBE21) ;LRBEAR1(LRBETST,
- ;Returns LRBE21
- ; 0 = process as atomic test
- ; 1 = processed (or will be processed in future) as panel
- N LRI,LRY,LRTST,LRNOP,LRNP,LRPEND,LRCANC,LRBSB,LRFDA,ERR,OK
- N LRBECDT,LRBEEDT,LRORREFN,LRPCECNT,LRBEQTY,LRNOREQ,LRBESTG
- S (LRBE21,LRPCECNT,LRNP,LRNOP,LRPEND,LRCANC)=0
- I $D(LRBEAR1(LRBETST)) D
- . ;must be AMA/billable panel
- . Q:'($D(LRBEPAN(LRBETST)))
- . S LRY=$O(^LRO(69,LRODT,1,LRSN,2,"B",LRBETST,0))
- . Q:'LRY
- . S LRY=LRY_","_LRSN_","_LRODT_","
- . ;canceled test
- . I $$GET1^DIQ(69.03,LRY,8,"I")="CA" K LRY Q
- . S LRBECDT=$$GET1^DIQ(69.03,LRY,22,"I")
- . I 'LRBECDT K LRY Q
- . I '$G(LRBERES) S LRPCECNT=$$GET1^DIQ(69.03,LRY,11,"I")
- . I LRPCECNT K LRY Q
- . S LRORREFN=$$GET1^DIQ(69.03,LRY,6,"I")
- . I $G(ORIEN),LRORREFN'=ORIEN K LRY Q
- . ;check status of atomic tests
- . S LRNOREQ=1
- . S LRBSB=0 F S LRBSB=$O(LRBEAR1(LRBETST,LRBSB)) Q:'LRBSB I $G(LRIDT) D
- . . ;check only 'required' atomic tests
- . . Q:'$D(LRBEAR1(LRBETST,LRBSB,"R"))
- . . S LRTST=+LRBEAR1(LRBETST,LRBSB,"R")
- . . S X=$G(LRBESB(LRBSB)) I 'LRTST S LRTST=+$P($P(X,"^",3),"!",7)
- . . I X="" S X=$G(^LR(LRDFN,LRSS,LRIDT,LRBSB)) S:(X'="") LRBESB(LRBSB)=X S:(X="") X="pending"
- . . ;check for not performed tests
- . . I $P($G(^LRO(68,LRAA,1,LRAD,1,LRAN,4,LRTST,0)),U,6)="*Not Performed" S LRNP=1
- . . ;check for tests already sent to pce
- . . I $P(X,U,13)=1 S LRNOP=1 Q
- . . ;check for cancelled tests
- . . I $P(X,U,1)="canc" S LRCANC=1
- . . ;check for tests still pending
- . . I $P(X,U,1)="pending" S LRPEND=1
- . . S LRNOREQ=0
- . ;quit if any 'required' atomic tests not performed or cancelled
- . Q:((LRNOREQ=0)&(LRNP!LRCANC))
- . ;check for resulted tests in panel with no 'required' tests
- . S OK=0
- . I LRNOREQ S LRBSB=0 F S LRBSB=$O(LRBEAR1(LRBETST,LRBSB)) Q:'LRBSB!($G(LRNP)) D
- . . S X=$G(LRBESB(LRBSB)),LRTST=+$P($P(X,"^",3),"!",7)
- . . I $P(X,U,1)'="",$P(X,U,1)'="canc",$P(X,U,1)'="pending" S OK=1
- . . ;check for not performed tests
- . . I $P($G(^LRO(68,LRAA,1,LRAD,1,LRAN,4,LRTST,0)),U,6)="*Not Performed" S LRNP=1
- . ;quit if no 'required' tests on panel and no resulted tests
- . Q:(LRNOREQ&'OK)
- . ;if not roll-up to PCE, proceed to panel CPT;
- . ;including case where none of atomic tests are 'required' (if results available)
- . I '$G(LRBEROLL) D PANEL^LRBEBA4 I $O(LRBECPT(LRBETST,0)) D
- . . S LRI=0 F S LRI=$O(LRBECPT(LRBETST,LRI)) Q:LRI<1 D
- . . . S LRBECPT=$O(LRBECPT(LRBETST,LRI,0))
- . . . S LRBEMOD=$$GMOD^LRBEBA2(LRAA,LRBECPT)
- . . . S LRBEPOS=DUZ,LRBEQTY=1,LRBEDN=+$O(LRBEAR1(LRBETST,0))
- . . . D GDGX^LRBEBA21(LRBETST,LRBEDN,.LRBEAR,.LRBEAR1,.LRBEDGX)
- . . . S LRBESTG=LRBECPT_U_$G(LRBEMOD)_U_$G(LRBEDGX(LRBETST,1))_U_$G(LRBEDGX(LRBETST,2))_U_$G(LRBEDGX(LRBETST,3))
- . . . S LRBESTG=LRBESTG_U_$G(LRBEDGX(LRBETST,4))_U_LRBECDT_U_LRBEEPRO_U_LRBEOPRO_U_LRBEQTY_U_LRBEPOS
- . . . S LRBESTG=LRBESTG_U_$G(LRBEDGX(LRBETST,5))_U_$G(LRBEDGX(LRBETST,6))_U_$G(LRBEDGX(LRBETST,7))
- . . . S LRBESTG=LRBESTG_U_$G(LRBEDGX(LRBETST,8))_U_LRORREFN
- . . . I $G(LRBECPT(LRBETST,LRI,LRBECPT,"COUNT")) S $P(LRBESTG,U,20)=LRBECPT(LRBETST,LRI,LRBECPT,"COUNT")+1
- . . . S LRBEAR(LRBEDFN,"LRBEDGX",LRI,LRBETST)=LRBESTG
- ;
- Q:$G(LRY)=""
- ;
- ;if PCE rollup, then 'unbundled' in SOP2^LRBEBA2
- I $G(LRBEROLL) D Q
- . K LRBECPT(LRBETST)
- . ;clear 'pending panel' xref
- . S LRFDA(1,69.03,LRY,22.1)=0
- . D FILE^DIE("KS","LRFDA(1)","ERR")
- ;
- ;if no required tests on panel and panel CPT exists, at least one resulted atomic,
- ;then mark panel as processed; retain LRBECPT array for BAWRK^LRBEBA;
- ;set return to "1" to avoid 'unbundled' processing in SOP2^LRBEBA2
- I $O(LRBECPT(LRBETST,0)),LRNOREQ D Q
- . S LRBE21=1
- . D LRSB
- . S LRFDA(1,69.03,LRY,11)=1
- . ;clear 'pending panel' xref
- . S LRFDA(1,69.03,LRY,22.1)=0
- . D FILE^DIE("KS","LRFDA(1)","ERR")
- ;
- ;if no required tests on panel and panel has no CPT or inactive CPT,
- ;then return is "0" for 'unbundled' processing in SOP2^LRBEBA2
- I '$O(LRBECPT(LRBETST,0)),LRNOREQ Q
- ;
- ;if resending (from WORK^LRBEBA4) and panel CPT determined,
- ;then return "1" to avoid 'unbundled' processing in SOP2^LRBEBA2
- I $G(LRBERES)&LRNOP&('LRPEND)&($O(LRBECPT(LRBETST,0))) S LRBE21=1 Q
- ;
- ;if required atomic tests not performed, previously sent, or cancelled,
- ;then return is "0" for 'unbundled' processing in SOP2^LRBEBA2
- I (LRNP!LRNOP!LRCANC) D Q
- . K LRBECPT(LRBETST)
- . ;clear 'pending panel' xref
- . S LRFDA(1,69.03,LRY,22.1)=0
- . D FILE^DIE("KS","LRFDA(1)","ERR")
- ;
- ;if panel has CPT and no required atomic test still pending,
- ;then mark panel as processed; retain LRBECPT array for BAWRK^LRBEBA;
- ;set return to "1" to avoid 'unbundled' processing in SOP2^LRBEBA2
- I $O(LRBECPT(LRBETST,0)),'LRPEND D Q
- . S LRBE21=1
- . D LRSB
- . S LRFDA(1,69.03,LRY,11)=1
- . ;clear 'pending panel' xref
- . S LRFDA(1,69.03,LRY,22.1)=0
- . D FILE^DIE("KS","LRFDA(1)","ERR")
- ;
- ;if panel has no CPT or inactive CPT, but required atomic test still pending,
- ;then set return to "1" to avoid 'unbundled' processing in SOP2^LRBEBA2
- I '$O(LRBECPT(LRBETST,0)),LRPEND D Q
- . S LRBE21=1
- . ;set 'pending panel' xref
- . S LRFDA(1,69.03,LRY,22.1)=1
- . D FILE^DIE("KS","LRFDA(1)","ERR")
- ;
- ;if panel has CPT, but required atomic test still pending,
- ;then kill cpt to avoid transmission to PCE,
- ;set return to "1" to avoid 'unbundled' processing in SOP2^LRBEBA2
- I $O(LRBECPT(LRBETST,0)),LRPEND D
- . S LRBE21=1
- . S LRI=$O(LRBECPT(LRBETST,0)) K LRBEAR(LRBEDFN,"LRBEDGX",LRI,LRBETST)
- . K LRBECPT(LRBETST)
- . ;set 'pending panel' xref
- . S LRFDA(1,69.03,LRY,22.1)=1
- . D FILE^DIE("KS","LRFDA(1)","ERR")
- ;
- Q
- ;
- LRSB ;Set LRBESB(TEST) 13th piece to 1, counted as part of panel.
- ;Set 13th piece of LRBESB(X) to prevent double counting
- N LRSBX
- S LRSBX=0 F S LRSBX=$O(LRBEAR1(LRBETST,LRSBX)) Q:LRSBX<1 D
- . I $D(LRBESB(LRSBX))#2 S $P(LRBESB(LRSBX),U,13)=1
- . I $G(LRIDT),$D(^LR(LRDFN,LRSS,LRIDT,LRSBX)) S $P(^(LRSBX),U,13)=1
- Q
- ;
- GDGX(LRBETST,LRBEDN,LRBEAR,LRBEAR1,LRBEDGX) ; Set diagnosis LRBEDGX
- N LRBEPOV,LRBEPTDT,LRBETNUM
- S (LRBEPOV,LRBETNUM)="" F S LRBEPOV=$O(LRBEAR1(LRBETST,LRBEDN,LRBEPOV)) Q:'LRBEPOV D
- . S LRBEPTDT=$G(LRBEAR1(LRBETST,LRBEDN,LRBEPOV))
- . S LRBETNUM=$G(LRBETNUM)+1,LRBEDGX(LRBETST,LRBETNUM)=$P(LRBEPTDT,U,1)
- Q:$D(LRBEDGX(LRBETST,1))
- N DGX S DGX=0
- F S DGX=$O(LRBEAR(LRBEDFN,"LRBEDGX",LRSAMP,LRSPEC,LRBETST,DGX)) Q:DGX<1 D
- . S LRBETNUM=$G(LRBETNUM)+1,LRBEDGX(LRBETST,LRBETNUM)=DGX
- Q
- GOREF(LRODT,LRSN,LRBEDN,LRBEAR1,LRORREFN) ;
- ;Get the OERR INTERNAL FILE #
- N LRX1,LRBEIEN1,LRBETST
- S LRBETST=""
- F S LRBETST=$O(LRBEAR1(LRBETST)) Q:LRBETST="" D
- .Q:'$D(LRBEAR1(LRBETST,LRBEDN))
- .S LRX1=$O(^LRO(69,LRODT,1,LRSN,2,"B",LRBETST,0))
- .I $G(LRX1) D Q
- ..S LRBEIEN1=LRX1_","_LRSN_","_LRODT_","
- ..S LRORREFN=$$GET1^DIQ(69.03,LRBEIEN1,6,"I")
- .S LRORREFN=""
- Q
- ;
- GMOD(LRBEAA,LRBECPT) ; Get external service modifier
- ;input LRBECPT - ien to #81, not required
- N DIC,LRBEESA,LRBEMOD,MOD,STAT,X,Y
- S LRBEESA=$$GET1^DIQ(68,LRBEAA_",",12,"I"),LRBEMOD=""
- I LRBEESA D
- .S X=90,DIC="^DIC(81.3,",DIC(0)="Z" D ^DIC
- .I +Y<0 K DIC Q
- .S LRBEMOD=$P(Y,U,2),MOD=+Y
- .;if cpt/hcpcs provided, check if modifier is valid to use
- .I $G(LRBECPT) D
- ..S STAT=$$MODP^ICPTMOD(LRBECPT,MOD,"I",DT)
- ..I +STAT=0 S LRBEMOD=""
- Q LRBEMOD
- LRBEBA21 ;DALOI/JAH/FHS - PROCESS PANEL CPT CODE ;8/10/04
- +1 ;;5.2;LAB SERVICE;**1031**;NOV 1, 1997
- +2 ;
- +3 ;;VA LR Patche(s): 291,359
- +4 ;
- +5 ;Continued LRBEBA2
- +6 ;Process panel test for CPT
- +7 ;Set 13th piece of LRSB(X) to prevent double counting
- EN(LRBE21) ;LRBEAR1(LRBETST,
- +1 ;Returns LRBE21
- +2 ; 0 = process as atomic test
- +3 ; 1 = processed (or will be processed in future) as panel
- +4 NEW LRI,LRY,LRTST,LRNOP,LRNP,LRPEND,LRCANC,LRBSB,LRFDA,ERR,OK
- +5 NEW LRBECDT,LRBEEDT,LRORREFN,LRPCECNT,LRBEQTY,LRNOREQ,LRBESTG
- +6 SET (LRBE21,LRPCECNT,LRNP,LRNOP,LRPEND,LRCANC)=0
- +7 IF $DATA(LRBEAR1(LRBETST))
- Begin DoDot:1
- +8 ;must be AMA/billable panel
- +9 IF '($DATA(LRBEPAN(LRBETST)))
- QUIT
- +10 SET LRY=$ORDER(^LRO(69,LRODT,1,LRSN,2,"B",LRBETST,0))
- +11 IF 'LRY
- QUIT
- +12 SET LRY=LRY_","_LRSN_","_LRODT_","
- +13 ;canceled test
- +14 IF $$GET1^DIQ(69.03,LRY,8,"I")="CA"
- KILL LRY
- QUIT
- +15 SET LRBECDT=$$GET1^DIQ(69.03,LRY,22,"I")
- +16 IF 'LRBECDT
- KILL LRY
- QUIT
- +17 IF '$GET(LRBERES)
- SET LRPCECNT=$$GET1^DIQ(69.03,LRY,11,"I")
- +18 IF LRPCECNT
- KILL LRY
- QUIT
- +19 SET LRORREFN=$$GET1^DIQ(69.03,LRY,6,"I")
- +20 IF $GET(ORIEN)
- IF LRORREFN'=ORIEN
- KILL LRY
- QUIT
- +21 ;check status of atomic tests
- +22 SET LRNOREQ=1
- +23 SET LRBSB=0
- FOR
- SET LRBSB=$ORDER(LRBEAR1(LRBETST,LRBSB))
- IF 'LRBSB
- QUIT
- IF $GET(LRIDT)
- Begin DoDot:2
- +24 ;check only 'required' atomic tests
- +25 IF '$DATA(LRBEAR1(LRBETST,LRBSB,"R"))
- QUIT
- +26 SET LRTST=+LRBEAR1(LRBETST,LRBSB,"R")
- +27 SET X=$GET(LRBESB(LRBSB))
- IF 'LRTST
- SET LRTST=+$PIECE($PIECE(X,"^",3),"!",7)
- +28 IF X=""
- SET X=$GET(^LR(LRDFN,LRSS,LRIDT,LRBSB))
- IF (X'="")
- SET LRBESB(LRBSB)=X
- IF (X="")
- SET X="pending"
- +29 ;check for not performed tests
- +30 IF $PIECE($GET(^LRO(68,LRAA,1,LRAD,1,LRAN,4,LRTST,0)),U,6)="*Not Performed"
- SET LRNP=1
- +31 ;check for tests already sent to pce
- +32 IF $PIECE(X,U,13)=1
- SET LRNOP=1
- QUIT
- +33 ;check for cancelled tests
- +34 IF $PIECE(X,U,1)="canc"
- SET LRCANC=1
- +35 ;check for tests still pending
- +36 IF $PIECE(X,U,1)="pending"
- SET LRPEND=1
- +37 SET LRNOREQ=0
- End DoDot:2
- +38 ;quit if any 'required' atomic tests not performed or cancelled
- +39 IF ((LRNOREQ=0)&(LRNP!LRCANC))
- QUIT
- +40 ;check for resulted tests in panel with no 'required' tests
- +41 SET OK=0
- +42 IF LRNOREQ
- SET LRBSB=0
- FOR
- SET LRBSB=$ORDER(LRBEAR1(LRBETST,LRBSB))
- IF 'LRBSB!($GET(LRNP))
- QUIT
- Begin DoDot:2
- +43 SET X=$GET(LRBESB(LRBSB))
- SET LRTST=+$PIECE($PIECE(X,"^",3),"!",7)
- +44 IF $PIECE(X,U,1)'=""
- IF $PIECE(X,U,1)'="canc"
- IF $PIECE(X,U,1)'="pending"
- SET OK=1
- +45 ;check for not performed tests
- +46 IF $PIECE($GET(^LRO(68,LRAA,1,LRAD,1,LRAN,4,LRTST,0)),U,6)="*Not Performed"
- SET LRNP=1
- End DoDot:2
- +47 ;quit if no 'required' tests on panel and no resulted tests
- +48 IF (LRNOREQ&'OK)
- QUIT
- +49 ;if not roll-up to PCE, proceed to panel CPT;
- +50 ;including case where none of atomic tests are 'required' (if results available)
- +51 IF '$GET(LRBEROLL)
- DO PANEL^LRBEBA4
- IF $ORDER(LRBECPT(LRBETST,0))
- Begin DoDot:2
- +52 SET LRI=0
- FOR
- SET LRI=$ORDER(LRBECPT(LRBETST,LRI))
- IF LRI<1
- QUIT
- Begin DoDot:3
- +53 SET LRBECPT=$ORDER(LRBECPT(LRBETST,LRI,0))
- +54 SET LRBEMOD=$$GMOD^LRBEBA2(LRAA,LRBECPT)
- +55 SET LRBEPOS=DUZ
- SET LRBEQTY=1
- SET LRBEDN=+$ORDER(LRBEAR1(LRBETST,0))
- +56 DO GDGX^LRBEBA21(LRBETST,LRBEDN,.LRBEAR,.LRBEAR1,.LRBEDGX)
- +57 SET LRBESTG=LRBECPT_U_$GET(LRBEMOD)_U_$GET(LRBEDGX(LRBETST,1))_U_$GET(LRBEDGX(LRBETST,2))_U_$GET(LRBEDGX(LRBETST,3))
- +58 SET LRBESTG=LRBESTG_U_$GET(LRBEDGX(LRBETST,4))_U_LRBECDT_U_LRBEEPRO_U_LRBEOPRO_U_LRBEQTY_U_LRBEPOS
- +59 SET LRBESTG=LRBESTG_U_$GET(LRBEDGX(LRBETST,5))_U_$GET(LRBEDGX(LRBETST,6))_U_$GET(LRBEDGX(LRBETST,7))
- +60 SET LRBESTG=LRBESTG_U_$GET(LRBEDGX(LRBETST,8))_U_LRORREFN
- +61 IF $GET(LRBECPT(LRBETST,LRI,LRBECPT,"COUNT"))
- SET $PIECE(LRBESTG,U,20)=LRBECPT(LRBETST,LRI,LRBECPT,"COUNT")+1
- +62 SET LRBEAR(LRBEDFN,"LRBEDGX",LRI,LRBETST)=LRBESTG
- End DoDot:3
- End DoDot:2
- End DoDot:1
- +63 ;
- +64 IF $GET(LRY)=""
- QUIT
- +65 ;
- +66 ;if PCE rollup, then 'unbundled' in SOP2^LRBEBA2
- +67 IF $GET(LRBEROLL)
- Begin DoDot:1
- +68 KILL LRBECPT(LRBETST)
- +69 ;clear 'pending panel' xref
- +70 SET LRFDA(1,69.03,LRY,22.1)=0
- +71 DO FILE^DIE("KS","LRFDA(1)","ERR")
- End DoDot:1
- QUIT
- +72 ;
- +73 ;if no required tests on panel and panel CPT exists, at least one resulted atomic,
- +74 ;then mark panel as processed; retain LRBECPT array for BAWRK^LRBEBA;
- +75 ;set return to "1" to avoid 'unbundled' processing in SOP2^LRBEBA2
- +76 IF $ORDER(LRBECPT(LRBETST,0))
- IF LRNOREQ
- Begin DoDot:1
- +77 SET LRBE21=1
- +78 DO LRSB
- +79 SET LRFDA(1,69.03,LRY,11)=1
- +80 ;clear 'pending panel' xref
- +81 SET LRFDA(1,69.03,LRY,22.1)=0
- +82 DO FILE^DIE("KS","LRFDA(1)","ERR")
- End DoDot:1
- QUIT
- +83 ;
- +84 ;if no required tests on panel and panel has no CPT or inactive CPT,
- +85 ;then return is "0" for 'unbundled' processing in SOP2^LRBEBA2
- +86 IF '$ORDER(LRBECPT(LRBETST,0))
- IF LRNOREQ
- QUIT
- +87 ;
- +88 ;if resending (from WORK^LRBEBA4) and panel CPT determined,
- +89 ;then return "1" to avoid 'unbundled' processing in SOP2^LRBEBA2
- +90 IF $GET(LRBERES)&LRNOP&('LRPEND)&($ORDER(LRBECPT(LRBETST,0)))
- SET LRBE21=1
- QUIT
- +91 ;
- +92 ;if required atomic tests not performed, previously sent, or cancelled,
- +93 ;then return is "0" for 'unbundled' processing in SOP2^LRBEBA2
- +94 IF (LRNP!LRNOP!LRCANC)
- Begin DoDot:1
- +95 KILL LRBECPT(LRBETST)
- +96 ;clear 'pending panel' xref
- +97 SET LRFDA(1,69.03,LRY,22.1)=0
- +98 DO FILE^DIE("KS","LRFDA(1)","ERR")
- End DoDot:1
- QUIT
- +99 ;
- +100 ;if panel has CPT and no required atomic test still pending,
- +101 ;then mark panel as processed; retain LRBECPT array for BAWRK^LRBEBA;
- +102 ;set return to "1" to avoid 'unbundled' processing in SOP2^LRBEBA2
- +103 IF $ORDER(LRBECPT(LRBETST,0))
- IF 'LRPEND
- Begin DoDot:1
- +104 SET LRBE21=1
- +105 DO LRSB
- +106 SET LRFDA(1,69.03,LRY,11)=1
- +107 ;clear 'pending panel' xref
- +108 SET LRFDA(1,69.03,LRY,22.1)=0
- +109 DO FILE^DIE("KS","LRFDA(1)","ERR")
- End DoDot:1
- QUIT
- +110 ;
- +111 ;if panel has no CPT or inactive CPT, but required atomic test still pending,
- +112 ;then set return to "1" to avoid 'unbundled' processing in SOP2^LRBEBA2
- +113 IF '$ORDER(LRBECPT(LRBETST,0))
- IF LRPEND
- Begin DoDot:1
- +114 SET LRBE21=1
- +115 ;set 'pending panel' xref
- +116 SET LRFDA(1,69.03,LRY,22.1)=1
- +117 DO FILE^DIE("KS","LRFDA(1)","ERR")
- End DoDot:1
- QUIT
- +118 ;
- +119 ;if panel has CPT, but required atomic test still pending,
- +120 ;then kill cpt to avoid transmission to PCE,
- +121 ;set return to "1" to avoid 'unbundled' processing in SOP2^LRBEBA2
- +122 IF $ORDER(LRBECPT(LRBETST,0))
- IF LRPEND
- Begin DoDot:1
- +123 SET LRBE21=1
- +124 SET LRI=$ORDER(LRBECPT(LRBETST,0))
- KILL LRBEAR(LRBEDFN,"LRBEDGX",LRI,LRBETST)
- +125 KILL LRBECPT(LRBETST)
- +126 ;set 'pending panel' xref
- +127 SET LRFDA(1,69.03,LRY,22.1)=1
- +128 DO FILE^DIE("KS","LRFDA(1)","ERR")
- End DoDot:1
- +129 ;
- +130 QUIT
- +131 ;
- LRSB ;Set LRBESB(TEST) 13th piece to 1, counted as part of panel.
- +1 ;Set 13th piece of LRBESB(X) to prevent double counting
- +2 NEW LRSBX
- +3 SET LRSBX=0
- FOR
- SET LRSBX=$ORDER(LRBEAR1(LRBETST,LRSBX))
- IF LRSBX<1
- QUIT
- Begin DoDot:1
- +4 IF $DATA(LRBESB(LRSBX))#2
- SET $PIECE(LRBESB(LRSBX),U,13)=1
- +5 IF $GET(LRIDT)
- IF $DATA(^LR(LRDFN,LRSS,LRIDT,LRSBX))
- SET $PIECE(^(LRSBX),U,13)=1
- End DoDot:1
- +6 QUIT
- +7 ;
- GDGX(LRBETST,LRBEDN,LRBEAR,LRBEAR1,LRBEDGX) ; Set diagnosis LRBEDGX
- +1 NEW LRBEPOV,LRBEPTDT,LRBETNUM
- +2 SET (LRBEPOV,LRBETNUM)=""
- FOR
- SET LRBEPOV=$ORDER(LRBEAR1(LRBETST,LRBEDN,LRBEPOV))
- IF 'LRBEPOV
- QUIT
- Begin DoDot:1
- +3 SET LRBEPTDT=$GET(LRBEAR1(LRBETST,LRBEDN,LRBEPOV))
- +4 SET LRBETNUM=$GET(LRBETNUM)+1
- SET LRBEDGX(LRBETST,LRBETNUM)=$PIECE(LRBEPTDT,U,1)
- End DoDot:1
- +5 IF $DATA(LRBEDGX(LRBETST,1))
- QUIT
- +6 NEW DGX
- SET DGX=0
- +7 FOR
- SET DGX=$ORDER(LRBEAR(LRBEDFN,"LRBEDGX",LRSAMP,LRSPEC,LRBETST,DGX))
- IF DGX<1
- QUIT
- Begin DoDot:1
- +8 SET LRBETNUM=$GET(LRBETNUM)+1
- SET LRBEDGX(LRBETST,LRBETNUM)=DGX
- End DoDot:1
- +9 QUIT
- GOREF(LRODT,LRSN,LRBEDN,LRBEAR1,LRORREFN) ;
- +1 ;Get the OERR INTERNAL FILE #
- +2 NEW LRX1,LRBEIEN1,LRBETST
- +3 SET LRBETST=""
- +4 FOR
- SET LRBETST=$ORDER(LRBEAR1(LRBETST))
- IF LRBETST=""
- QUIT
- Begin DoDot:1
- +5 IF '$DATA(LRBEAR1(LRBETST,LRBEDN))
- QUIT
- +6 SET LRX1=$ORDER(^LRO(69,LRODT,1,LRSN,2,"B",LRBETST,0))
- +7 IF $GET(LRX1)
- Begin DoDot:2
- +8 SET LRBEIEN1=LRX1_","_LRSN_","_LRODT_","
- +9 SET LRORREFN=$$GET1^DIQ(69.03,LRBEIEN1,6,"I")
- End DoDot:2
- QUIT
- +10 SET LRORREFN=""
- End DoDot:1
- +11 QUIT
- +12 ;
- GMOD(LRBEAA,LRBECPT) ; Get external service modifier
- +1 ;input LRBECPT - ien to #81, not required
- +2 NEW DIC,LRBEESA,LRBEMOD,MOD,STAT,X,Y
- +3 SET LRBEESA=$$GET1^DIQ(68,LRBEAA_",",12,"I")
- SET LRBEMOD=""
- +4 IF LRBEESA
- Begin DoDot:1
- +5 SET X=90
- SET DIC="^DIC(81.3,"
- SET DIC(0)="Z"
- DO ^DIC
- +6 IF +Y<0
- KILL DIC
- QUIT
- +7 SET LRBEMOD=$PIECE(Y,U,2)
- SET MOD=+Y
- +8 ;if cpt/hcpcs provided, check if modifier is valid to use
- +9 IF $GET(LRBECPT)
- Begin DoDot:2
- +10 SET STAT=$$MODP^ICPTMOD(LRBECPT,MOD,"I",DT)
- +11 IF +STAT=0
- SET LRBEMOD=""
- End DoDot:2
- End DoDot:1
- +12 QUIT LRBEMOD