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

XUMFHPQ.m

Go to the documentation of this file.
  1. XUMFHPQ ;ISS/RAM - MFS param server-side handler ;06/28/00
  1. ;;8.0;KERNEL;**299**;Jul 10, 1995
  1. ;
  1. Q
  1. ;
  1. MAIN ; -- entry point
  1. ;
  1. N CNT,ERR,I,X,HLFS,HLCS,ERROR,HLRESLTA,IFN,IEN,TYPE
  1. N VALUE,PARAM,ROOT,SEG,HLSCS,MTYP
  1. ;
  1. D INIT,PROCESS,RESPONSE,SEND,EXIT
  1. ;
  1. Q
  1. ;
  1. INIT ; -- initialize
  1. ;
  1. K ^TMP("DILIST",$J),^TMP("DIERR",$J)
  1. K ^TMP("HLS",$J),^TMP("HLA",$J)
  1. ;
  1. S ERROR=0,CNT=1,MTYP="HLA"
  1. S HLFS=HL("FS"),HLCS=$E(HL("ECH")),HLSCS=$E(HL("ECH"),4)
  1. ;
  1. Q
  1. ;
  1. PROCESS ; -- pull message text
  1. ;
  1. F X HLNEXT Q:HLQUIT'>0 D
  1. .Q:$P(HLNODE,HLFS)=""
  1. .D @($P(HLNODE,HLFS))
  1. ;
  1. Q
  1. ;
  1. MSH ; -- MSH segment
  1. ;
  1. Q
  1. ;
  1. MSA ; -- MSA segment
  1. ;
  1. N CODE
  1. ;
  1. S CODE=$P(HLNODE,HLFS,2)
  1. ;
  1. I CODE="AE"!(CODE="AR") D
  1. .S ERROR=ERROR_U_$P(HLNODE,HLFS,4)_U_$G(ERR)
  1. .D EM^XUMFHPR(ERROR,.ERR)
  1. ;
  1. Q
  1. ;
  1. QRD ; -- QRD segment
  1. ;
  1. Q:ERROR
  1. ;
  1. N WHO,WHAT
  1. ;
  1. S WHO=$P(HLNODE,HLFS,9)
  1. I WHO="" D Q
  1. .S ERROR="1^QRD segment has null missing WHO parameter"
  1. .D EM^XUMFHPR(ERROR,.ERR)
  1. S WHAT=$P(HLNODE,HLFS,10)
  1. I WHAT="" D Q
  1. .S ERROR="1^QRD segment has null missing WHAT parameter"
  1. .D EM^XUMFHPR(ERROR,.ERR)
  1. ;
  1. S IFN=+WHAT
  1. I IFN'=4.001 S ERROR="1^QRD segment invalid WHAT for protocol" Q
  1. ;
  1. S IEN=$$FIND1^DIC(4.001,,"B",$P(WHO,HLCS))
  1. ;
  1. I 'IEN D Q
  1. .S ERROR="1^"_$P(WHO,HLCS)_" not a supported master file"
  1. ;
  1. Q
  1. ;
  1. ;
  1. RESPONSE ; -- build MFR
  1. ;
  1. D INI1,MSA1,QRD1,MFI1,MFE1,ZZZ1,ZZS1
  1. ;
  1. Q
  1. ;
  1. INI1 ; -- initialize
  1. ;
  1. Q:ERROR
  1. ;
  1. D MAIN^XUMFXP(IFN,IEN,11,.PARAM,.ERROR)
  1. I $G(ERROR) D
  1. .S ERROR="1error INI1 of XUMFHPQ"
  1. .D EM^XUMFHPR(ERROR,.ERR)
  1. ;
  1. Q
  1. ;
  1. MSA1 ; - ACK
  1. ;
  1. S ^TMP(MTYP,$J,CNT)="MSA"_HLFS_$S(ERROR:"AE",1:"AA")_HLFS_HL("MID")
  1. S CNT=CNT+1
  1. ;
  1. Q
  1. ;
  1. QRD1 ; -- query definition segment
  1. ;
  1. Q:ERROR
  1. ;
  1. N QDT,QFC,QP,QID,ZDRT,ZDRDT,QLR,WHO,WHAT,WDDC,WDCVQ,QRL,QRD
  1. ;
  1. S QDT=$G(^TMP("XUMF MFS",$J,"PARAM","QDT"))
  1. S QFC=$G(^TMP("XUMF MFS",$J,"PARAM","QFC"))
  1. S QP=$G(^TMP("XUMF MFS",$J,"PARAM","QP"))
  1. S QID=$G(^TMP("XUMF MFS",$J,"PARAM","QID"))
  1. S ZDRT=$G(^TMP("XUMF MFS",$J,"PARAM","DRT"))
  1. S ZDRDT=$G(^TMP("XUMF MFS",$J,"PARAM","DRDT"))
  1. S QLR=$G(^TMP("XUMF MFS",$J,"PARAM","QLR"))
  1. S WHO=$G(^TMP("XUMF MFS",$J,"PARAM","WHO"))
  1. S WHAT=$G(^TMP("XUMF MFS",$J,"PARAM","WHAT"))
  1. S WDDC=$G(^TMP("XUMF MFS",$J,"PARAM","WDDC"))
  1. S WDCVQ=$G(^TMP("XUMF MFS",$J,"PARAM","WDCVQ"))
  1. S QRL=$G(^TMP("XUMF MFS",$J,"PARAM","QRL"))
  1. S QRD="QRD"_HLFS_QDT_HLFS_QFC_HLFS_QP_HLFS_QID_HLFS_ZDRT_HLFS_ZDRDT
  1. S QRD=QRD_HLFS_QLR_HLFS_WHO_HLFS_WHAT_HLFS_WDDC_HLFS_WDCVQ_HLFS_QRL
  1. S ^TMP(MTYP,$J,CNT)=QRD
  1. S CNT=CNT+1
  1. ;
  1. Q
  1. ;
  1. MFI1 ; master file identifier segment
  1. ;
  1. Q:ERROR
  1. ;
  1. N ID,APP,EVENT,ENDT,EFFDT,RESP,MFI
  1. ;
  1. S ID=$G(^TMP("XUMF MFS",$J,"PARAM","MFI"))
  1. S APP=$G(^TMP("XUMF MFS",$J,"PARAM","MFAI"))
  1. S EVENT=$G(^TMP("XUMF MFS",$J,"PARAM","FLEV"))
  1. S ENDT=$G(^TMP("XUMF MFS",$J,"PARAM","ENDT"))
  1. S EFFDT=$G(^TMP("XUMF MFS",$J,"PARAM","MFIEDT"))
  1. S RESP=$G(^TMP("XUMF MFS",$J,"PARAM","RLC"))
  1. S:APP="" APP="MFS" S:EVENT="" EVENT="REP" S:RESP="" RESP="NE"
  1. S:ENDT="" ENDT=$$NOW^XLFDT S:EFFDT="" EFFDT=$$NOW^XLFDT
  1. S MFI=$$MFI^XUMFMFI(ID,APP,EVENT,ENDT,EFFDT,RESP)
  1. I $E(MFI)="-" S ERROR=MFI Q
  1. S ^TMP(MTYP,$J,CNT)=MFI
  1. S CNT=CNT+1
  1. ;
  1. Q
  1. ;
  1. MFE1 ; master file entry segment
  1. ;
  1. Q:ERROR
  1. ;
  1. N EVENT,MFN,EDT,CODE,MFE
  1. ;
  1. S EVENT=$G(^TMP("XUMF MFS",$J,"PARAM","RLEC"))
  1. S MFN=$G(^TMP("XUMF MFS",$J,"PARAM","MFNCID"))
  1. S EDT=$G(^TMP("XUMF MFS",$J,"PARAM","MFEEDT"))
  1. S CODE=$G(^TMP("XUMF MFS",$J,"PARAM","PKV"))
  1. S:EDT="" EDT=$$NOW^XLFDT S:EVENT="" EVENT="MAD"
  1. S MFE=$$MFE^XUMFMFE(EVENT,MFN,EDT,CODE)
  1. I $E(MFE)="-" S ERROR=MFE Q
  1. S ^TMP(MTYP,$J,CNT)=MFE
  1. S CNT=CNT+1
  1. ;
  1. Q
  1. ;
  1. ZZZ1 ; ZZZ segment
  1. ;
  1. Q:ERROR
  1. ;
  1. N NODE,SEQ,VALUE,FIELD
  1. ;
  1. S NODE=""
  1. ;
  1. ;zero node
  1. F SEQ=1:1:6 D
  1. .S FIELD=".0"_SEQ
  1. .S VALUE=$$GET1^DIQ(4.001,IEN_",",FIELD)
  1. .S $P(NODE,HLFS,SEQ)=VALUE
  1. ;
  1. ;mfe node
  1. F SEQ=1:1:9 D
  1. .S FIELD="4."_SEQ
  1. .S VALUE=$$GET1^DIQ(4.001,IEN_",",FIELD)
  1. .S $P(NODE,HLFS,SEQ+6)=VALUE
  1. F SEQ=1,2,4:1:7 D
  1. .S FIELD="4.1"_SEQ
  1. .S VALUE=$$GET1^DIQ(4.001,IEN_",",FIELD)
  1. .S $P(NODE,HLFS,SEQ+15)=VALUE
  1. ;
  1. S ^TMP(MTYP,$J,CNT)="ZMF"_HLFS_NODE
  1. S CNT=CNT+1
  1. ;
  1. Q
  1. ;
  1. ZZS1 ; - ZZS segment
  1. ;
  1. Q:ERROR
  1. ;
  1. N IDX,FLD,VALUE,NODE
  1. ;
  1. S IDX=0
  1. F S IDX=$O(^DIC(4.001,IEN,1,IDX)) Q:'IDX D
  1. .S IENS=IDX_","_IEN_",",NODE=""
  1. .F I=1:1:9 D
  1. ..S FLD=".0"_I
  1. ..S VALUE=$$GET1^DIQ(4.011,IENS,FLD)
  1. ..S $P(NODE,HLFS,I)=VALUE
  1. .;
  1. .S NODE="ZZS"_HLFS_NODE
  1. .S ^TMP(MTYP,$J,CNT)=NODE
  1. .S CNT=CNT+1
  1. ;
  1. Q
  1. ;
  1. SEND ; -- send HL7 message
  1. ;
  1. S HLP("PRIORITY")="I"
  1. ;
  1. D GENACK^HLMA1(HL("EID"),HLMTIENS,HL("EIDS"),"GM",1,.HLRESLT)
  1. ;
  1. ; check for error
  1. I ($P($G(HLRESLT),U,3)'="") D Q
  1. .S ERROR=1_U_$P(HLRESLT,HLFS,3)_U_$P(HLRESLT,HLFS,2)_U_$P(HLRESLT,U)
  1. ;
  1. ; successful call, message ID returned
  1. S ERROR="0^"_$P($G(HLRESLT),U,1)
  1. ;
  1. Q
  1. ;
  1. EXIT ; -- exit
  1. ;
  1. D CLEAN^DILF
  1. ;
  1. K ^TMP("HLS",$J),^TMP("HLA",$J)
  1. K ^TMP("XUMF MFS",$J)
  1. ;
  1. Q
  1. ;