IMRBKLOD ;HCIOFO/FAI - LABORATORY DATA EXTRACT; 03/09/02  17:45
 ;;2.1;IMMUNOLOGY CASE REGISTRY;**15**;Feb 09, 1998
CHK ; Called from IMRODAT1 routine
 D NOW^%DTC S (ENDDT,X1)=%
 S X2=-40 D C^%DTC S BEGDT=X
 S IMRMI=0,IMRLAB=0,IMRFLG=0
 Q:'$D(^DPT(DFN,"LR"))  ;quit if no lab data for patient
 ; gather data for CHL segment from File 63 (Lab Data)
 ; Restructering the data gathering of patient lab data
 ; 1) Loop through the lab file for all data for that patient and grab
 ; it.
 K ^TMP($J,"IMRBDL")
 S IMRRFN=^DPT(DFN,"LR"),I=0
 S IMRLABTR="CH^MI^"
 I +$G(IMRTRANS) S IMRLABTR=IMRLABTR_"SP^CY^"
 F I=1:1:$S($G(IMRTRANS)=1:7,1:2) S IMRRTYP=$P(IMRLABTR,U,I) Q:IMRRTYP=""  D LAB^IMRBKLOD(IMRRFN,IMRRTYP,IMRSD,IMRED)
 Q
 ;
