Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: LRCAPBV

LRCAPBV.m

Go to the documentation of this file.
  1. LRCAPBV ;VA/DALOI/FHS - PROCESS VBECS WORKLOAD API ; 13-Aug-2013 09:15 ; MKK
  1. ;;5.2;LAB SERVICE;**325,1031,401,1033**;NOV 1, 1997
  1. ;
  1. ;Reference to $$FIND1^DIC supported by IA #2051
  1. ;Reference to FILE^DID supported by IA #2052
  1. ;Reference to FILE^DIE supported by IA #2053
  1. ;Reference to GETS^DIQ supported by IA #2056
  1. ;Reference to $$GET^XUA4A72 supported by IA #1625
  1. ;Reference to $$WKLDCAP^VBECA7 supported by IA #4767
  1. ;Reference to UPDTWKLD^VBECA7 supported by IA #4767
  1. EN ;Will only run if VBECS BUNDLE 1.0 is installed.
  1. Q:'($D(^VBEC(6002.01,0)))
  1. BBLOOK ;
  1. LOCK L +^XTMP("BVEC WKLD"):10 G:'$T LOCK
  1. Q:$G(^XTMP("BVEC WKLD",0))=+$H S ^XTMP("BVEC WKLD",0)=+$H
  1. N ANS,ANX
  1. N D1,D2,DFN,ERR,FILE,IEN,LRAA,LRACC,LRADT,LRAN,LRACPABV,LRCC
  1. N LRCDT,LRCNT,LRCTM,LRD65,LRDAA,LRDFN,LRDIV,LRDLOC,LRDPRO,LRDSUF
  1. N LRE655,LREDT,LRERR,LRESCPT,LRFDA,LRFILE,LRFNUM,LRIDT
  1. N LRII,LRIN,LRLD,LRLOG,LRLSS,LRMA,LRNLT,LROA,LROAD,LROAD1,LROAD2
  1. N LROL,LRPKG,LRREC,LRRRL,LRRRL1,LRRRL3,LRRRL4,LRSUF,LRTEC,LRTS
  1. N LRTST,LRTSTP,LRTYPE,LRUG,LRUID,LRUNIT,LRWA,LRWKLAA,LRZCNT,X,Y
  1. N LRCAPBV,LRDPF,LRNP,LRUA,LRRRL2,LRSN,LRSPEC,LRSTATUS,LRVSITN
  1. N LRTSTU,LRTSQA,LRTSTD
  1. GET ;Call VBECS 6002.01 data populating API
  1. S ANS=$$WKLDCAP^VBECA7
  1. G:ANS'=1 END
  1. S LRCAPBV=1,LRESCPT=0
  1. DLOC ;Get default location and provider
  1. D GETS^DIQ(69.9,"1,",".8;617","I","ANS","ERR")
  1. S LRDLOC=$G(ANS(69.9,"1,",.8,"I"))
  1. S LRDPRO=$G(ANS(69.9,"1,",617,"I"))
  1. I $$GET^XUA4A72(LRDPRO)<1 G END
  1. S:'$G(LRIEN) LRIEN=0
  1. LK1 ;Set default values
  1. S LRPKG=$$FIND1^DIC(9.4,"","O","LAB SERVICE","B","","ANS")
  1. I LRPKG<1 S ERR=9.4
  1. S LRDAA=$$FIND1^DIC(68,"","O","BLOOD BANK","B","","ANS")
  1. S:'LRDAA LRDAA=29
  1. S LRD65=$$FIND1^DIC(65,"","B","VBECS1","B","","ANS")
  1. S LRDSUF=$$FIND1^DIC(64.2,"","O","GENERIC","B","","ANS")
  1. I '$G(LRD65) S LRSTATUS="LRD(65 missing",LRERR="Failed lookup" D G END
  1. . S ERR=65 D EUPDATE
  1. TST ;Get default tests names
  1. S LRTSTQA=$$FIND1^DIC(60,,"B","VBEC QA/QC","B",,"ANS")
  1. S LRTSTU=$$FIND1^DIC(60,,"B","VBEC UNIT PROCESSING","B",,"ANS")
  1. S LRTSTD=$$FIND1^DIC(60,,"B","VBEC DONOR","B",,"ANS")
  1. I $S('LRTSTQA:1,'LRTSTU:1,'LRTSTD:1,1:0) D G END
  1. . S ERR=$S('LRTSTQA:"VBEC QA/QC ",'LRTSTU:"VBEC UNIT PROCESSING",1:"VBEC DONOR") D EUPDATE
  1. Q:$G(LRDBUG)
  1. DPROV ;Set default PCE Provider
  1. LOOP ;Find entries with the status of pending.
  1. F S LRIEN=$O(^VBEC(6002.01,"AC","P",LRIEN)) Q:LRIEN<1 D BBDIQ
  1. Q:$G(LRDBUG)
  1. I $D(ZTQUEUED) S ZTREQ="@"
  1. END ;
  1. L -^XTMP("BVEC WKLD")
  1. ;Call VBECS update API
  1. D UPDTWKLD^VBECA7
  1. K LRIEN
  1. Q
  1. BBDIQ ;Gather entry info
  1. I $G(LRDBUG) W !,LRIEN
  1. K ANS,ANX,ERR,FILE,LRFDA
  1. K ^VBEC(6002.01,LRIEN,"ERR")
  1. S FILE=6002.01,IEN=LRIEN_","
  1. D GETS^DIQ(FILE,IEN,"**","IN","ANS","ERR")
  1. D ERR Q:$G(ERR)
  1. S LRFDA(6002.01,LRIEN_",",5)="I"
  1. D FILE^DIE("S","LRFDA","ERR")
  1. D LRAA
  1. Q:$G(ERR)
  1. S:$G(LRWKLAA) (LRMA,LRWA,LRLSS)=LRWKLAA
  1. S LRCDT=$P(ANS(6002.01,LRIEN_",",3,"I"),".")
  1. S LRCTM=$P(ANS(6002.01,LRIEN_",",3,"I"),".",2)
  1. D ^LRCAPV3
  1. K LRFDA S LRFDA(6002.01,LRIEN_",",5)="S"
  1. S LRFDA(6002.01,LRIEN_",",4)=$$NOW^XLFDT
  1. D FILE^DIE("S","LRFDA","ERR")
  1. PCEFILE ;File PCE if outpatient location
  1. Q:$S(LRRRL4="W":0,LRRRL4="O":0,1:1)
  1. I $G(DFN) D
  1. . D EN^LRCAPBV1(LRADT,LRTEC,LRTST,LRDSSLOC,LRDSSID,LRIN,DFN,LRPRO,LRCNT)
  1. Q
  1. ERR ;Check entry for critical data
  1. I $G(ERR) S LRERR="Failed lookup",LRSTATUS="E" D EUPDATE Q
  1. D INIT^LRCAPBB S LRLD="CP"
  1. S ERR=0
  1. TYPE S LRTYPE=$G(ANS(6002.01,IEN,1,"I")) D Q:$G(ERR)
  1. . I '$L(LRTYPE) S ERR=1 D EUPDATE
  1. DIV S LRDIV=+$G(ANS(6002.01,IEN,2,"I")) D Q:$G(ERR)
  1. . I '$D(^DIC(4,+LRDIV,0)) S ERR=2 D EUPDATE
  1. . S LRIN=LRDIV
  1. ADT S (LRADT,LREDT)=$G(ANS(6002.01,IEN,3,"I")) D Q:$G(ERR)
  1. . I LRADT'?7N1"."1N.E S ERR=3 D EUPDATE
  1. . S LRCDT=$P(LRADT,"."),LRCTM=$P(LRADT,".",2)
  1. NLT S LRNLT=$G(ANS(6002.01,IEN,6,"I")) D Q:$G(ERR)
  1. . I '$D(^LAM(LRNLT,0)) S ERR=6 D EUPDATE
  1. SUF S LRSUF=$G(ANS(6002.01,IEN,7,"I")) D Q:$G(ERR)
  1. . S:'LRSUF LRSUF=LRDSUF
  1. . S LRCC=$$NLT^LRCAPBV1(LRNLT,LRSUF) ;Lookup or create NLT code
  1. . D GETS^DIQ(64.2,LRSUF_",",1,"I","ANS","ERR")
  1. . S LRSUF=$P($G(ANS(64.2,LRSUF_",",1,"I")),".",2)
  1. S LRCNT=$G(ANS(6002.01,IEN,8,"I")) I 'LRCNT S LRCNT=1
  1. DFN S DFN=$G(ANS(6002.01,IEN,9,"I")) D I $G(ERR) D EUPDATE Q
  1. . S LRDFN=""
  1. . Q:LRTYPE'="P"
  1. . S LRDFN=$G(^DPT(+DFN,"LR"))
  1. . ;I 'LRDFN S ERR=9 ;RLM 6/12/08 This isn't always an error and the data is evaluated in VBECS prior to transmission
  1. FILE I LRTYPE="U"!(LRTYPE="M") S LRFILE=LRD65_";LRD(65,"
  1. I LRTYPE="D" S LRFILE=LRE655_";LRE("
  1. I LRTYPE="P" S LRFILE=DFN_";DPT("
  1. TEC S LRTEC=$G(ANS(6002.01,IEN,10,"I")) D Q:$G(ERR)
  1. . I '$D(^VA(200,LRTEC,0)) S ERR=10 D EUPDATE
  1. S LRAA=$S($G(LRDAA):LRDAA,1:29),LRAN=""
  1. UID S LRUID=$G(ANS(6002.01,IEN,11,"I")) D Q:$G(ERR)
  1. . I '$L(LRUID) Q
  1. . S LRAA=+$O(^LRO(68,"C",LRUID,0)) Q:LRAA<1
  1. . S LRCDT=$O(^LRO(68,"C",LRUID,LRAA,0))
  1. . S LRAN=$O(^LRO(68,"C",LRUID,LRAA,LRCDT,0))
  1. . S ERR=$S('LRAA:11,'LRAA:11,'LRAN:11,'$D(^LRO(68,LRAA,1,LRCDT,1,LRAN,0)):11,1:0)
  1. . I ERR D EUPDATE
  1. TS K LRTS,LRTST,LRTSTP S LRTS=0
  1. I $G(ANS(6002.01,IEN,12,"I")) S (LRTS,LRTST,LRTSTP)=+$G(ANS(6002.01,IEN,12,"I"))
  1. I 'LRTS D
  1. . I LRTYPE="U" S (LRTS,LRTST,LRTSTP)=LRTSTU
  1. . I LRTYPE="M" S (LRTS,LRTST,LRTSTP)=LRTSTQA
  1. . I LRTYPE="D" S (LRTS,LRTST,LRTSTP)=LRTSTD
  1. ; I 'LRTS,$G(LRAA),$G(LRCDT),$G(LRAN) S (LRTS,LRTST,LRTSTP)=$O(^LRO(68,LRAA,1,LRCDT,1,LRAN,4,0))
  1. D Q:$G(ERR)
  1. . S ERR=0
  1. . ;I '$D(^LAB(60,LRTS,0)) S ERR=12 D EUPDATE ;;RLM 6/12/08 This isn't always an error and the data is evaluated in VBECS prior to transmission
  1. UNIT S LRUNIT=$G(ANS(6002.01,IEN,13,"I")) D Q:ERR
  1. . I LRTYPE="U" S LRFILE=LRD65_";LRD(65," I '$L(LRUNIT) S ERR=13 D EUPDATE
  1. LRDAA S LRWKLAA=$G(ANS(6002.01,IEN,14,"I"))
  1. Q
  1. EUPDATE ;Set error codes into entry
  1. I $D(LRDBUG) W !,ERR
  1. K LRFDA(1)
  1. S:'$G(LRIEN) LRIEN=$O(^VBEC(6002.01,0))
  1. S LRFDA(1,6002.01,LRIEN_",",5)="E"
  1. I $G(ERR) S LRFDA(1,6002.01,LRIEN_",",20)="Field "_ERR_" has an error"
  1. I '$G(ERR) S LRFDA(1,6002.01,LRIEN_",",20)=ERR_" Error"
  1. D FILE^DIE("S","LRFDA(1)","ERRX")
  1. Q
  1. LRAA ;Get accession data
  1. S LRAA=$G(ANS(6002.01,LRIEN_",",14,"I"))
  1. S LRAA=$S($G(LRAA):LRAA,1:LRDAA)
  1. K ANX,ERX
  1. D GETS^DIQ(68,LRAA_",",.19,"I","ANX","ERR")
  1. S LRLD=$G(ANX(68,LRAA_",",.19,"I"))
  1. AA ;Accession Area Information
  1. S (LRMA,LRWA,LRLSS)=LRAA,LRUG=9
  1. I $G(LRAN),$G(LRCDT),$G(LRAA) D
  1. . Q:'$D(^LRO(68,LRAA,1,LRCDT,1,LRAN,0))
  1. . S IEN=LRAN_","_LRCDT_","_LRAA_","
  1. . D GETS^DIQ(68,LRAA_",",.8,"I","ANX","ERX")
  1. . S LRDSSLOC=$G(ANX(68,LRAA_",",.8,"I"))
  1. . S:'LRDSSLOC LRDSSLOC=LRDLOC
  1. . D GETS^DIQ(44,LRDSSLOC_",",8,"I","ANX","ERX")
  1. . S LRDSSID=$G(ANX(44,LRDSSLOC_",",8,"I"))
  1. . S FLD=".01;.02;2;3;4;6;6.5;6.6;6.7;15;92;94"
  1. . D GETS^DIQ(68.02,IEN,FLD,"IN","ANX","ERX")
  1. . D GETS^DIQ(68.05,1_","_IEN,.01,"IN","ANX","ERX")
  1. . D GETS^DIQ(68.04,LRTS_","_IEN,1,"IN","ANX","ERX")
  1. LRAA1 . ;Parse variables
  1. . S LRFILE=$P($G(^LRO(68,LRAA,1,LRCDT,1,LRAN,0)),U,2)
  1. . S LRDFN=$G(ANX(68.02,IEN,.01,"I"))
  1. . D GETS^DIQ(63,LRDFN_",",".02;.03","I","ANX","ERX")
  1. DPF . S LRDPF=$G(ANX(63,LRDFN_",",.02,"I"))
  1. . S DFN=$G(ANX(63,LRDFN_",",.03,"I"))
  1. . D FILE^DID(LRFILE,"","GLOBAL NAME","ANX","ERX")
  1. . I $G(LRDFN),$G(DFN) S LRFILE=DFN_";"_$P(ANX("GLOBAL NAME"),U,2)
  1. ACCES . S LROAD=$G(ANX(68.02,IEN,2,"I"))
  1. . S LROAD1=$G(ANX(68.02,IEN,3,"I"))
  1. . S (LRSN,LROAD2)=$G(ANX(68.02,IEN,4,"I"))
  1. . S LRSPEC=$G(ANX(68.05,1_","_IEN,.01,"I"))
  1. . S LRRRL=$G(ANX(68.02,IEN,6,"I"))
  1. . S (LRPRO,LRRRL1)=$G(ANX(68.02,IEN,6.5,"I"))
  1. . S LRRRL3=$G(ANX(68.02,IEN,6.7,"I"))
  1. . S LRACC=$G(ANX(68.02,IEN,15,"I"))
  1. . S LROL=$G(ANX(68.02,IEN,94,"I"))
  1. . D GETS^DIQ(44,LROL_",","2;9.5","IN","ANX","ERX")
  1. . S LRRRL2=$G(ANX(44,LROL_",",9.5,"I"))
  1. . S LRRRL4=$G(ANX(44,LROL_",",2,"I"))
  1. . S LRIDT=""
  1. URG . S LRUG=$G(ANX(68.04,LRTS_","_IEN,1,"I"))
  1. Q