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

AGMPIHLO.m

Go to the documentation of this file.
  1. AGMPIHLO ;IHS/SD/TPF - Patient Registration MPI HLO Interface ALL HLO MESSAGES
  1. ;;7.2;IHS PATIENT REGISTRATION;**1,3,5,6**;MAY 20, 2010;Build 23
  1. ;BADEHL1 was used as a template for this routine
  1. Q
  1. ;FOR PATIENT MERGE A40
  1. ;^TMP("XDRFROM",$J,TOMIEN,FROMIEN,FROMIEN_GLOBROOT,TOIEN_GLOBROOT)=FILE
  1. ;^TMP("XDRFROM",2804,6364,1991,"6364;DPT(","1991;DPT(")=2
  1. ;BPMRY = "^TMP(""XDRFROM"",$J)"
  1. NEWMSG(BPMRY) ;EP - FOR PATIENT MERGE
  1. N AGMPIFR,AGMPITO
  1. S AGMPITO=$O(@BPMRY@(0))
  1. I '$G(AGMPITO) S A40ERR=1 D NOTIF(AGMPITO,"Unable to build HL7 message. ERR:A40: NO TO DFN FOR A40 EVENT") Q
  1. I '$D(^DPT(AGMPITO,0)) S A40ERR=1 D NOTIF(AGMPITO,"Unable to build HL7 message. ERR:A40: NO DPT ENTRY FOR DFN "_AGMPITO) Q
  1. ;
  1. S AGMPIFR=$O(@BPMRY@(AGMPITO,0))
  1. I '$G(AGMPIFR) S A40ERR=1 D NOTIF(AGMPIFR,"Unable to build HL7 message. ERR:A40: NO DFN2 FOR A40 EVENT") Q
  1. I '$D(^DPT(AGMPIFR,0)) S A40ERR=1 D NOTIF(AGMPIFR,"Unable to build HL7 message. ERR:A40: NO DPT ENTRY FOR DFN2 "_AGMPIFR) Q
  1. D CREATMSG(AGMPIFR,"A40",AGMPITO,.SUCCESS)
  1. Q
  1. ;
  1. ;BUILD OUTBOUND MESSAGES
  1. ;SEND VTQ TO GET THE OLD VA NON-STANDARD MESSAGE
  1. ;SEND VQQ TO GET A REGULAR HL7 MESSAGE
  1. CREATMSG(DFN,EVNTTYPE,DFN2,SUCCESS) ;EP - START FOR MOST PAT REG TRIGGERS
  1. ;S AGMPSTOP=1
  1. ; 9/07/2017 - GCD - CR 7693 - Disabled VQQ messages.
  1. I $G(EVNTTYPE)="VTQ"!($G(EVNTTYPE)="VQQ") S SUCCESS=0 Q
  1. ;MODIFIED 11/28/2016 - SWH
  1. I '($G(AGMPCHKFLG)),$G(^AGMPCHK(0)),'($G(^AGMPCHK(DUZ(2),1))="VALID") D Q ; CHECK TO SEE IF WE HAVE THE GLOBAL BUILT AND IF THE SITE CAN TRIGGER MESSAGES.
  1. .S SUCCESS=0
  1. .I '($G(^AGMPCHK(DUZ(2)))) D NOTIF("","Site "_DUZ(2)_"isn't defined within the ^AGMPCHK global.") Q
  1. .I '($G(DFN2)) S DFN2=""
  1. .D UPDMSGQ^AGMPCHK(DFN,DFN2,EVNTTYPE,DUZ(2))
  1. .I '($G(ZTQUEUED)) W !,"Site "_DUZ(2)_" / "_$G(^AGMPCHK(DUZ(2)))_" is disabled in ^AGMPCHK, the message was not sent!"
  1. .I $D(^AGMPCHK(DUZ(2),"NT")) D
  1. ..I (+($P(^AGMPCHK(DUZ(2),"NT"),",")))=(+($p($H,","))) S TCHCK=((+($P($H,",",2)))-(+($P(^AGMPCHK(DUZ(2),"NT"),",",2))))
  1. ..I '((+($P(^AGMPCHK(DUZ(2),"NT"),",")))=(+($p($H,",")))) S TCHCK=3600
  1. ..I TCHCK>3599 D
  1. ...D NOTIF("","The "_DUZ(2)_" / "_$G(^AGMPCHK(DUZ(2),1))_" site is disabled.")
  1. ...S ^AGMPCHK(DUZ(2),"NT")=$H
  1. ;
  1. I $G(AGMPSTOP) S SUCCESS=1 Q
  1. ; 9/13/2017 - GCD - CR 7713 - Don't upload demo patients.
  1. I $$DEMOPAT^AGMPHLU($G(DFN)) S SUCCESS=0 Q
  1. I $G(DFN2)'="",$$DEMOPAT^AGMPHLU(DFN2) S SUCCESS=0 Q
  1. N A40ERR
  1. S SUCCESS=1
  1. S A40ERR=0
  1. I $G(EVNTTYPE)="A40" D Q:$G(A40ERR)
  1. .I '$G(DFN2) S A40ERR=1 D NOTIF(DFN,"Unable to build HL7 message. ERR:A40: NO DFN2 FOR A40 EVENT")
  1. .I '$G(DFN) S A40ERR=1 D NOTIF(DFN,"Unable to build HL7 message. ERR:A40: NO DFN FOR A40 EVENT")
  1. .I '$D(^DPT(DFN2,0)) S A40ERR=1 D NOTIF(DFN,"Unable to build HL7 message. ERR:A40: NO DPT ENTRY FOR DFN2 "_DFN2)
  1. .I '$D(^DPT(DFN,0)) S A40ERR=1 D NOTIF(DFN,"Unable to build HL7 message. ERR:A40: NO DPT ENTRY FOR DFN "_DFN)
  1. N HLPM,HLST,ARY,HLQ,APPARMS,HLPM,HLMSGIEN,HLECH,HLFS,ERR,WHO
  1. N LN,HL1,HRCN,FLD,LP,X,LN
  1. S LN=0
  1. ;
  1. I EVNTTYPE="VQQ" D
  1. .W !," THIS IS BOMBING OUT ENSEMBLE"
  1. .W !,"WE WANT TO SEND A NORMAL MESSAGE WHEN DOING VQQ"
  1. .W !,"OR CHANGE THE VTQ EVENT INTO A REGULAR MESSAGE"
  1. I EVNTTYPE'="VTQ",(EVNTTYPE'="M05") D
  1. .S HLPM("MESSAGE TYPE")="ADT"
  1. .S HLPM("EVENT")=EVNTTYPE
  1. E I EVNTTYPE="M05" D
  1. .S HLPM("MESSAGE TYPE")="MFK"
  1. .S HLPM("EVENT")=EVNTTYPE
  1. E D
  1. .S HLPM("MESSAGE TYPE")="VQQ"
  1. .S HLPM("EVENT")="Q02"
  1. ;
  1. S HLPM("VERSION")=2.4
  1. S HLPM("FIELD SEPARATOR")="^"
  1. S HLPM("ENCODING CHARACTERS")="~|\&"
  1. I '$$NEWMSG^HLOAPI(.HLPM,.HLST,.ERR) D Q
  1. .D NOTIF(DFN,"Unable to build HL7 message."_$S($D(ERR):" ERR:"_$G(ERR),1:""))
  1. S HLFS=HLPM("FIELD SEPARATOR")
  1. S HLECH=HLPM("ENCODING CHARACTERS")
  1. S HL1("ECH")=HLECH
  1. S COMP=$E(HL1("ECH"))
  1. S SUBCOMP=$E(HL1("ECH"),4)
  1. S HL1("FS")=HLFS
  1. S HL1("Q")=""
  1. S HL1("VER")=HLPM("VERSION")
  1. ;Create segments
  1. ;
  1. ;THIS CREATES THE 'ODD' NON-STANDARD HL7 VA QUERY MESSAGE
  1. ;I EVNTTYPE="VTQ" D Q
  1. ;.D VTQ^AGMPIHL1(DFN)
  1. ;.I '$D(ERR) D RDF^AGMPIHL1(DFN)
  1. ;.I '$D(ERR) D DOSEND
  1. ;
  1. ;
  1. I EVNTTYPE="M05" D Q
  1. .N SEG,TAG
  1. .S SEG=""
  1. .F S SEG=$O(MFK(SEG)) Q:'SEG D Q:$D(ERR)
  1. ..S TAG=$G(MFK(SEG,1,1,1,1))
  1. ..Q:TAG="ZET"
  1. ..I TAG'="" S TAG=TAG_"("_SEG_")"
  1. ..E S TAG="MFA("_SEG_")"
  1. ..D @TAG
  1. ..I $D(ERR) D NOTIF(DFN,$P(TAG,"(")_"segment could not be created") Q
  1. .D DOSEND
  1. ;
  1. ;REGULAR MESSSAGES
  1. D EVN(EVNTTYPE)
  1. I '$D(ERR) D PID^AGMPIHL1(DFN)
  1. I '$D(ERR),(EVNTTYPE="A08")!(EVNTTYPE="A01")!(EVNTTYPE="A03") D PD1(DFN)
  1. I '$D(ERR),(EVNTTYPE="A08")!(EVNTTYPE="A01")!(EVNTTYPE="A03") D
  1. .D PV1(DFN)
  1. .;I '$D(ERR),(EVNTTYPE'="A01"),(EVNTTYPE'="A03") D OBX(DFN)
  1. ;
  1. I '$D(ERR),($G(EVNTTYPE)'="A40") D ZPD^AGMPIHL1(DFN) ;RPMS SPECIFIC DATA
  1. ;
  1. I '$D(ERR),($G(EVNTTYPE)="A40") D MRG^AGMPIHL1(DFN2) ; DO A40 MERGE SEGMENT
  1. I '$D(ERR),(EVNTTYPE="A28") D NK1(DFN)
  1. ;
  1. DOSEND ;EP
  1. I '$D(ERR) D
  1. .; Define sending and receiving parameters
  1. .;SEE PG71 HLO TECH MANUAL FOR SOME OF THESE PARAMETERS
  1. .S APPARMS("SENDING APPLICATION")="RPMS-MPI"
  1. .S APPARMS("ACCEPT ACK TYPE")="AL" ;Commit ACK type
  1. .I EVNTTYPE="A28" D
  1. ..S APPARMS("APP ACK RESPONSE")="RES^AGMPHIACK"
  1. ..S APPARMS("ACCEPT ACK RESPONSE")="RES^AGMPHIACK"
  1. .E D
  1. ..S APPARMS("APP ACK RESPONSE")="AACK^AGMPIHLO" ;Callback when 'application ACK' is received
  1. ..S APPARMS("ACCEPT ACK RESPONSE")="CACK^AGMPIHLO" ;Callback when 'commit ACK' is received
  1. .S APPARMS("APP ACK TYPE")="NE" ;(FIELD 16) Application ACK type ;TPF - CHANGED TO THIS BECAUSE OF "SE" ERROR
  1. .S APPARMS("QUEUE")="MPI RPMS" ;Incoming QUEUE
  1. .S APPARMS("RECEIVING APPLICATION")="MPI RPMS"
  1. .S WHO("RECEIVING APPLICATION")="MPI" ;THIS DOES OVERRIDE LINE ABOVE MSH-5
  1. .S WHO("FACILITY LINK NAME")="MPI"
  1. .S WHO("STATION NUMBER")="8990" ;IHS/SD/TPF MPI TEST SET MSH-6 RECEIVING FACILITY (MPI SERVER)
  1. .S WHO("IE LINK NAME")="MPI" ;FOR HLO TESTING
  1. .S APPARMS("SENDING FACILITY")=$$GET1^DIQ(4,DUZ(2)_",",99,"E")
  1. .S WHO("SENDING FACILITY")=$$GET1^DIQ(4,DUZ(2)_",",99,"E")
  1. .;S WHO("PORT")=5200 ; THIS SETS THE PORT WE ARE SENDING FROM THIS IS ALSO SET BY THE MPI HL LOGICAL LINK
  1. .S WHO("STATION")=$$GET1^DIQ(4,DUZ(2)_",",99,"E")
  1. .S HLST("SYSTEM","PORT")=$$GET1^DIQ(9009061,DUZ(2)_",",2203) ;LOCAL LISTENER PORT FOR MPI FIELD
  1. .S HLST("SYSTEM","STATION")=$$GET1^DIQ(4,DUZ(2)_",",99,"E")
  1. .;MPI HAS BEEN ASSIGNED PORTS BETWEEN 5200:5299 TO USE
  1. .;5200 FOR TEST SENDER 5201 FOR TEST LISTENER
  1. .;5202 FOR PRD SENDER 5203 FOR PRD LISTENER
  1. .I HLST("SYSTEM","PORT")="" D Q
  1. ..S SUCCESS=0
  1. ..D NOTIF(DFN,"LISTENER PORT NULL IN REG. PARAMETER FILE")
  1. .I HLST("SYSTEM","STATION")="" D Q
  1. ..S SUCCESS=0
  1. ..D NOTIF(DFN,"STATION NUMBER NULL IN FILE 4 ")
  1. .; 05/24/2013 - KJH - TFS8008 - Remove extraneous locks on the HLO globals.
  1. .S SUCCESS=$$SENDONE^HLOAPI1(.HLST,.APPARMS,.WHO,.ERR)
  1. .;I EVNTTYPE="A40" D NOTIF(DFN,"AN A40 MESSAGE HAS BEEN CREATED "_SUCCESS) ; AG*7.2*5/CR 7718 - NOTIF sets SUCCESS to 0 and we don't need this call.
  1. .I 'SUCCESS D
  1. ..D NOTIF(DFN,"Unable to create HL7 message."_$S($D(ERR):" ERR:"_$G(ERR),1:""))
  1. I $D(ERR) D
  1. .I ERR[("NOT DEFINED IN PID^AGMPIHL1") S SUCCESS=1_U_ERR Q ;THIS IS A TIMING ISSUE THAT SEEMS TO RESOLVE ITSELF FOR A08
  1. .S SUCCESS=0
  1. .D NOTIF($G(DFN),"Unable to send HL7 message."_$S($D(ERR):" ERR:"_$G(ERR),1:""))
  1. Q
  1. ;THIS IS FOR HLO APP USE. NOT BEING USED HOWEVER
  1. AACK ; EP - Application ACK callback - called when AA, AE or AR is received.
  1. N DATA,AACK,XQAID,XQDATA,XQA,XQAMSG,MSGID
  1. Q:'$G(HLMSGIEN)
  1. S MSGID=$P($G(^HLB(+HLMSGIEN,0)),U)
  1. S AACK=$G(^HLB(HLMSGIEN,4))
  1. I $P(AACK,U,3)'["|AA|" D
  1. .S XQAMSG="AGMPI message "_MSGID_" did not receive a correct application ack."
  1. .S XQAID="AGMPI,"_MSGID_","_50
  1. .S XQDATA=$P(AACK,U,3)
  1. .S XQA("G.AGMPI MPI")=""
  1. .D SETUP^XQALERT
  1. Q
  1. ;THIS IS FOR HLO APP USE. NOT BEING USED HOWEVER
  1. CACK ; EP - Commit ACK callback - called when CA, CE or CR is received.
  1. N CACK,XQAID,XQAMSG,XQA,XQDATA,MSGID
  1. S MSGID=$P($G(^HLB(+HLMSGIEN,0)),U)
  1. S CACK=$G(^HLB(HLMSGIEN,4))
  1. I $P(CACK,U,3)'["|CA|" D
  1. .S XQAMSG="AGMPI message "_MSGID_" did not receive a correct commit acknowledgement."
  1. .S XQAID="AGMPI,"_MSGID_","_50
  1. .S XQDATA=$P(CACK,U,3)
  1. .S XQA("G.AGMPI MPI")=""
  1. .D SETUP^XQALERT
  1. Q
  1. ;
  1. ; Send Notification to group
  1. ; Input: DFN = Patient
  1. ; MSG = Main message
  1. NOTIF(DFN,MSG) ;EP
  1. N PNAM,PVDIEN,RET,X,SAVE
  1. N XQA,XQAID,XQADATA,XQAMSG
  1. S SUCCESS=0
  1. S PNAM=""
  1. S:$G(DFN)'="" PNAM=$P($G(^DPT(DFN,0)),U)
  1. I $L(PNAM)>15 S PNAM=$E(PNAM,1,15)
  1. S XQAMSG=PNAM_" "
  1. S XQAMSG=XQAMSG_$G(MSG)
  1. S XQAID="ADEN,"_DFN_","_50
  1. S XQDATA="DFN="_DFN
  1. S XQA("G.AGMP MPI")=""
  1. D SETUP^XQALERT
  1. ;Save the DFN in a parameter for correction
  1. S X=$$GET^XPAR("ALL","AGMP MPI TOTAL ERRORS",1,"E")
  1. S X=X+1
  1. S SAVE=DFN_" "_MSG
  1. D EN^XPAR("SYS","AGMP MPI ERROR PTS",X,SAVE)
  1. D EN^XPAR("SYS","AGMP EDR TOTAL ERRORS",1,X)
  1. Q
  1. ;
  1. ERR ;
  1. Q
  1. ;
  1. EVN(EVNTTYPE) ;Create the EVN segment
  1. N %,X,FLD,VAL
  1. D NOW^%DTC
  1. S X=$$HLDATE^HLFNC(%,"TS")
  1. S FACNAME=$$GET1^DIQ(9999999.06,DUZ(2)_",",.01,"E")
  1. ;GOT DATA FROM OLD V1.6 BLDEVT^VAFCQRY2
  1. S USERNAME=DUZ
  1. S USERNAME=$$GET1^DIQ(200,+USERNAME_",",.01)
  1. S USERNAME=$$HLNAME^HLFNC(USERNAME,HL1("ECH"))
  1. ;SET(SEG,VALUE,FIELD,COMP,SUBCOMP,REP)
  1. D MYSET(.ARY,"EVN",0)
  1. D MYSET(.ARY,$S(EVNTTYPE="A01":"A1",EVNTTYPE="A03":"A2",1:EVNTTYPE),1,1,1,1) ;A1 AND A2 MATCH UP TO ENTRIES IN THE 'ADT/HL7 EVENT REASON' FILE
  1. D MYSET(.ARY,DUZ,5,1,1,1)
  1. D MYSET(.ARY,$P(USERNAME,COMP),5,1,2,1)
  1. D MYSET(.ARY,$P(USERNAME,COMP,2),5,1,3,1)
  1. D MYSET(.ARY,"USIHS",5,1,9,1)
  1. D MYSET(.ARY,"0363",5,1,9,3)
  1. D MYSET(.ARY,"L",5,1,10,1)
  1. D MYSET(.ARY,"NI",5,1,13,1)
  1. D MYSET(.ARY,"IHS FACILITY ID -"_FACNAME,5,1,14,1)
  1. D MYSET(.ARY,$P($$SITE^VASITE,"^",3),5,1,14,2)
  1. D MYSET(.ARY,"L",5,1,14,3)
  1. D MYSET(.ARY,$P($$SITE^VASITE,"^",3),7,1,1,1)
  1. S X=$$ADDSEG^HLOAPI(.HLST,.ARY,.ERR)
  1. I $D(ERR) D NOTIF(DFN,"EVT segment could not be created")
  1. Q
  1. ;
  1. PD1(DFN) ;EP
  1. Q:'$G(DFN)
  1. N PD1
  1. S VAFCMN=$$MPINODE^AGMPIPID(DFN)
  1. S CMOR=$P(VAFCMN,"^",3)
  1. I CMOR'="" S SITE=$$NS^XUAF4(CMOR)
  1. E S SITE=""
  1. ;
  1. D MYSET(.ARY,"PD1",0)
  1. D MYSET(.ARY,$P(SITE,U),3,1,1,1)
  1. D MYSET(.ARY,$P(SITE,U),3,1,1,1)
  1. D MYSET(.ARY,"D",3,1,2,1)
  1. D MYSET(.ARY,$P(SITE,"^",2),3,1,3,1)
  1. S PD1=$$ADDSEG^HLOAPI(.HLST,.ARY,.ERR)
  1. I $D(ERR) D NOTIF(DFN,ERR)
  1. Q
  1. ;
  1. PV1(DFN) ;EP - PATIENT VISIT
  1. Q:'$G(DFN)
  1. N PV1
  1. ;
  1. D MYSET(.ARY,"PV1",0)
  1. D MYSET(.ARY,1,1,1,1,1)
  1. D MYSET(.ARY,$G(SDT),44,1,1,1)
  1. S PV1=$$ADDSEG^HLOAPI(.HLST,.ARY,.ERR)
  1. I $D(ERR) D NOTIF(DFN,ERR)
  1. Q
  1. ;
  1. OBX(DFN) ;EP - OBSERVATION/RESULT
  1. Q:'$G(DFN)
  1. N OBX
  1. ;
  1. D MYSET(.ARY,"OBX",0)
  1. D MYSET(.ARY,1,1,1,1,1)
  1. S OBX=$$ADDSEG^HLOAPI(.HLST,.ARY,.ERR)
  1. I $D(ERR) D NOTIF(DFN,ERR)
  1. Q
  1. ;
  1. ;NOT USED; MAY USE IN FUTURE
  1. NK1(DFN) ;EP
  1. Q
  1. N ADDR,NK1,NODE,PHONE,DGNAME,FLD,K,CNT,SHIP,REL,HLQ
  1. S CNT=0
  1. S HLQ=HL1("Q")
  1. F K="EC","NOK" D
  1. .I K="EC" S NODE=$G(^DPT(DFN,.33))
  1. .I K="NOK" S NODE=$G(^DPT(DFN,.21))
  1. .Q:NODE=""
  1. .S CNT=CNT+1
  1. .D MYSET(.ARY,"NK1",0)
  1. .D MYSET(.ARY,CNT,1)
  1. .S DGNAME("FILE")=2,DGNAME("IENS")=DFN
  1. .S DGNAME("FIELD")=$S(K="NOK":.211,K="EC":.331)
  1. .;Name of next of kin
  1. .S FLD=$$HLNAME^XLFNAME(.DGNAME,"","^")
  1. .F LP=1:1:$L(FLD,$E(HLECH)) S VAL=$P(FLD,$E(HLECH),LP) D
  1. ..D MYSET(.ARY,VAL,2,LP)
  1. .;Relationship
  1. .S SHIP=$S(K="EC":$P($G(^AUPNPAT(DFN,31)),U,2),K="NOK":$P($G(^AUPNPAT(DFN,28)),U,2))
  1. .I SHIP'="" D
  1. ..S X=$P($G(^AUTTRLSH(SHIP,0)),U,2)_"^"_$P($G(^AUTTRLSH(SHIP,0)),U,1)_"^UB-92"
  1. ..F LP=1:1:$L(X,$E(HLECH)) S VAL=$P(X,$E(HLECH),LP) D
  1. ...D MYSET(.ARY,VAL,3,LP)
  1. .S ADDR=$$ADDR^VAFHLFNC($P(NODE,U,3,8))
  1. .F LP=1:1:$L(ADDR,$E(HLECH)) S VAL=$P(ADDR,$E(HLECH),LP) D
  1. ..D MYSET(.ARY,VAL,4,LP) ;Address
  1. .S PHONE=$$HLPHONE^HLFNC($P(NODE,U,9))
  1. .I $L(PHONE) D
  1. ..D MYSET(.ARY,PHONE,5) ;Home phone
  1. ..D MYSET(.ARY,"PRN",5,2)
  1. ..D MYSET(.ARY,"PH",5,3)
  1. .S PHONE=$$HLPHONE^HLFNC($P(NODE,U,11))
  1. .I $L(PHONE) D
  1. ..D MYSET(.ARY,PHONE,6) ;Work phone
  1. ..D MYSET(.ARY,"WPH",6,2)
  1. ..D MYSET(.ARY,"PH",6,3)
  1. .D MYSET(.ARY,K,7)
  1. .D MYSET(.ARY,$S(K="EC":"Emergency Contact",K="NOK":"Next of Kin",1:""),7,2)
  1. .S NK1=$$ADDSEG^HLOAPI(.HLST,.ARY,.ERR)
  1. .I $D(ERR) D NOTIF(DFN,ERR)
  1. Q
  1. ;
  1. MFI(SEG) ;EP - FOR MFK RESPONSE TO MFN
  1. N MFI
  1. D MYSET(.ARY,"MFI",0)
  1. I ($G(MFK(SEG,2,1,1,1))="")!($G(MFK(SEG,4,1,1,1))="")!($G(MFK(SEG,7,1,1,1))="") S ERR=1 Q
  1. D MYSET(.ARY,MFK(SEG,2,1,1,1),1,1,1,1)
  1. D MYSET(.ARY,MFK(SEG,4,1,1,1),3,1,1,1)
  1. D MYSET(.ARY,MFK(SEG,7,1,1,1),6,1,1,1)
  1. ;D MYSET(.ARY,MFK(SEG,8,1,2,1),7,1,2,1)
  1. S MFI=$$ADDSEG^HLOAPI(.HLST,.ARY)
  1. Q
  1. ;
  1. MFA(SEG) ;EP - FOR MFK RESPONSE TO MFN
  1. N MFA,MFASEG
  1. S MFASEG=SEG
  1. ;S MFASEG=SEG+.5
  1. D MYSET(.ARY,"MFA",0)
  1. D MYSET(.ARY,$P(MFK(MFASEG),HL1("FS"),2),1)
  1. D MYSET(.ARY,$P(MFK(MFASEG),HL1("FS"),3),2)
  1. D MYSET(.ARY,$P(MFK(MFASEG),HL1("FS"),4),3)
  1. D MYSET(.ARY,$P(MFK(MFASEG),HL1("FS"),5),4)
  1. S MFA=$$ADDSEG^HLOAPI(.HLST,.ARY)
  1. Q
  1. ;
  1. MFE(SEG) ;EP - FOR MFK RESPONSE TO MFN
  1. N MFE
  1. D MYSET(.ARY,"MFE",0)
  1. I ($G(MFK(SEG,2,1,1,1))="")!($G(MFK(SEG,3,1,1,1))="")!($G(MFK(SEG,4,1,1,1))="")!($G(MFK(SEG,5,1,1,1))="") S ERR=1 Q
  1. I ($G(MFK(SEG,5,1,2,1))="")!($G(MFK(SEG,5,1,4,1))="")!($G(MFK(SEG,5,1,5,1))="") S ERR=1 Q
  1. D MYSET(.ARY,MFK(SEG,2,1,1,1),1,1,1,1)
  1. D MYSET(.ARY,MFK(SEG,3,1,1,1),2,1,1,1)
  1. D MYSET(.ARY,MFK(SEG,4,1,1,1),3,1,1,1)
  1. D MYSET(.ARY,MFK(SEG,5,1,1,1),4,1,1,1)
  1. D MYSET(.ARY,MFK(SEG,5,1,2,1),4,1,2,1)
  1. D MYSET(.ARY,MFK(SEG,5,1,4,1),4,1,4,1)
  1. D MYSET(.ARY,MFK(SEG,5,1,5,1),4,1,5,1)
  1. S MFE=$$ADDSEG^HLOAPI(.HLST,.ARY)
  1. Q
  1. ;SET(SEG,VALUE,FIELD,REP,COMP,SUBCOMP)
  1. ;THIS LOOKS MORE LIKE HOW THE ARRAY WILL APPEAR
  1. ;IT ALSO MATCHES THE AGMPPARS V1.6 MESSAGE PARSER'S GENERIC OUTPUT
  1. MYSET(ARY,V,F,R,C,S) ;EP
  1. D SET^HLOAPI(.ARY,.V,.F,.C,.S,.R)
  1. Q