LAB(IMRRFN,IMRRTYP,IMRSD,IMRED) ;
 ; This routine will Loop thourgh the lab global for the given
 ; type and process the data
 ; IMRRFN=Patient Lab DFN
 ; IMRRTYP=Type of lab test "CH,MI,..."
 ; IMRRD=the date to start the search in a reverse order
 ;
 N I,IMRLCT,IMRRD
 S IMRRD=(9999999-(ENDDT+1))
 S IMRLCT=$P($G(^LR(IMRRFN,IMRRTYP,0)),U,3) Q:IMRLCT=""
 Q:IMRLCT<1
 S IMRLCT=(9999999-IMRLCT)
 F  S IMRRD=$O(^LR(IMRRFN,IMRRTYP,IMRRD)) Q:IMRRD<1  D
 . N IMRDUZ,IMRH,IMRGD
 . I '$D(^LR(IMRRFN,IMRRTYP,IMRRD,0)) Q
 . S IMRGD=9999999-IMRRD
 . S IMRD=+$P($G(^LR(IMRRFN,IMRRTYP,IMRRD,0)),"^",1) S:IMRD>IMRLAB IMRLAB=IMRD
 . S IMRCPD=+$P($G(^LR(IMRRFN,IMRRTYP,IMRRD,0)),"^",3)
 . Q:(IMRCPD<BEGDT)
 . Q:(IMRCPD>ENDDT)
 . S IMRTST=0
 . F  S IMRTST=$O(^LR(IMRRFN,IMRRTYP,IMRRD,IMRTST)) Q:IMRTST'>0  D
 .. S IMRFLG=0 D ARRAY
 .. Q:IMRFLG'=1
 .. I IMRTST'>1 Q
 .. S IMRVAL=$G(^LR(IMRRFN,IMRRTYP,IMRRD,IMRTST))
 .. Q:IMRVAL=""
 .. N IMRLINE,IMRNODE,IMRDD,IMRCDD,IMRDD
 .. I $P(IMRVAL,U)["canc" Q  ; test has been canceled.
 .. I $P(IMRVAL,U)["CANC" Q  ; test has been canceled.
 .. S IMRVALUE=$P(IMRVAL,U,1,2)
 .. S IMRLABT=$O(^LAB(60,"C",(IMRRTYP_";"_IMRTST_";1"),0)) ; get the lab test data name
 .. I IMRLABT="" S IMRLABT="**PANEL**",(IMRNAM,IMRCST,IMRNLAB)=""
 .. E  D
 ... S (IMNLT,IMWKL,IMRNAM,IMRCST,IMRNLAB)=""
 ... S IMRLINE=$G(^LAB(60,IMRLABT,0))
 ... Q:IMRLINE=""
 ... S IMRCST=$$GET1^DIQ(60,IMRLABT,1,"I")
 ... I IMRCST="" S IMRCST="COST UNKNOWN"
 ... S IMRNAM=$$GET1^DIQ(60,IMRLABT,.01,"I")
 ... Q:IMRNAM=""
 ... S IMWKL=$P($G(^LAB(60,IMRLABT,64)),U,1)
 ... S:IMWKL'="" IMNLT=$$GET1^DIQ(64,IMWKL,1,"E")
 ... S:$G(IMNLT)="" IMNLT="NONLT"
 ... D NLAB^IMRUTL ;get national lab name
 ... S IMNLT=$E(IMNLT,1,5) ; get National lab test pointer
 ... Q
 .. D FILE
 .. Q
 . Q
 Q
ARRAY S NUM="" F  S NUM=$O(IMRVALS(NUM)) Q:NUM=""  I IMRTST=NUM S IMRFLG=1 Q
 Q
FILE ; File the code based on IMRRTYP
 K IMRHLDR
 I IMRRTYP="CH" D CHFILE
 I IMRRTYP="SP" D SPFILE
 I IMRRTYP="CY" D CYFILE
 Q
MIFILE ; the MI code to file it in temp
 N IMRX,IMRRX,IMRVALL
 S IMRRD=""
 F  S IMRRD=$O(^LR(IMRRFN,IMRRTYP,IMRRD)) Q:IMRRD=""  D
 .I '$D(^LR(IMRRFN,IMRRTYP,IMRRD,1)) Q
 .S IMRRCD=$G(^LR(IMRRFN,IMRRTYP,IMRRD,1))
 .Q:IMRRCD=""  Q:$P(IMRRCD,U,2)'="F"
 .S IMRRCD=$P(IMRRCD,U)
 .Q:IMRRCD<IMRSD
 .Q:IMRRCD>IMRED
 .S IMRVALL=$G(^LR(IMRRFN,IMRRTYP,IMRRD,0))
 .S IMRRX=IMRRTYP_U_(+$P(IMRVALL,U,1)\1)
 .S IMRRX=IMRRX_U_$P($G(^LAB(61,(+$P(IMRVALL,U,5)),0)),U)_U_$P($G(^LAB(62,(+$P(IMRVALL,U,11)),0)),U)
 .I $D(^LR(IMRRFN,IMRRTYP,IMRRD,1)) S IMRX=1 D BAC^IMRODLB2
 .I $D(^LR(IMRRFN,IMRRTYP,IMRRD,2,0)) S IMRX=2 D GRAM^IMRODLB2
 .I $D(^LR(IMRRFN,IMRRTYP,IMRRD,3,0)) S IMRX=3 D ORG^IMRODLB2
 .I $D(^LR(IMRRFN,IMRRTYP,IMRRD,6,0)) S IMRX=6 D PAR^IMRODLB2
 .I $D(^LR(IMRRFN,IMRRTYP,IMRRD,7,0)) S IMRX=7 D PARRPT^IMRODLB2
 .I $D(^LR(IMRRFN,IMRRTYP,IMRRD,99)) S IMRX=99 D COMSP^IMRODLB2
 S (IMRCHL,IMRSEND)=1
 Q
SPFILE ; the CH code to file it in temp
 S IMRC=IMRC+1,^TMP($J,"IMRX",IMRC)=$S(IMRRTYP="CH":"CHL",1:IMRRTYP)_U_(IMRD\1)_U_IMRNAM_U_IMRTST_U_IMRCST_U_IMRVALUE D LCHK^IMRODATA ;IMRVALUE is 2 pieces; data value and test result flag
 I $G(IMRTRANS)
 S (IMRCHL,IMRSEND)=1
 ; same as CH
 ;
 Q
CYFILE ; the CH code to file it in temp
 S IMRC=IMRC+1,^TMP($J,"IMRX",IMRC)=$S(IMRRTYP="CH":"CHL",1:IMRRTYP)_U_(IMRD\1)_U_IMRNAM_U_IMRTST_U_IMRCST_U_IMRVALUE D LCHK^IMRODATA ;IMRVALUE is 2 pieces; data value and test result flag
 I $G(IMRTRANS)
 S (IMRCHL,IMRSEND)=1
 ; same as CH
 Q
CHFILE ; the CH code to file it in temp
 S IMRC=IMRC+1,^TMP($J,"IMRX",IMRC)=$S(IMRRTYP="CH":"CHL",1:IMRRTYP)_U_(IMRD\1)_U_IMRNAM_U_IMRTST_U_IMRCST_U_IMRVALUE ;IMRVALUE is 2 pieces; data value and test result flag
 S $P(^TMP($J,"IMRX",IMRC),U,8)=IMRNLAB ;national lab name or pointer
 S $P(^TMP($J,"IMRX",IMRC),U,9)=IMNLT ; workload code
 D ^IMRLBTY
 D LCHK^IMRODATA
 I $G(IMRTRANS)
 S (IMRCHL,IMRSEND)=1
 ; piece 2 (IMRD)=date specimen taken
 ; piece 3 (IMRNAM)=name of test
 ; piece 4 (IMRTST)=node of test
 ; piece 5 (IMRCST)=test cost
 ; piece 6 & 7(IMRVALUE)=data value^test result flag
 ; piece 8 (IMRNLAB)=national lab name or pointer
 ; piece 9 (IMNLT)=workload code file 64
 Q
