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

BLRUTIL4.m

Go to the documentation of this file.
  1. BLRUTIL4 ;IHS/MSC/MKK - MISC IHS LAB UTILITIES (Cont) ; 17-Jul-2015 06:30 ; MKK
  1. ;;5.2;LR;**1031,1033,1034,1035**;NOV 01, 1997;Build 5
  1. ;
  1. ; Determines if MODULE exists on server
  1. MODEXIST(MODULE) ; EP
  1. NEW HEREYAGO,NAME,PATCH,PTR,SYSVER,VERSION
  1. ;
  1. D FIND^DIC(9.4,"",,,MODULE,,"C",,,"HEREYAGO")
  1. S PTR=+$G(HEREYAGO("DILIST",2,1))
  1. ;
  1. Q:PTR<1 "0^NOT ON THIS SERVER^"
  1. ;
  1. ; Special logic for INTEGRATED BILLING
  1. I $G(HEREYAGO("DILIST",1,1))["INTEGRATED BILL" Q "0^NOT ON THIS SERVER^"
  1. I $G(HEREYAGO("DILIST",1,1))["IB ENCOUNTER" Q "0^NOT ON THIS SERVER^"
  1. ;
  1. S SYSVER=+$$VERSION^XPDUTL(MODULE) ; Get Current Version #
  1. ;
  1. ; Special logic for VA Clinical Reminders
  1. Q:MODULE="PXRM"&(SYSVER<2) "0^NOT ON THIS SERVER^"
  1. ;
  1. ; Special logic for VA Patient Encounter module
  1. I MODULE="PCE"!(MODULE="PX") D
  1. . Q:MODULE="PXRM" ; Skip Clinical Reminders
  1. . S MODULE="PX"
  1. . S VERSION="1.0"
  1. . S PATCH=168 ; Latest VA Patch as of 5/1/2009
  1. . S PATCH=197 ; IHS/MSC/MKK - LR*5.2*1033 - Latest VA Patch as of 2011
  1. . S PATCH=203 ; IHS/MSC/MKK - LR*5.2*1034 - Seq 152, June 2014
  1. . S SYSPATCH=$$PATCH^XPDUTL(MODULE_"*"_VERSION_"*"_PATCH)
  1. . S:SYSPATCH<1 SYSVER=0
  1. ;
  1. ; If PTR>0 but SYSVER<1, then Module is a stub.
  1. ; Full Module (with all of its routines) does not exist on the server.
  1. Q:SYSVER<1 "0^NOT ON THIS SERVER^"
  1. ;
  1. S NAME=$G(HEREYAGO("DILIST",1,1))
  1. ;
  1. Q PTR_"^"_NAME_"^"_SYSVER
  1. ;
  1. ; Get Health Record Number -- see LA7UID2 routine
  1. GETHRCN(LRDFN,INHRCN) ; EP
  1. ; ----- BEGIN IHS/MSC/MKK - LR*5.2*1033
  1. ; Check to make sure the HRCN is the correct one for the Ordering Location
  1. I +$G(INHRCN) D
  1. . NEW DFN,IENS,ORDHRCN,ORDLOC,OLINST
  1. . S IENS=LA76802_","_LA76801_","_LA768_","
  1. . S ORDLOC=+$$GET1^DIQ(68.02,IENS,94,"I")
  1. . S OLINST=+$$GET1^DIQ(44,ORDLOC,3,"I")
  1. . Q:OLINST<1
  1. . ;
  1. . S DFN=+$P($G(^LR(LRDFN,0)),"^",3)
  1. . S ORDHRCN=+$$HRN^AUPNPAT(DFN,OLINST)
  1. . Q:ORDHRCN<1
  1. . ;
  1. . S:ORDHRCN'=INHRCN INHRCN=ORDHRCN
  1. ; ----- END IHS/MSC/MKK - LR*5.2*1033
  1. ;
  1. Q:+$G(INHRCN) +$G(INHRCN) ; If #, just return it
  1. ;
  1. ; If LRDFN not from VA Patient file, return passed variable.
  1. I $P($G(^LR(LRDFN,0)),"^",2)'=2 Q $G(INHRCN)
  1. ;
  1. ; New variables
  1. NEW ACCINST,DFN,HRCN,LRIDT,LRSS
  1. ;
  1. ; Get Patient file IEN
  1. S DFN=+$P($G(^LR(LRDFN,0)),"^",3)
  1. ;
  1. ; Use IHS DICTIONARIES function call
  1. S HRCN=$$HRN^AUPNPAT(DFN,DUZ(2))
  1. ;
  1. Q:+HRCN HRCN
  1. ;
  1. ; DUZ(2) did not return the HRCN.
  1. ; Use the Lab Data File's ACCESSIONING INSTITUTION field.
  1. ;
  1. ; Get Lab Data File Subscript
  1. S LRSS=$P($G(^LRO(68,+$G(LRAA),0)),"^",2)
  1. ;
  1. ; If LRSS still null, try LA7UID accession variable
  1. S:LRSS="" LRSS=$P($G(^LRO(68,+$G(LA768),0)),"^",2)
  1. ;
  1. ; Could not retrieve Subscript, so return passed variable.
  1. Q:$L(LRSS)<1 $G(INHRCN)
  1. ;
  1. ; Try to get LRIDT using LRAA,LRAD,LRAN variables
  1. S LRIDT=$P($G(^LRO(68,+$G(LRAA),1,+$G(LRAD),1,+$G(LRAN),3)),"^",5)
  1. ;
  1. ; If LRIDT still null, try LA7UID accession variables
  1. S:LRIDT="" LRIDT=$P($G(^LRO(68,+$G(LA768),1,+$G(LA76801),1,+$G(LA76802),3)),"^",5)
  1. ;
  1. ; If LRIDT still null, return passed variable.
  1. Q:$L(LRIDT)<1 $G(INHRCN)
  1. ;
  1. ; Get ACCessioning INSTitution
  1. S ACCINST=+$P($G(^LR(LRDFN,LRSS,+$G(LRIDT),0)),"^",14)
  1. ;
  1. S HRCN=$$HRN^AUPNPAT(DFN,ACCINST)
  1. ;
  1. Q:+HRCN HRCN
  1. ;
  1. D ENTRYAUD^BLRUTIL("GETHRCN^BLRUTIL4 8.5")
  1. ;
  1. ; Could not retrieve HRCN, so return passed variable.
  1. Q $G(INHRCN)
  1. ;
  1. ; Generic "Find RPMS Module's Version and (perhaps) Patch number"
  1. ; The MODULE variable MUST be the PREFIX name from the PACKAGE file (9.4).
  1. NEEDIT(MODULE,VERSION,PATCH) ; EP
  1. NEW NAME ; Name of PACKAGE
  1. NEW HEREYAGO,STR1,STR2 ; Scratch variables/arrays
  1. NEW SYSVER,SYSPATCH ; System Version & System Patch variables
  1. ;
  1. D FIND^DIC(9.4,"","","",MODULE,"","C","","","HEREYAGO")
  1. S NAME=$G(HEREYAGO("DILIST",1,1))
  1. ;
  1. S SYSVER=$$VERSION^XPDUTL(MODULE) ; Get the System's Version
  1. ;
  1. ; If System Version < Needed Version, write message and quit
  1. I SYSVER<VERSION D Q
  1. . W !,?4,"Need "_NAME_" "_VERSION_" & "_NAME_" "_SYSVER_" found!",!!
  1. ;
  1. D OKAY^BLRKIDSU(NAME_" "_SYSVER_" found.")
  1. I VERSION<SYSVER Q ; If Version needed is lower, skip Patch check
  1. ;
  1. I $G(PATCH)="" Q ; If no Patch check, just exit
  1. ;
  1. D BMES^XPDUTL(" Need "_NAME_" "_VERSION_" Patch "_PATCH)
  1. S SYSPATCH=$$PATCH(MODULE_"*"_VERSION_"*"_PATCH)
  1. I SYSPATCH'=1 D Q
  1. . S ERRARRAY(MODULE,NAME,VERSION)=$G(PATCH)
  1. . D MES^XPDUTL($J("",10)_" & Patch "_PATCH_" WAS NOT installed!")
  1. ;
  1. D OKAY^BLRKIDSU("& Patch "_PATCH_" found.",10)
  1. ;
  1. Q
  1. ;
  1. PACKSTR(X) ; EP - Remove Extra Spaces from within string
  1. F Q:X'[" " S X=$P(X," ",1)_" "_$P(X," ",2,9999)
  1. Q X
  1. ;
  1. ; Code cloned from PATCH^XPDUTL
  1. PATCH(X) ;EP - Return 1 if patch X was installed, X=aaaa*nn.nn*nnn
  1. Q:X'?1.4UN1"*"1.2N1"."1.2N.1(1"V",1"T").2N1"*"1.6N 0
  1. N %,I,J
  1. S I=$O(^DIC(9.4,"C",$P(X,"*"),0)) Q:'I 0
  1. S J=$O(^DIC(9.4,I,22,"B",$P(X,"*",2),0)),X=$P(X,"*",3) Q:'J 0
  1. ;check if patch is just a number
  1. ;
  1. Q:$O(^DIC(9.4,I,22,J,"PAH","B",X,0)) 1
  1. ;
  1. S %=$O(^DIC(9.4,I,22,J,"PAH","B",X_" SEQ"))
  1. Q (X=+%)
  1. ;
  1. CURLABP() ; EP - Return current Lab Patch
  1. NEW LABPATCH,PTR,STATUS,WOTPATCH
  1. ;
  1. S LABPATCH="<UNK>",STATUS=0,WOTPATCH="LR*5.2*1099"
  1. F S WOTPATCH=$O(^XPD(9.7,"B",WOTPATCH),-1) Q:WOTPATCH=""!($E(WOTPATCH,1,2)'="LR")!(STATUS=3) D
  1. . S PTR="AAA"
  1. . F S PTR=$O(^XPD(9.7,"B",WOTPATCH,PTR),-1) Q:PTR=""!(STATUS=3) D
  1. .. S STATUS=$P($G(^XPD(9.7,PTR,0)),"^",9)
  1. .. S:STATUS=3 LABPATCH=WOTPATCH
  1. ;
  1. Q LABPATCH
  1. ;
  1. ; The following moved from LRRP1 because LRRP1 became > 15000 bytes
  1. ; The following moved from LRRP1 because LRRP1 became > 15000 bytes
  1. GETCOMPD() ; EP -- Get Completion Date for test
  1. NEW COMPD,D3,DATALN,LRAA,LRAD,LRAN,LRAS,LRAT,LRSS,LOG,STR,TESTIEN,TMPDT,VLABIEN
  1. ;
  1. D ENTRYAUD^BLRUTIL("GETCOMPD^BLRUTIL4 0.0") ; IHS/MSC/MKK - LR*5.2*1034
  1. ;
  1. S LRAS=$P(LR0,"^",6)
  1. Q:'$L(LRAS) " "
  1. ;
  1. D ENTRYAUD^BLRUTIL("GETCOMPD^BLRUTIL4 1.0") ; IHS/MSC/MKK - LR*5.2*1034
  1. ;
  1. ; If no Pointer to file 60, return null
  1. S TESTIEN=+$P($G(LRDATA),"^",1)
  1. Q:TESTIEN<1 " "
  1. ;
  1. D ENTRYAUD^BLRUTIL("GETCOMPD^BLRUTIL4 2.0") ; IHS/MSC/MKK - LR*5.2*1034
  1. ;
  1. ; If test PENDING, there is no complete date -- return null
  1. S DATALN=+$P($P($G(^LAB(60,+$G(LRTSTS),0)),"^",5),";",2)
  1. I $$UP^XLFSTR($P($G(^LR(LRDFN,"CH",LRIDT,DATALN)),"^",1))["PEND" Q " "
  1. ;
  1. ; ----- BEGIN IHS/MSC/MKK - LR*5.2*1033
  1. ; Try to get COMPLETE DATE from Lab Data File
  1. ; S COMPD=+$G(^LR(LRDFN,"CH",LRIDT,+$P(LRDATA,U,10),"IHS"))
  1. S COMPD=$G(^LR(LRDFN,"CH",LRIDT,+$P(LRDATA,U,10),"IHS")) ; IHS/MSC/MKK - LR*5.2*1035
  1. ;
  1. D ENTRYAUD^BLRUTIL("GETCOMPD^BLRUTIL4 3.0") ; IHS/MSC/MKK - LR*5.2*1035
  1. ;
  1. I +COMPD,COMPD["," S COMPD=$$HTFM^XLFDT(COMPD) ; IHS/MSC/MKK - LR*5.2*1035
  1. ;
  1. D ENTRYAUD^BLRUTIL("GETCOMPD^BLRUTIL4 3.5") ; IHS/MSC/MKK - LR*5.2*1035
  1. ;
  1. Q:+$G(COMPD)>2000000 $$FMTE^XLFDT(COMPD,"2MZ")
  1. ; ----- END IHS/MSC/MKK - LR*5.2*1033
  1. ;
  1. ; Break out Accession variables
  1. I $$GETACCCP^BLRUTIL3(LRAS,.LRAA,.LRAD,.LRAN)<1 Q " "
  1. ;
  1. ; If Accession Date (LRAD) year not the same as the collection date year, set LRAD = 0
  1. I $E(LRAD,1,3)'=$E($P($G(LRCDT),"."),1,3) S LRAD=0
  1. ;
  1. ; Try to get COMPLETE DATE for the test from Accession file
  1. S COMPD=$P($G(^LRO(68,LRAA,1,LRAD,1,LRAN,4,TESTIEN,0)),"^",5)
  1. ;
  1. D ENTRYAUD^BLRUTIL("GETCOMPD^BLRUTIL4 4.0") ; IHS/MSC/MKK - LR*5.2*1035
  1. ;
  1. Q:+$G(COMPD)>2000000 $$FMTE^XLFDT(COMPD,"2MZ")
  1. ;
  1. ; Completed date is null in Accession file; will try to get date
  1. ; from the BLRTXLOG file
  1. S (COMPD,VLABIEN,LOG)=0
  1. F S LOG=$O(^BLRTXLOG("D",LRAS,LOG)) Q:LOG<1!(COMPD>0) D
  1. . I $P($G(^BLRTXLOG(LOG,1)),"^",2)'="R" Q ; Not RESULTED
  1. . I $P($G(^BLRTXLOG(LOG,0)),"^",6)'=TESTIEN Q ; Wrong test
  1. . I $E(LRAD,1,3)'=$E($P($P($G(^BLRTXLOG(LOG,12)),"^"),"."),1,3) Q ; Wrong year
  1. . ;
  1. . S COMPD=+$P($G(^BLRTXLOG(LOG,13)),"^",9)
  1. ;
  1. D ENTRYAUD^BLRUTIL("GETCOMPD^BLRUTIL4 5.0") ; IHS/MSC/MKK - LR*5.2*1034
  1. ;
  1. Q:+$G(COMPD)>2000000 $$FMTE^XLFDT(COMPD,"2MZ")
  1. ;
  1. ; Still null. Try to find the test in the V LAB file and use test's
  1. ; Accession #, IEN, and Collection Date to match
  1. ;
  1. S VLABIEN=.9999999
  1. F S VLABIEN=$O(^AUPNVLAB("ALR0",LRAS,VLABIEN)) Q:VLABIEN<1!(COMPD>0) D
  1. . I $P($G(^AUPNVLAB(VLABIEN,0)),"^")'=TESTIEN Q ; If TEST doesn't match, skip
  1. . ; Collection Date/Time match only down to minutes, not seconds
  1. . I $E($P($G(^AUPNVLAB(VLABIEN,12)),"^",1),1,12)'=$E($P(LR0,"^"),1,12) Q
  1. . ;
  1. . S COMPD=+$P($G(^AUPNVLAB(VLABIEN,12)),"^",12) ; V LAB Result Date
  1. ;
  1. D ENTRYAUD^BLRUTIL("GETCOMPD^BLRUTIL4 6.0") ; IHS/MSC/MKK - LR*5.2*1034
  1. ;
  1. Q:+$G(COMPD)>2000000 $$FMTE^XLFDT(COMPD,"2MZ")
  1. ;
  1. ; If still null, try the Lab Data File's DATE REPORT COMPLETED Date
  1. ; that's stored in the LR0 variable
  1. ; ----- BEGIN IHS/MSC/MKK - LR*5.2*1034
  1. ; Don't use DATE REPORT COMPLETED because it's NOT at the test level.
  1. ; S COMPD=$P(LR0,"^",3)
  1. ; ----- END IHS/MSC/MKK - LR*5.2*1034
  1. ;
  1. ; ----- BEGIN IHS/MSC/MKK - LR*5.2*1035
  1. ; The Lab Data File's DATE REPORT COMPLETED Date must be used
  1. ; otherwise tests on a panel will never have a completed date.
  1. S COMPD=$P(LR0,"^",3)
  1. ; ----- END IHS/MSC/MKK - LR*5.2*1035
  1. ;
  1. D ENTRYAUD^BLRUTIL("GETCOMPD^BLRUTIL4 7.0") ; IHS/MSC/MKK - LR*5.2*1034
  1. ;
  1. Q:+$G(COMPD)>2000000 $$FMTE^XLFDT(COMPD,"2MZ")
  1. ;
  1. D ENTRYAUD^BLRUTIL("GETCOMPD^BLRUTIL4 8.0") ; IHS/MSC/MKK - LR*5.2*1035
  1. ;
  1. ; All results dates checked and nothing found, so quit with null
  1. Q " "
  1. ;
  1. ;
  1. ENTRYAUD(LABEL,TMPNODE) ; EP - Audit ^TMP global
  1. NEW ENTRYNUM,NOW,NOWTIM
  1. ;
  1. S NOW=$$NOW^XLFDT
  1. S ENTRYNUM=$G(^BLRENTRY)+1
  1. S $P(^BLRENTRY,U)=ENTRYNUM
  1. M ^BLRENTRY(DUZ,NOW,ENTRYNUM,LABEL_" ^TMP")=^TMP(TMPNODE)
  1. Q
  1. ;
  1. ; ----- BEGIN IHS/MSC/MKK - LR*5.2*1033
  1. ; Given an UID, return the LRAA,LRAD,LRAN,LRDFN,LRSS,LRIDT variables
  1. RETACCV(UID,LRAA,LRAD,LRAN,LRDFN,LRSS,LRIDT,LRAS) ; EP
  1. S (LRAA,LRAD,LRAN,LRAS,LRDFN,LRSS,LRIDT)="" ; Initialize all the variables
  1. ;
  1. S X=$Q(^LRO(68,"C",UID,0))
  1. Q:$L(X)<1 ; Skip if no accession data
  1. ;
  1. S LRAA=+$QS(X,4),LRAD=+$QS(X,5),LRAN=+$QS(X,6)
  1. S LRDFN=+$G(^LRO(68,LRAA,1,LRAD,1,LRAN,0))
  1. S LRSS=$$GET1^DIQ(68,LRAA,.09,"I")
  1. S LRIDT=$P($G(^LRO(68,LRAA,1,LRAD,1,LRAN,3)),"^",5)
  1. ;
  1. S LRAS=$$GET1^DIQ(68.02,LRAN_","_LRAD_","_LRAA,"ACCESSION")
  1. Q
  1. ;
  1. SETUCUM ; EP - Set value into IHS UCUM dictionary
  1. NEW FDA,IEN,UCUM,UDESC,UPRNITN
  1. ;
  1. W !!
  1. ;
  1. S UCUM=$$GETSTRNG("UCUM Definitiion")
  1. Q:UCUM="Q"
  1. ;
  1. S UDESC=$$GETSTRNG("UCUM Description")
  1. Q:UDESC="Q"
  1. ;
  1. S UPRINTN=$$GETSTRNG("UCUM Print Name")
  1. Q:UPRINTN="Q"
  1. ;
  1. S FDA(90475.3,"+1,",.01)=UCUM
  1. S FDA(90475.3,"+1,",1)=UDESC
  1. S FDA(90475.3,"+1,",3)=UPRINTN
  1. ;
  1. D UPDATE^DIE("S","FDA",,"ERRS")
  1. ;
  1. I $D(ERRS) D Q
  1. . W !,?4,"Error adding UCUM. Error Message Follows:"
  1. . D ARRYDUMP("ERRS")
  1. . D PRESSKEY^BLRGMENU(9)
  1. ;
  1. S IEN=$$FIND1^DIC(90475.3,,,UCUM)
  1. K FDA,ERRS
  1. S FDA(90475.32,"+1,"_IEN_",",.01)=UPRINTN
  1. D UPDATE^DIE("S","FDA",,"ERRS")
  1. ;
  1. I $D(ERRS) D Q
  1. . W !,?4,"Error adding ",UPRINTN," as a SYNONYM. Error Message Follows:"
  1. . D ARRYDUMP("ERRS")
  1. . D PRESSKEY^BLRGMENU(9)
  1. ;
  1. W !!,?4,"Succesfully added UCUM at IEN:",IEN,!
  1. D PRESSKEY^BLRGMENU(9)
  1. ;
  1. Q
  1. ;
  1. GETSTRNG(STR) ; EP
  1. D ^XBFMK
  1. S DIR(0)="FO"
  1. S DIR("A")=STR
  1. D ^DIR
  1. I $G(X)=""!(+$G(DIRUT)) D Q "Q"
  1. . W !!,?4,"No/Invalid/Quit Entry. Routine Ends."
  1. . D PRESSKEY^BLRGMENU(9)
  1. ;
  1. Q $G(X)
  1. ;
  1. ; "Dump" an array
  1. ARRYDUMP(ARRY) ; EP
  1. NEW COL,MESSAGE,STR1,TOOWIDE,WIDTH
  1. ;
  1. S STR1=$Q(@ARRY@(""))
  1. S MESSAGE=@STR1
  1. ;
  1. W !,?5,ARRY,!
  1. W ?10,STR1,"="
  1. S COL=$X
  1. D ARRYDMP2(COL,MESSAGE)
  1. ;
  1. F S STR1=$Q(@STR1) Q:STR1="" D
  1. . S MESSAGE=@STR1
  1. . W ?10,STR1,"="
  1. . S COL=$X
  1. . D ARRYDMP2(COL,MESSAGE)
  1. Q
  1. ;
  1. ARRYDMP2(COL,MESSAGE) ; EP - Output string. If too wide, wrap it.
  1. S WIDTH=(IOM-COL-1)
  1. S TOOWIDE=$S((COL+$L(MESSAGE))<IOM:0,1:1)
  1. ;
  1. I 'TOOWIDE W MESSAGE,! Q
  1. ;
  1. I TOOWIDE D LINEWRAP^BLRGMENU(COL,MESSAGE,WIDTH) W !
  1. Q
  1. ;
  1. NOPCEINS ; EP - NO PCE INStalled notice
  1. W !,?4,"VA Patient Encounter module does NOT exist on this sytem."
  1. D PRESSKEY^BLRGMENU
  1. Q
  1. ; ----- END IHS/MSC/MKK - LR*5.2*1033