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

HDISDOCL.m

Go to the documentation of this file.
  1. HDISDOCL ;BPFO/DTG - COLLECT LABORTORY ITEMS FOR SDO LIST; Apr 07, 2018@12:42
  1. ;;1.0;HEALTH DATA & INFORMATICS;**22**;Feb 22, 2005;Build 26
  1. ;
  1. ; ICR's:
  1. ; 6901 - HDI READ LABORATORY SERVICE LABORATORY TEST FILE (#60)
  1. ; 6902 - HDI READ MASTER LABORATORY TEST FILE (#66.3)
  1. ;
  1. Q
  1. ;
  1. ;bump tmp counter
  1. BTMP() ;
  1. N F
  1. S F=$G(@TMP@(0)),F=F+1,@TMP@(0)=F
  1. Q F
  1. ;
  1. LEN ; lab entry point
  1. ;
  1. ; LAB TEST IEN, TEST NAME .01, TEST INACTIVE DATE 133, TEST INACTIVE STATUS 132, TEST TYPE 3,
  1. ; PANEL 200 SUB MULTIPLE, LOCATION DATA NAME #5,13, SITE/SPECIMEN 100, SITE/SPECIMEN IEN, R/S NAME .01,
  1. ; RESULT/SPECIMEN 33, R/S STATUS 32, MLTF PTR 30
  1. ; 66.3
  1. ; IEN, NAME .01, STATUS, LOINC CODE .04, ALT TEST NAME .02
  1. ;
  1. N DA,DR,DIR,I,D,B,DIQ,DIC,ORDNM,ORIEN,ORIDT,ORST,PLIEN,PLNAME,PLPN,LT,LG,LB,LC,LRUN,LRIEN,LRNAME,LRMLIDT
  1. N LRTYPE,LRDAT,LRDAP,LRSTAT,LRIDT,LRSPEC,LRSPN,LRSUN,LRSST,LRSIDT,LRMLTF,LRMLNM,LRMLAN,LRMLLON,LTMP,LRMLSTAT
  1. N LRMLCOM,LRMLPROP,LRMLTIM,LRMLSPEC,LRMLSCAL,LRMLMET,L60,LPRI,LE,LF,PNLNN
  1. N LTCNT,BA,LRAA,AA,AR,AB,ABC
  1. ; initialize vars to avoid undef
  1. S (DA,DR,DIR,I,D,B,DIQ,DIC,ORDNM,ORIEN,ORIDT,ORST,PLIEN,PLNAME,PLPN,LT,LG,LB,LC,LRUN,LRIEN,LRNAME,LRMLIDT)=""
  1. S (LRTYPE,LRDAT,LRDAP,LRSTAT,LRIDT,LRSPEC,LRSPN,LRSUN,LRSST,LRSIDT,LRMLTF,LRMLNM,LRMLAN,LRMLLON,LRMLSTAT)=""
  1. S (LRMLCOM,LRMLPROP,LRMLTIM,LRMLSPEC,LRMLSCAL,LRMLMET,L60,LPRI,LE,LF)=""
  1. ; get info from 101.43
  1. ;
  1. S L60=$$ORDI^HDISDOC(LAM),LPRI=L60
  1. ;
  1. S (PLIEN,DA)=L60,PLPN="NO",LT="",LTMP="^TMP(""HDILAB1"",$J)" K @LTMP K DD
  1. ; check if 60 IEN
  1. I 'L60 D G LQUIT
  1. . S (PLIEN,PLNAME,PLPN)=""
  1. . S (LRIEN,LRNAME,LRTYPE,LRDAT,LRDAP,LRIDT,LRSTAT)=""
  1. . S (LRSPEC,LRSPN,LRSUN,LRSIDT,LRSST)=""
  1. . S (LRMLTF,LRMLNM,LRMLAN,LRMLIDT,LRMLSTAT,LRMLLON,LRMLCOM,LRMLPROP,LRMLTIM,LRMLSPEC,LRMLSCAL,LRMLMET)=""
  1. . D LH60P,LB60P,LH60T,LB60T,LH6001,LB6001,LH663,LB663,LT663,LT6001,LT60T
  1. . S HDIERAR=HDIERAR_$S(HDIERAR'="":",",1:"")_8
  1. . I $G(HDIERR)'="" S D=$G(@HDIERR@(0)),D=D+1,@HDIERR@(0)=D,@HDIERR@(D)="Orderable Item File Does Not Have a Lab File Number Associated. "_LAM_":"_ORDNM
  1. ;
  1. S A=$$GET1^DIQ(60,L60_",",.01) I A="" D G LQUIT
  1. . S (PLIEN,PLNAME,PLPN)=""
  1. . S (LRIEN,LRNAME,LRTYPE,LRDAT,LRDAP,LRIDT,LRSTAT)=""
  1. . S (LRSPEC,LRSPN,LRSUN,LRSIDT,LRSST)=""
  1. . S (LRMLTF,LRMLNM,LRMLAN,LRMLIDT,LRMLSTAT,LRMLLON,LRMLCOM,LRMLPROP,LRMLTIM,LRMLSPEC,LRMLSCAL,LRMLMET)=""
  1. . D LH60P,LB60P,LH60T,LB60T,LH6001,LB6001,LH663,LB663,LT663,LT6001,LT60T
  1. . S HDIERAR=HDIERAR_$S(HDIERAR'="":",",1:"")_9
  1. . I $G(HDIERR)'="" S D=$G(@HDIERR@(0)),D=D+1,@HDIERR@(0)=D,@HDIERR@(D)="Orderable Item Lab Pointer Not Found in Lab File. "_LAM_":"_ORDNM_":"_L60
  1. ;
  1. ;build array
  1. ; first determine if panel
  1. K BA D LIST^DIC(60.02,","_L60_",","@;.01I","",,,,,,,"BA")
  1. S A=$O(BA("DILIST","ID",0)) I A S PLPN="YES"
  1. K PNLNN,BA
  1. D PNLCK(PLIEN),GETLAB(PLIEN)
  1. S PLNAME=$$CHKCHAR($G(LC(.01,"E")))
  1. I $G(HDICNT)'="" D ;<
  1. . S L=@HDICNT,K=$P(L,U,5),K=K+1,$P(L,U,5)=K
  1. . I PLPN="YES" S K=$P(L,U,6),K=K+1,$P(L,U,6)=K
  1. . S @HDICNT=L
  1. D LH60P,LB60P
  1. ; go through the test array
  1. S (LRIEN,LRNAME,LRTYPE,LRDAT,LRDAP,LRSTAT,LRIDT,LRSPEC,LRSPN,LRSUN,LRSST,LRSIDT,LRMLTF,LRMLNM,LRMLAN,LRMLSTAT)=""
  1. S LRMLLON="N/F",(LRMLCOM,LRMLPROP,LRMLTIM,LRMLSPEC,LRMLSCAL,LRMLMET)=""
  1. S A=$O(@LTMP@(0)) I 'A D G LQUIT
  1. . S (LRIEN,LRNAME,LRTYPE,LRDAT,LRDAP,LRIDT,LRSTAT)=""
  1. . S (LRSPEC,LRSPN,LRSUN,LRSIDT,LRSST)=""
  1. . S (LRMLTF,LRMLNM,LRMLAN,LRMLIDT,LRMLSTAT,LRMLLON,LRMLCOM,LRMLPROP,LRMLTIM,LRMLSPEC,LRMLSCAL,LRMLMET)=""
  1. . D LH60T,LB60T,LH6001,LB6001,LH663,LB663,LT663,LT6001,LT60T
  1. ;
  1. S LRUN=0
  1. LRT S LRUN=$O(@LTMP@(LRUN)) I 'LRUN G LQUIT
  1. D GETLAB(LRUN) S LRIEN=LRUN,LRNAME=$$CHKCHAR($G(LC(.01,"E"))),LRTYPE=$G(LC(3,"E"))
  1. S LRDAT=$G(LC(5,"I")),LRDAP=$G(LC(13,"I"))
  1. S A=$G(LC(132,"I")),LRSTAT=$S(A="Y":1,1:0),A=$G(LC(133,"I")),LRIDT="" I A S LRIDT=$$FMTE^XLFDT(A,5)
  1. I $G(HDICNT)'="" D ;<
  1. . S L=@HDICNT,K=$P(L,U,7),K=K+1,$P(L,U,7)=K
  1. . I LRIDT'="" S K=$P(L,U,8),K=K+1,$P(L,U,8)=K
  1. . S @HDICNT=L
  1. . ; collect unique tests for count
  1. . S @TMPCT@("T",LRUN)=""
  1. D LH60T,LB60T
  1. ; check specimens
  1. S (LRSPEC,LRSPN,LRSUN,LRSST,LRSIDT,LRMLTF,LRMLNM,LRMLAN,LRMLSTAT,LRMLIDT)=""
  1. S LRMLLON="N/F"
  1. ; S A=$$GET1^DIQ(60,L60_",",.01) I A="" D G LRT
  1. K AA D LIST^DIC(60.01,","_LRUN_",","@;.001I","Q",,,,,,,"AA")
  1. S A=0,A=$O(AA("DILIST",2,A)) I 'A D G LRT
  1. . S (LRSPEC,LRSPN,LRSUN,LRSIDT,LRSST)=""
  1. . S (LRMLTF,LRMLNM,LRMLAN,LRMLIDT,LRMLSTAT,LRMLLON,LRMLCOM,LRMLPROP,LRMLTIM,LRMLSPEC,LRMLSCAL,LRMLMET)=""
  1. . D LH6001,LB6001,LH663,LB663,LT663,LT6001,LT60T
  1. ;
  1. S LRSPEC=0
  1. K LRAA S A=0 F S A=$O(AA("DILIST",2,A)) Q:'A S LRAA($G(AA("DILIST",2,A)))=""
  1. LRS ;S LRSPEC=$O(^LAB(60,LRUN,1,LRSPEC)) I 'LRSPEC D LT60T G LRT
  1. S LRSPEC=$O(LRAA(LRSPEC)) I 'LRSPEC D LT60T G LRT
  1. D GETSPEC(LRUN,LRSPEC)
  1. S LRSPN=$$CHKCHAR($G(LE(.01,"E"))),LRSUN=$G(LE(6,"E")),B=$G(LE(32,"I")),LRSST=$S(B="Y":1,1:"0")
  1. S B=$G(LE(33,"I")),LRSIDT="" I B S LRSIDT=$$FMTE^XLFDT(B,5)
  1. S LRMLTF=$G(LE(30,"I"))
  1. I $G(HDICNT)'="" D ;<
  1. . S L=@HDICNT,K=$P(L,U,9),K=K+1,$P(L,U,9)=K
  1. . I LRSIDT'="" S K=$P(L,U,10),K=K+1,$P(L,U,10)=K
  1. . S @HDICNT=L
  1. D LH6001,LB6001
  1. I LRMLTF D ;<
  1. . D GETMLTF(LRMLTF)
  1. . S LRMLNM=$$CHKCHAR($G(LF(.01,"E"))),LRMLAN=$$CHKCHAR($G(LF(.02,"E"))),LRMLLON=$G(LF(.04,"I")) S:LRMLLON="" LRMLLON="N/F"
  1. . S LRMLCOM=$$CHKCHAR($G(LF(.05,"E"))),LRMLPROP=$$CHKCHAR($G(LF(.06,"E"))),LRMLTIM=$$CHKCHAR($G(LF(.07,"E")))
  1. . S LRMLSPEC=$$CHKCHAR($G(LF(.08,"E"))),LRMLSCAL=$$CHKCHAR($G(LF(.09,"E"))),LRMLMET=$$CHKCHAR($G(LF(1,"E")))
  1. . ; get status
  1. . N DA,AA,LXH,A,B,C S DA=LRMLTF D LIST^DIC(66.399,","_DA_",","@;.01IE;.02IE","",,,,,,,"AA")
  1. . K LXH M LXH=AA("DILIST","ID") K AA
  1. . S A=$O(LXH(99999999),-1),B=$G(LXH(A,.02,"E")),C=$G(LXH(A,.01,"I"))
  1. . S LRMLSTAT=0,LRMLIDT="" S LRMLSTAT=$S(B="INACTIVE":1,1:0) I LRMLSTAT S LRMLIDT=$$FMTE^XLFDT($P(C,".",1),5)
  1. . I $G(HDICNT)'="" D ;<
  1. . . S L=@HDICNT,K=$P(L,U,11),K=K+1,$P(L,U,11)=K
  1. . . I LRMLIDT'="" S K=$P(L,U,12),K=K+1,$P(L,U,12)=K
  1. . . S @HDICNT=L
  1. . . ; get unique mltf items
  1. . . S @TMPCT@("M",LRMLTF)=""
  1. I 'LRMLTF S (LRMLTF,LRMLNM,LRMLAN,LRMLCOM,LRMLPROP,LRMLTIM,LRMLSPEC,LRMLSCAL,LRMLMET,LRMLIDT,LRMLSTAT,LRMLLON)=""
  1. D LH663,LB663,LT663,LT6001
  1. G LRS
  1. ;
  1. LQUIT ; quit back
  1. D LT60P,OT10143^HDISDOC
  1. K @LTMP
  1. K DA,DR,DIR,I,D,B,DIQ,DIC,ORDNM,ORIEN,ORIDT,ORST,PLIEN,PLNAME,PLPN,LT,LG,LB,LC,LRUN,LRIEN,LRNAME
  1. K LRTYPE,LRDAT,LRDAP,LRSTAT,LRIDT,LRSPEC,LRSPN,LRSUN,LRSST,LRSIDT,LRMLTF,LRMLNM,LRMLAN,LRMLLON,LTMP
  1. K LRMLCOM,LRMLPROP,LRMLTIM,LRMLSPEC,LRMLSCAL,LRMLMET,L60,LPRI,LE,LF,PNLNN
  1. K LTCNT,BA,LRAA,AA,AR,AB,ABC
  1. Q
  1. ;
  1. PNLCK(LT) ; check for panel
  1. N A,B,C,D,AA,AR,BA,BR S A=0
  1. Q:'LT
  1. S PNLNN(LT)=1
  1. K AA D LIST^DIC(60.02,","_LT_",","@;.01I","",,,,,,,"AA")
  1. K AR M AR=AA("DILIST","ID") K AA
  1. S A=$O(AR(A)) I 'A S @LTMP@(LT)="" Q
  1. S A=0 F S A=$O(AR(A)) Q:'A D ;<
  1. . S C=$G(AR(A,.01)) Q:'C
  1. . ; only have the test once for cycle of primary item
  1. . I $G(PNLNN(C))=1 Q
  1. . S PNLNN(C)=1
  1. . K BA D LIST^DIC(60.02,","_C_",","@;.01I","",,,,,,,"BA")
  1. . S B=$O(BA("DILIST","ID",0)) I B D PNLCK(C)
  1. . S @LTMP@(C)=""
  1. Q
  1. ;
  1. CHKCHAR(A) ; check for ctrl chars, <, >, &, /
  1. N B,C,I,L,M,N
  1. I A="" Q A
  1. S B="" F I=1:1:$L(A) S C=$E(A,I) D S L=C
  1. . S M=$E(A,(I+1))
  1. . I $A(C)<32!($A(C)>126) Q ; skip set
  1. . I C="&" S N="'AND'",B=B_N Q
  1. . I C="<" S N="'LESS THAN'",B=B_N Q
  1. . I C=">" S N="'GREATER THAN'",B=B_N Q
  1. . ;I C="/" S N="'FORWARD SLASH'",B=B_N Q
  1. . S B=B_C
  1. Q B
  1. ;
  1. GETLAB(LG) ; get lab test info
  1. N A,B,C,D,DA,DR,DIQ
  1. Q:'LG
  1. S DA=LG,DIQ="LB",DIQ(0)="IE",DIC=60,DR=".01;3;5;13;133;132" K ^UTILITY("DIQ1",$J) D EN^DIQ1 K ^UTILITY("DIQ1",$J)
  1. K LC M LC=LB(60,DA) K LB
  1. ;
  1. GETSPEC(LG,LS) ; get lab test specimen info
  1. N A,B,C,D,DA,DR,DIQ
  1. S DIQ="LB",DIQ(0)="IE",DIC=60,DR=100,DA=+LG K LB,^UTILITY("DIQ1",$J)
  1. S DR(60.01)=".01;6;30;32;33",DA(60.01)=LS
  1. D EN^DIQ1 K ^UTILITY("DIQ1",$J)
  1. K LE M LE=LB("60.01",LS) K LB
  1. Q
  1. ;
  1. GETMLTF(LM) ; get mltf info from file 66.3
  1. N A,B,C,D,DA,DR,DIQ
  1. Q:'LM
  1. S DA=LM,DIQ="LB",DIQ(0)="IE",DIC=66.3,DR=".01;.02;.04;.05;.06;.07;.08;.09;1" K ^UTILITY("DIQ1",$J) D EN^DIQ1 K ^UTILITY("DIQ1",$J)
  1. K LF M LF=LB(66.3,DA) K LB
  1. Q
  1. ;
  1. LH60P ; header for primary item
  1. S D=$$BTMP,@TMP@(D)="<Lab_Primary_Order_Item>"
  1. Q
  1. ;
  1. LT60P ; trailer for primary item
  1. S D=$$BTMP,@TMP@(D)="</Lab_Primary_Order_Item>"
  1. Q
  1. ;
  1. LB60P ; body for primary item
  1. S D=$$BTMP,@TMP@(D)="<Lab_Primary_Test_IEN>"_PLIEN_"</Lab_Primary_Test_IEN>"
  1. S D=$$BTMP,@TMP@(D)="<Lab_Primary_Test_Name>"_PLNAME_"</Lab_Primary_Test_Name>"
  1. S D=$$BTMP,@TMP@(D)="<Lab_Primary_Test_Panel>"_PLPN_"</Lab_Primary_Test_Panel>"
  1. Q
  1. ;
  1. LH60T ; test header for file 60
  1. S D=$$BTMP,@TMP@(D)="<Laboratory_Test_Item>"
  1. Q
  1. ;
  1. LT60T ; test trailer for file 60
  1. S D=$$BTMP,@TMP@(D)="</Laboratory_Test_Item>"
  1. Q
  1. ;
  1. LB60T ; test body for file 60
  1. S D=$$BTMP,@TMP@(D)="<Lab_Test_IEN>"_LRIEN_"</Lab_Test_IEN>"
  1. S D=$$BTMP,@TMP@(D)="<Lab_Test_Name>"_LRNAME_"</Lab_Test_Name>"
  1. S D=$$BTMP,@TMP@(D)="<Lab_Test_Type>"_LRTYPE_"</Lab_Test_Type>"
  1. S D=$$BTMP,@TMP@(D)="<Lab_Test_Data_Location>"_LRDAT_"</Lab_Test_Data_Location>"
  1. S D=$$BTMP,@TMP@(D)="<Lab_Test_Data_Loc_Physical>"_LRDAP_"</Lab_Test_Data_Loc_Physical>"
  1. S D=$$BTMP,@TMP@(D)="<Lab_Test_Inactive_Date>"_LRIDT_"</Lab_Test_Inactive_Date>"
  1. S D=$$BTMP,@TMP@(D)="<Lab_Test_Status>"_LRSTAT_"</Lab_Test_Status>"
  1. Q
  1. ;
  1. LH6001 ; test specimen header for file 60.01
  1. S D=$$BTMP,@TMP@(D)="<Lab_Test_Specimen>"
  1. Q
  1. ;
  1. LT6001 ; test specimen trailer for file 60.01
  1. S D=$$BTMP,@TMP@(D)="</Lab_Test_Specimen>"
  1. Q
  1. ;
  1. LB6001 ; test spceimen body for file 60.01
  1. S D=$$BTMP,@TMP@(D)="<Lab_Test_Specimen_IEN>"_LRSPEC_"</Lab_Test_Specimen_IEN>"
  1. S D=$$BTMP,@TMP@(D)="<Lab_Test_Specimen_Name>"_LRSPN_"</Lab_Test_Specimen_Name>"
  1. S D=$$BTMP,@TMP@(D)="<Lab_Test_Specimen_Units>"_LRSUN_"</Lab_Test_Specimen_Units>"
  1. S D=$$BTMP,@TMP@(D)="<Lab_Test_Specimen_Inactive_Date>"_LRSIDT_"</Lab_Test_Specimen_Inactive_Date>"
  1. S D=$$BTMP,@TMP@(D)="<Lab_Test_Specimen_Status>"_LRSST_"</Lab_Test_Specimen_Status>"
  1. Q
  1. ;
  1. LH663 ; header for mltf 66.3
  1. S D=$$BTMP,@TMP@(D)="<Master_Lab_Test_Item>"
  1. Q
  1. ;
  1. LT663 ;trailer for mltf 66.3
  1. S D=$$BTMP,@TMP@(D)="</Master_Lab_Test_Item>"
  1. Q
  1. ;
  1. LB663 ; body for mltf 66.3
  1. S D=$$BTMP,@TMP@(D)="<Master_Lab_Test_IEN>"_LRMLTF_"</Master_Lab_Test_IEN>"
  1. S D=$$BTMP,@TMP@(D)="<Master_Lab_Test_Name>"_LRMLNM_"</Master_Lab_Test_Name>"
  1. S D=$$BTMP,@TMP@(D)="<Master_Lab_Test_Alternate_Name>"_LRMLAN_"</Master_Lab_Test_Alternate_Name>"
  1. S D=$$BTMP,@TMP@(D)="<Master_Lab_Test_Inactive_Date>"_LRMLIDT_"</Master_Lab_Test_Inactive_Date>"
  1. S D=$$BTMP,@TMP@(D)="<Master_Lab_Test_Status>"_LRMLSTAT_"</Master_Lab_Test_Status>"
  1. S D=$$BTMP,@TMP@(D)="<Master_Lab_Test_LOINC_Code>"_LRMLLON_"</Master_Lab_Test_LOINC_Code>"
  1. S D=$$BTMP,@TMP@(D)="<Master_Lab_Test_Component>"_LRMLCOM_"</Master_Lab_Test_Component>"
  1. S D=$$BTMP,@TMP@(D)="<Master_Lab_Test_Property>"_LRMLPROP_"</Master_Lab_Test_Property>"
  1. S D=$$BTMP,@TMP@(D)="<Master_Lab_Test_Time_Aspect>"_LRMLTIM_"</Master_Lab_Test_Time_Aspect>"
  1. S D=$$BTMP,@TMP@(D)="<Master_Lab_Test_Specimen>"_LRMLSPEC_"</Master_Lab_Test_Specimen>"
  1. S D=$$BTMP,@TMP@(D)="<Master_Lab_Test_Scale>"_LRMLSCAL_"</Master_Lab_Test_Scale>"
  1. S D=$$BTMP,@TMP@(D)="<Master_Lab_Test_Method>"_LRMLMET_"</Master_Lab_Test_Method>"
  1. Q