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

LRSRVR5.m

Go to the documentation of this file.
  1. LRSRVR5 ;DALOI/JMC - LAB DATA SERVER - Load standardized code mappings ;01/13/11 09:16
  1. ;;5.2;LAB SERVICE;**350**;Sep 27, 1994;Build 230
  1. ;
  1. Q
  1. ;
  1. ;
  1. RMAP ; Load RELMA mapping into site's system
  1. ;
  1. ;ZEXCEPT: XMZ
  1. ;
  1. N LRNAME,LRNODE,LRTYPE
  1. S LRNODE="LRSRVR-RELMA-"_XMZ,LRNAME="Lab RELMA Mapping Update"
  1. S LRTYPE=1,LRTYPE(0)="LN"
  1. D PROCESS
  1. Q
  1. ;
  1. ;
  1. CTMAP ; Load SNOMED CT mapping into site's system
  1. ;
  1. ;
  1. ;ZEXCEPT: XMZ
  1. ;
  1. N LRNAME,LRNODE,LRTYPE
  1. S LRNODE="LRSRVR-SNOMED CT-"_XMZ,LRNAME="Lab SNOMED CT Mapping Update"
  1. S LRTYPE=2,LRTYPE(0)="SCT"
  1. D PROCESS
  1. Q
  1. ;
  1. ;
  1. PROCESS ; Process the message and load file
  1. ;
  1. N DIC,DINUM,DO,LRCNT,LRDT,LRFILE,LRI,LRIEN,LRMAILGROUP,LRNOW,LRST,LRSTN,LRVAL,X
  1. ;
  1. ;ZEXCEPT: LRHDL,LRNAME,LRTYPE,XMZ
  1. ;
  1. S X=$$HTFM^XLFDT($H),LRDT=X\1,LRNOW=X
  1. S LRFILE=95.4,LRVAL=$$SITE^VASITE,LRST=$P(LRVAL,"^",3),LRSTN=$P(LRVAL,"^",2)
  1. S $P(LRVAL,"^",4)=$P($$NNT^XUAF4($P(LRVAL,"^")),"^",3)
  1. ;
  1. ; Check that mail group has members
  1. S LRMAILGROUP="LAB MAPPING"
  1. I '$$GOTLOCAL^XMXAPIG(LRMAILGROUP) D
  1. . N XQAID,XQAMSG,XQAROU,XQADATA,XQA
  1. . S LRMAILGROUP="LMI"
  1. . S XQAMSG="Lab "_LRTYPE(0)_" mapping process: No local members in mail group LAB MAPPING"
  1. . S XQA("G."_LRMAILGROUP)="",XQAID="LRSRVR-"_$S(LRTYPE=1:"LOINC",LRTYPE=2:"SNOMED CT",1:"UNKNOWN")_"-"_$H
  1. . D SETUP^XQALERT
  1. ;
  1. ; Set lock so only one process runs at a time.
  1. ; If unable to obtain lock send Kernel alert to notify site that mapping processing unable to start.
  1. F LRI=1:1:10 L +^XTMP("LABSERVER LOADING"):999 Q:$T
  1. I '$T D Q
  1. . N XQAID,XQAMSG,XQAROU,XQADATA,XQA
  1. . S XQAMSG="Unable to obtain lock to process "_$S(LRTYPE=1:"LOINC",LRTYPE=2:"SNOMED CT",1:"UNKNOWN")_" mapping from STS"
  1. . S XQA("G."_LRMAILGROUP)="",XQAID="LRSRVR-"_$S(LRTYPE=1:"LOINC",LRTYPE=2:"SNOMED CT",1:"UNKNOWN")_"-"_XMZ
  1. . D SETUP^XQALERT
  1. ;
  1. D EXTRACT
  1. ;
  1. ; Set lock so only one process updates file #95.4 at a time.
  1. ; If unable to obtain lock send Kernel alert to notify site that mapping processing unable to start.
  1. F LRI=1:1:10 L +^LAHM(LRFILE,0):999 Q:$T
  1. I '$T D Q
  1. . N XQAID,XQAMSG,XQAROU,XQADATA,XQA
  1. . S XQAMSG="Unable to obtain lock on file #"_LRFILE_" to process "_$S(LRTYPE=1:"LOINC",LRTYPE=2:"SNOMED CT",1:"UNKNOWN")_" mapping from STS"
  1. . S XQA("G."_LRMAILGROUP)="",XQAID="LRSRVR-"_$S(LRTYPE=1:"LOINC",LRTYPE=2:"SNOMED CT",1:"UNKNOWN")_"-"_XMZ
  1. . D SETUP^XQALERT
  1. ;
  1. S (LRCNT,LRI)=0
  1. F S LRI=$O(^TMP($J,"LRMAP",LRI)) Q:'LRI D
  1. . S LRCNT=LRCNT+1
  1. . I '(LRCNT#100) H 1 ; take a "rest" - allow OS to swap out process
  1. . D LDFILE
  1. ;
  1. ; Release lock
  1. L -^LAHM(LRFILE,0)
  1. ;
  1. ; Save master list of message handles when it arrives in 'last' message
  1. I $D(^TMP($J,"LRMAP-HDL")) D
  1. . S ^XTMP("LRMAP-HDL-"_LRTYPE(0),0)=$$HTFM^XLFDT($H+1,1)_"^"_LRDT_"^"_LRNAME
  1. . M ^XTMP("LRMAP-HDL-"_LRTYPE(0),1)=^TMP($J,"LRMAP-HDL")
  1. ;
  1. ; Save this message's handle
  1. I LRHDL'="" D
  1. . S ^XTMP("LRMAP-HDL-"_LRTYPE(0),0)=$$HTFM^XLFDT($H+1,1)_"^"_LRDT_"^"_LRNAME
  1. . S ^XTMP("LRMAP-HDL-"_LRTYPE(0),2,LRHDL)=XMZ
  1. ;
  1. ; Check to see if all the messages have arrived and start loading mapping
  1. I $D(^XTMP("LRMAP-HDL-"_LRTYPE(0),1)),$D(^XTMP("LRMAP-HDL-"_LRTYPE(0),2)) D
  1. . N I,LROK
  1. . S I=0,LROK=1
  1. . F S I=$O(^XTMP("LRMAP-HDL-"_LRTYPE(0),1,I)) Q:I="" S I(0)=^XTMP("LRMAP-HDL-"_LRTYPE(0),1,I,0) I '$D(^XTMP("LRMAP-HDL-"_LRTYPE(0),2,I(0))) S LROK=0
  1. . I LROK D TASKMAP
  1. ;
  1. ; Release lock
  1. L -^XTMP("LABSERVER LOADING")
  1. ;
  1. ; Cleanup mail message after serving
  1. D CLEAN^LRSRVR
  1. ;
  1. Q
  1. ;
  1. ;
  1. EXTRACT ; Extract data from PackMan global format in MailMan message.
  1. ;
  1. N LRDATA,LRGLO,LRSTART,LRTEXT
  1. ;
  1. ;ZEXCEPT: LRDT,LRHDL,LRNAME,LRNODE,LRST,XMFROM,XMREC,XMRG,XMZ
  1. ;
  1. ; Check if PackMan message.
  1. I '$$PAKMAN^XMXSEC1(XMZ,"") Q
  1. ;
  1. I $D(^XTMP(LRNODE)) K ^XTMP(LRNODE)
  1. ;
  1. S ^XTMP(LRNODE,0)=$$HTFM^XLFDT($H+90,1)_"^"_LRDT_"^"_LRNAME
  1. S ^XTMP(LRNODE,0,1)="Lab Server triggered at "_LRST_" by "_XMFROM_" on "_$$HTE^XLFDT($H)
  1. ;
  1. ; Process message looking for global nodes to load.
  1. S (LRSTART,LRTEXT)=0,LRHDL=""
  1. F X XMREC Q:XMER<0 D
  1. . I $E(XMRG,1,4)="$TXT" S LRTEXT=1 Q
  1. . I $E(XMRG,1,8)="END $TXT" S LRTEXT=0 Q
  1. . I $E(XMRG,1,4)="$GLO" S (LRSTART,LRDATA)=1,LRTEXT=0 Q
  1. . I $E(XMRG,1,8)="END $GLO" S LRSTART=0 Q
  1. . I LRTEXT D Q
  1. . . I $E(XMRG,1,7)="LR-MAP-" S LRHDL=XMRG Q
  1. . I 'LRSTART Q
  1. . I LRDATA S LRDATA=0,LRGLO=XMRG Q
  1. . S LRDATA=1,@LRGLO=XMRG
  1. ;
  1. I LRHDL'="" S ^XTMP(LRNODE,0,2)=LRHDL
  1. ;
  1. Q
  1. ;
  1. ;
  1. LDFILE ; Load/store entries in mapping transport file.
  1. ;
  1. ;ZEXCEPT: DA,DIC,DIK,DINUM,DO,LR4,LRFILE,LRI,LRIEN,LRNOW,LRVAL,LRX,X,Y
  1. ;
  1. K DIC,DINUM,DO,LRIEN
  1. S LRI(0)=^TMP($J,"LRMAP",LRI,0)
  1. S LRX=$P(LRI(0),"^")
  1. S LR4=$$IEN^XUAF4($P(LRX,"-"))
  1. I $P(LRVAL,"^",4)="VAMC",LR4'=$P(LRVAL,"^") Q
  1. ;
  1. S X=LRX,DIC="^LAHM(LRFILE,",DIC(0)="F"
  1. D FILE^DICN
  1. I Y<1 Q
  1. S LRIEN=+Y
  1. ;
  1. ; Merge rest of entry from TMP global
  1. M ^LAHM(LRFILE,LRIEN,100)=^TMP($J,"LRMAP",LRI,100)
  1. ;
  1. S $P(^LAHM(LRFILE,LRIEN,0),"^",2)=LR4
  1. S $P(^LAHM(LRFILE,LRIEN,0),"^",3)=$P(LRI(0),"^",3)
  1. S $P(^LAHM(LRFILE,LRIEN,0),"^",4)=0
  1. S $P(^LAHM(LRFILE,LRIEN,0),"^",6)=LRNOW
  1. ;
  1. ; Index entry
  1. K DA,DIK
  1. S DIK="^LAHM(LRFILE,",DA=LRIEN
  1. D IX1^DIK
  1. ;
  1. Q
  1. ;
  1. ;
  1. TASKMAP ; Task/run applying the mapping to site's lab files
  1. ;
  1. N XQAID,XQAMSG,XQAROU,XQADATA,XQA
  1. ;
  1. ;ZEXCEPT: LRABORT,LRMAILGROUP,LRTYPE,XMZ
  1. ;
  1. ;
  1. ; Send Kernel alert to notify site that mapping has been triggered.
  1. S XQAMSG=$S(LRTYPE=1:"LOINC",LRTYPE=2:"SNOMED CT",1:"UNKNOWN")_" mapping has been triggered from STS on "_$$HTE^XLFDT($H,"1M")
  1. S XQA("G."_LRMAILGROUP)="",XQAID="LRSRVR-"_$S(LRTYPE=1:"LOINC",LRTYPE=2:"SNOMED CT",1:"UNKNOWN")_"-"_+$G(XMZ)
  1. D SETUP^XQALERT
  1. ;
  1. I LRTYPE=1 Q
  1. ;
  1. ; Load SNOMED CT codes into lab files
  1. I LRTYPE=2 D
  1. . D LD^LRSCTF(+$$SITE^VASITE,0)
  1. . K ^XTMP("LRMAP-HDL-SCT")
  1. ;
  1. ; Send Kernel alert to notify site that mapping has ended.
  1. K XQAID,XQAMSG,XQAROU,XQADATA,XQA
  1. S XQAMSG=$S(LRTYPE=1:"LOINC",LRTYPE=2:"SNOMED CT",1:"UNKNOWN")_" mapping has "_$S($G(LRABORT):"ABORTED",1:"completed")_" on "_$$HTE^XLFDT($H,"1M")
  1. S XQA("G."_LRMAILGROUP)="",XQAID="LRSRVR-"_$S(LRTYPE=1:"LOINC",LRTYPE=2:"SNOMED CT",1:"UNKNOWN")_"-"_+$G(XMZ)
  1. D SETUP^XQALERT
  1. ;
  1. Q
  1. ;
  1. ;
  1. PURGE(LRSTAT,LRDATE) ; Purge entries matching status selected.
  1. ; Call with:
  1. ; LRSTAT = record status to purge
  1. ; LRDATE = (optional) only purge records with a Status Date <= LRDATE
  1. ;
  1. N DA,DIK,LRQUIT,LRROOT,LRSTATDT
  1. S LRQUIT=0,LRROOT="^LAHM(95.4,""AE"",LRSTAT)",DIK="^LAHM(95.4,"
  1. F S LRROOT=$Q(@LRROOT) D Q:LRQUIT
  1. . I LRROOT="" S LRQUIT=1 Q
  1. . I $QS(LRROOT,2)'="AE" S LRQUIT=1 Q
  1. . I $QS(LRROOT,3)'=LRSTAT S LRQUIT=1 Q
  1. . S DA=$QS(LRROOT,4)
  1. . S LRSTATDT=$P($G(^LAHM(95.4,+DA,0)),U,6)
  1. . I $G(LRDATE),LRSTATDT>$G(LRDATE) Q
  1. . D ^DIK
  1. Q
  1. ;
  1. ;
  1. PRGNIGHT ; Called from LRNIGHT to purge eligible entries in file 95.4
  1. ;
  1. N LRDAYS,LRDATE,LRSTAT
  1. ;
  1. S LRDAYS=$$GET^XPAR("SYS^PKG","LR MAPPING PURGE DAYS",1,"Q")
  1. S LRDATE=$$FMADD^XLFDT(DT,-LRDAYS,0,0,0)
  1. F LRSTAT=0,.5,.7,1,2 D PURGE(LRSTAT,LRDATE)
  1. ;
  1. Q