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

APSPES2.m

Go to the documentation of this file.
  1. APSPES2 ;IHS/MSC/PLS - SureScripts HL7 interface - con't;23-Mar-2015 09:06;DU
  1. ;;7.0;IHS PHARMACY MODIFICATIONS;**1008,1011,1016,1018**;Sep 23, 2004;Build 21
  1. ; Return array of message data
  1. ; Input: MIEN - IEN to HLO MESSAGES and HLO MESSAGE BODY files
  1. ; Output: DATA
  1. ; HLMSTATE
  1. PARSE(DATA,MIEN,HLMSTATE) ;EP
  1. N SEG,CNT
  1. Q:'$$STARTMSG^HLOPRS(.HLMSTATE,MIEN)
  1. M DATA("HDR")=HLMSTATE("HDR")
  1. S CNT=0
  1. F Q:'$$NEXTSEG^HLOPRS(.HLMSTATE,.SEG) D
  1. .S CNT=CNT+1
  1. .M DATA(CNT)=SEG
  1. Q
  1. ; Process incoming RDS message
  1. DISP ;EP
  1. N DATA,ARY,SEGORC,SEGIEN,SEGRXD,ERR,RET
  1. N DRG,DCODE,DCODEQ,PVDIEN,DSPNUM,RXIEN
  1. Q:'$G(HLMSGIEN)
  1. D PARSE(.DATA,HLMSGIEN,.HLMSTATE)
  1. S SEGIEN=$$FSEGIEN^APSPES1(.DATA,"ORC")
  1. Q:'SEGIEN 0
  1. M SEGORC=DATA(SEGIEN)
  1. Q:$$GET^HLOPRS(.SEGORC,1,1)'="OK"
  1. S PVDIEN=$$GET^HLOPRS(.SEGORC,10,1)
  1. S RXIEN=$$GET^HLOPRS(.SEGORC,2,1)
  1. Q:'RXIEN
  1. S SEGIEN=$$FSEGIEN^APSPES1(.DATA,"RXD")
  1. Q:'SEGIEN
  1. M SEGRXD=DATA(SEGIEN)
  1. S DSPNUM=$$GET^HLOPRS(.SEGRXD,1)
  1. Q:'DSPNUM
  1. S DSPNUM=DSPNUM-1 ;Adjust fill offset - original = 0
  1. S DCODE=$$GET^HLOPRS(.SEGRXD,2,1)
  1. S DRG=$$GET^HLOPRS(.SEGRXD,2,2)
  1. S DCODEQ=$$GET^HLOPRS(.SEGRXD,2,3)
  1. S ARY("REASON")="X"
  1. S ARY("TYPE")="U"
  1. S ARY("RX REF")=$S(DSPNUM>5:DSPNUM+1,1:DSPNUM) ; adjust for 6=partial
  1. S ARY("COM")="DDrg:"_DRG_$S($L(DCODE):" ("_DCODEQ_":"_DCODE_")",1:"")
  1. S ARY("USER")=PVDIEN
  1. D UPTLOG^APSPFNC2(.RET,RXIEN,0,.ARY)
  1. I DATA("HDR","APP ACK TYPE")="AL" D
  1. .; Generate APP Ack
  1. .N PARMS,ACK,ERR
  1. .S PARMS("ACK CODE")="AA"
  1. .I '$$ACK^HLOAPI2(.HLMSTATE,.PARMS,.ACK,.ERR) W !,ERR Q
  1. .I '$$SENDACK^HLOAPI2(.ACK,.ERR) W !,ERR Q
  1. Q
  1. DSP ;
  1. N HLMSGIEN,HLMSTATE,PARMS
  1. S HLMSGIEN=200000000001
  1. D PARSE(.DATA,HLMSGIEN,.HLMSTATE)
  1. S PARMS("ACK CODE")="AA"
  1. I '$$ACK^HLOAPI2(.HLMSTATE,.PARMS,.ACK,.ERR) W !,ERR Q
  1. I '$$SENDACK^HLOAPI2(.ACK,.ERR) W !,ERR Q
  1. Q
  1. ; Send bulletin
  1. BULL(XMSUB,XMDUZ,WHO,MSG) ;EP
  1. N XMY,XMTEXT
  1. M XMY=WHO
  1. S XMTEXT="MSG("
  1. D ^XMD
  1. Q
  1. ; Return Ordering Provider for HL7 Message
  1. OPRV(MSGIEN) ; EP
  1. N RXIEN,VAL
  1. S VAL=0
  1. S RXIEN=+$$RXIEN(MSGIEN)
  1. Q:'RXIEN ""
  1. Q +$P($G(^PSRX(RXIEN,0)),U,16)
  1. ; Return RX IEN
  1. ; Input: MSGIEN - HLO Message IEN
  1. ; TGL - default to 0, 1=return numeric value in HL7 message
  1. RXIEN(MSGIEN,TGL) ; EP
  1. N RET,RXN
  1. S TGL=$G(TGL,0)
  1. D PARSE(.DATA,MSGIEN,.HLMSTATE)
  1. S SEGIEN=$$FSEGIEN^APSPES1(.DATA,"ORC")
  1. Q:'SEGIEN ""
  1. M SEGORC=DATA(SEGIEN)
  1. S RXN=$$GET^HLOPRS(.SEGORC,2,1)
  1. S RET=$S(TGL:RXN,$D(^PSRX(+RXN,0)):+RXN,1:0)
  1. Q RET
  1. ; Return Pharmacy Info for Activity Log
  1. ; Input - RXIEN - Prescription IEN
  1. PHMINFO(RXIEN) ; EP -
  1. N PHM
  1. S PHM=$$GPHM^APSPES1(RXIEN)
  1. Q:'PHM "UNKNOWN"
  1. Q $$GET1^DIQ(9009033.9,PHM,.01)_" "_$$HLPHONE^HLFNC($$GET1^DIQ(9009033.9,PHM,2.1))
  1. ;
  1. REFRES ; EP - Refill request callback
  1. ;Build response to Refill Request
  1. N DATA,PARMS,SEG,ACK,ARY,ERR,ORID,SEGRX0,REFILL,RR,ORITM,PRV,DFN
  1. N RXIEN,FN,DEA,MATCHK
  1. S MATCHK=""
  1. D PARSE^APSPES2(.DATA,$G(HLMSGIEN),.HLMSTATE)
  1. ; Create entry in APSP REFILL REQUEST file
  1. ; If possible, generate order
  1. S FN=9009033.91
  1. S RR=$$ADDRR(+$G(HLMSGIEN))
  1. Q:$$GET1^DIQ(9009033.91,RR,.03,"I")=8 ;Do not process duplicate record
  1. S RXIEN=+$$GET1^DIQ(9009033.91,RR,.06,"I")
  1. S DEA=$$DEA($P($G(^PSRX(RXIEN,0)),U,6))
  1. I RR,RXIEN D ;,'$$DEACLS(DEA,2) D
  1. .I '$D(^PSRX(RXIEN,0)) D Q
  1. ..S MATCHK=MATCHK_"Z"
  1. .;Only allow automap if patient and provider match and there is an order
  1. .I MATCHK["P"&(MATCHK["D") D
  1. ..S ORID=$$GENRENEW^APSPES4(HLMSGIEN,RXIEN,$$GET1^DIQ(52,RXIEN,16,"I"),$$GETVAL(HLMSGIEN,"RXO",13,1),RR)
  1. ..I ORID D
  1. ...S FDA(FN,RR_",",.02)=+ORID
  1. ...S ORITM=$$VALUE^ORCSAVE2(+ORID,"ORDERABLE")
  1. ...S:ORITM FDA(FN,RR_",",1.1)=ORITM
  1. ...S FDA(FN,RR_",",.03)=1
  1. ...S FDA(FN,RR_",",1.3)=PRV
  1. ...S FDA(FN,RR_",",1.2)=DFN ; Patient IEN
  1. ...S FDA(FN,RR_",",.11)=MATCHK
  1. ...D FILE^DIE("K","FDA")
  1. ...;MERGE DATA FROM ORDER RESPONSE LIST TO REFILL REQUEST RESPONSE LIST
  1. ...K ^APSPRREQ(RR,4.5)
  1. ...M ^APSPRREQ(RR,4.5)=^OR(100,ORID,4.5)
  1. ...S $P(^APSPRREQ(RR,4.5,0),U,2)="9009033.913A"
  1. ..E D
  1. ...N DATA
  1. ...S MATCHK=MATCHK_"Z"
  1. ...S FDA(FN,RR_",",.03)=0 ;9 ;PLS
  1. ...S FDA(FN,RR_",",.11)=MATCHK ;PLS
  1. ...D FILE^DIE("K","FDA")
  1. ...D UPTRRACT^APSPES3(RR,$P(ORID,U,2))
  1. .E D
  1. ..;Store the data but send it to the queue
  1. ..S:ORITM FDA(FN,RR_",",1.1)=ORITM
  1. ..I +PRV S FDA(FN,RR_",",1.3)=PRV
  1. ..I +DFN S FDA(FN,RR_",",1.2)=DFN ; Patient IEN
  1. ..S FDA(FN,RR_",",.11)=MATCHK
  1. ..S FDA(FN,RR_",",.03)=0
  1. ..D FILE^DIE("K","FDA")
  1. E D
  1. .N HL7PON,ERRFLG
  1. .S HL7PON=$$RXIEN(HLMSGIEN,1) ;Get PON sent in HL7 request
  1. .I HL7PON?1.N,'(MATCHK["O") S ERRFLG=1
  1. .S:$G(ORITM) FDA(FN,RR_",",1.1)=ORITM
  1. .I +$G(DFN) S FDA(FN,RR_",",1.2)=DFN ; Patient IEN
  1. .I +$G(PRV) S FDA(FN,RR_",",1.3)=PRV ; Provider IEN
  1. .S FDA(FN,RR_",",.03)=$S($G(ERRFLG):9,1:0)
  1. .S FDA(FN,RR_",",.11)=MATCHK
  1. .D FILE^DIE("K","FDA")
  1. .I $G(ERRFLG) D
  1. ..D UPTRRACT^APSPES3(RR,"PON does not match our records")
  1. ..D ERR900^APSPES4(RR,"PON does not match our records")
  1. Q
  1. SET(ARY,V,F,C,S,R) ;EP
  1. D SET^HLOAPI(.ARY,.V,.F,.C,.S,.R)
  1. Q
  1. ; Add entry to REFILL REQUEST file
  1. ADDRR(MSGIEN) ; EP -
  1. N FDA,FN,I,MSGID,ERR,IENS,SPI,RXIEN,DAYS,ACTSPI,NOTES
  1. N FILLS,HMSG,PHARM,SSNUM,DXCODE,DX,FIEN,DAW
  1. S FN=9009033.91,I="+1,",DFN=0,FIEN=0
  1. S FDA(FN,I,.01)=$$GET1^DIQ(778,MSGIEN,.01) ; Message ID
  1. S FDA(FN,I,.04)=$$GET1^DIQ(778,MSGIEN,.16,"I") ; Message D/T
  1. S FDA(FN,I,.05)=MSGIEN ; HLO Message IEN
  1. S FDA(FN,I,.07)=$$NOW^XLFDT() ; Last Update D/T
  1. ;Check for PON
  1. S RXIEN=$$RXIEN^APSPES2(MSGIEN)
  1. S:RXIEN MATCHK=MATCHK_"O"
  1. ;Patient check for matching pts
  1. S:'DFN DFN=$$HRCNF^APSPFUNC($$GETVAL(MSGIEN,"PID",3,1))
  1. I DFN=-1 D
  1. .I 'RXIEN S DFN=$$CHKNME^APSPES4(MSGIEN) ;See if pt in PID segment is in file 2
  1. .E D
  1. ..;check the pt in the order against the pt in the PID segment
  1. ..S DFN=$$GET1^DIQ(52,RXIEN,2,"I")
  1. ..S DFN=$$CHKOPT^APSPES4(DFN)
  1. I +DFN S MATCHK=MATCHK_"P" ;Patients match
  1. ;Medication check
  1. I RXIEN D
  1. .S ORITM=$$CHKDRG^APSPES4(MSGIEN,RXIEN) ;Check the drug in the message
  1. E D
  1. .S ORITM=$$FNDORD^APSPES4(MSGIEN) ;Try and find the pharmacy orderable item for mapping in the queue
  1. I +ORITM S MATCHK=MATCHK_"M" ;Drugs match
  1. ;Provider check
  1. S SPI=$$GETVAL(MSGIEN,"ORC",12,1)
  1. S PRV=$$FIND1^DIC(200,,"O",SPI,"ASPI")
  1. S ACTSPI=1
  1. I +PRV S ACTSPI=$$EFF(PRV)
  1. I 'RXIEN&(+PRV)&(+ACTSPI) S MATCHK=MATCHK_"D"
  1. I +RXIEN&(+PRV)&(+ACTSPI)&(PRV=$$GET1^DIQ(52,RXIEN,4,"I")) S MATCHK=MATCHK_"D"
  1. S SSNUM=$$GETVAL(MSGIEN,"ORC",3,1)
  1. S FILLS=$$GETVAL(MSGIEN,"RXO",13,1) ;Number of fills requested
  1. I FILLS=""!(FILLS=0) S FILLS=1
  1. S:RXIEN FDA(FN,I,.06)=RXIEN ; Original Prescription
  1. S PHARM=$$GETVAL(MSGIEN,"RXE",40,1)
  1. S:PHARM PHARM=$$FIND1^DIC(9009033.9,,"O",PHARM,"C")
  1. S:PHARM FDA(FN,I,1.7)=PHARM
  1. S DAYS=$$GETVAL(MSGIEN,"ORC",7,3) ; Days Supply
  1. I +DAYS=0 S DAYS=$E(DAYS,2,$L(DAYS))
  1. S DAW=$$GETVAL(MSGIEN,"RXO",9,1) ; DAW
  1. S DAW=$S(DAW="G":0,DAW="T":0,1:1)
  1. S FDA(FN,I,1.5)=+DAYS
  1. S FDA(FN,I,1.4)=$$GETVAL(MSGIEN,"RXO",11,1) ; Quantity
  1. S FDA(FN,I,1.9)=FILLS ; Number of fills
  1. S FDA(FN,I,.1)=SSNUM ; Surescripts number
  1. S FDA(FN,I,1.12)=DAW
  1. ;Add Diagnosis
  1. S DXCODE=$$GETVAL(MSGIEN,"DG1",3,1)
  1. S DX=$$GETVAL(MSGIEN,"DG1",3,2)
  1. I DX=""&(DXCODE'="") D
  1. .I $$AICD^BGOUTL2 S DX=$P($$ICDDX^ICDEX(DXCODE,DT),U,4)
  1. .E S DX=$P($$ICDDX^ICDCODE(DXCODE,DT),U,4)
  1. S FDA(FN,I,7.1)=DX
  1. S FDA(FN,I,7.2)=DXCODE
  1. ;Add Notes to Pharmacist
  1. S NOTES=$$GETVAL(MSGIEN,"RXO",6,2)
  1. S FDA(FN,I,4.1)=NOTES
  1. S FIEN=$$CHKSSNUM^APSPES4(SSNUM)
  1. S FDA(FN,I,.03)=$S(FIEN:8,1:0) ; Status
  1. D UPDATE^DIE(,"FDA","IENS","ERR")
  1. ;TODO - PROCESS ERR
  1. ;TODO - POPULATE OTHER FIELDS
  1. K ERR
  1. S I=+IENS(1)_","
  1. D GETHMSG(MSGIEN,.HMSG)
  1. S FDA(FN,I,5)=HMSG ; HL7 Message
  1. D FILE^DIE("K","FDA","ERR")
  1. D SIG(+IENS(1))
  1. D DOSES(+IENS(1)) ;Add medication instructions multiple
  1. I FIEN D
  1. .D SETDUP^APSPES4(FIEN,+IENS(1))
  1. .N S
  1. .S S=$$GET1^DIQ(9009033.91,FIEN,.03,"I") ;Status
  1. .I S=2!(S=3)!(S=5) D
  1. ..D NOTIF^APSPES4(,"Duplicate SS Request received","DUP:"_+IENS(1),$$GET1^DIQ(9009033.91,FIEN,1.2,"I"),$$GET1^DIQ(9009033.91,FIEN,1.3,"I"))
  1. Q +$G(IENS(1))
  1. ; Extract data from segment
  1. ; Input: MSG - Message ien
  1. ; SEG - Segment name
  1. ; FLD - Field #
  1. ; OFF - Offset in field (default to 1)
  1. GETVAL(MSG,SEG,FLD,OFF) ;EP -
  1. N DATA,HLMSTATE,ARY,SEGIEN,SEGARY
  1. S OFF=$G(OFF,1)
  1. D PARSE(.DATA,MSG,.HLMSTATE)
  1. Q:'$D(DATA) ""
  1. S SEGIEN=$$FSEGIEN^APSPES1(.DATA,SEG)
  1. Q:'SEGIEN ""
  1. M SEGARY=DATA(SEGIEN)
  1. Q $$GET^HLOPRS(.SEGARY,FLD,OFF)
  1. DOSES(IEN) ;Get dosage fields
  1. N HLMSG,HLDATA,APSPORC,SEG,CNT,I,FDA,AIEN,ERR,FN,MUL,N,D,RTE,ROUTE,TYPE,FORM,FORMT,CONJ,DUR
  1. S HLMSG=$$GHLDAT^APSPESG(IEN)
  1. S APSPORC=$$GETSEG^APSPESG(.HLDATA,"ORC")
  1. S SEG=$P(APSPORC,"|",8)
  1. S CNT=$L(SEG,"~")
  1. S FN=9009033.912
  1. F I=2:1:CNT D
  1. .S MUL=$P(SEG,"~",I)
  1. .S AIEN="+"_I_","_IEN_","
  1. .S FDA(FN,AIEN,1.3)=$P(MUL,"^",1)
  1. .S DUR=$P(MUL,"^",3)
  1. .I DUR="INDEF" S DUR=""
  1. .S N=$E(DUR,1,1)
  1. .S D=$E(DUR,2,$L(DUR))
  1. .S DUR=D_N
  1. .S FDA(FN,AIEN,1.5)=DUR
  1. .S FDA(FN,AIEN,1.1)=$P(MUL,"^",8)
  1. .S FDA(FN,AIEN,1.8)=$P(MUL,"^",2)
  1. .I CNT>2 D
  1. ..S CONJ=$P(MUL,"^",9)
  1. ..S FDA(FN,AIEN,1.6)=$S(CONJ="S":"T",1:"A")
  1. .;Get the dose type
  1. .S TYPE=$$GETVAL(MSGIEN,"RXO",12,1)
  1. .S FORMT=""
  1. .I TYPE'="" D
  1. ..S FORM=$O(^APSPNCP(9009033.7,"D",TYPE,""))
  1. ..I FORM'="" S FORMT=$P($G(^APSPNCP(9009033.7,FORM,0)),U,2)
  1. .S FDA(FN,AIEN,.01)=$P(MUL,"^",8)_"&"_$P(MUL,"^",1)_"&&"_FORMT_"&"_$P(MUL,"^",8)_$P(MUL,"^",1)
  1. .;Lookup the route
  1. .S RTE=""
  1. .S ROUTE=$$GETVAL(MSGIEN,"RXR",1,1)
  1. .I ROUTE'="" S RTE=$O(^PS(51.2,"B",ROUTE,""))
  1. .S FDA(FN,AIEN,1.7)=RTE
  1. .D UPDATE^DIE(,"FDA","AIEN","ERR")
  1. .K FDA,ERR
  1. Q
  1. SIG(IEN) ;Store sig
  1. N FN,FDA,AIEN,ERR,X,X1,X2
  1. S X2=""
  1. S FN=9009033.913
  1. S AIEN="+1,"_IEN_","
  1. S X=$$GETVAL(MSGIEN,"RXO",7,2) ; SIG
  1. I $L(X)>200 S X1=$E(X,1,200),X2=$E(X,201,$L(X))
  1. E S X1=X
  1. S FDA(FN,AIEN,.01)=X1
  1. D UPDATE^DIE(,"FDA","AIEN","ERR")
  1. I X2'="" D
  1. .S FDA(FN,AIEN,.01)=X2
  1. .D UPDATE^DIE(,"FDA","AIEN","ERR")
  1. K ERR
  1. Q
  1. DEA(DRUG) ; Return DEA value
  1. N DEA
  1. S DEA=+$$GET1^DIQ(50,DRUG,3)
  1. Q DEA
  1. DEACLS(DEA,CLS) ; Return boolean value for comparison
  1. Q CLS[DEA
  1. ;
  1. PREPPTXT(RET,RRIEN) ; Return prepared text from Pharmacy
  1. N M,C
  1. S RRIEN=$G(RRIEN,0)
  1. S M=$P(^APSPRREQ(RRIEN,0),U,5)
  1. S @RET@(1)="Pharmacy: "_$$GETVAL(M,"RXE",40,2)_" ("_$$FMTPHN($$GETVAL(M,"RXE",45))_")"
  1. S @RET@(2)="Drug description: "_$$GETVAL(M,"RXO",1,2)
  1. S @RET@(3)="Quantity: "_$$GETVAL(M,"RXO",11)_" "_$$GET1^DIQ(9009033.7,$$FIND1^DIC(9009033.7,,,$$GETVAL(M,"RXO",12)),1)
  1. S @RET@(4)="Days Supply: "_$$GETVAL(M,"ORC",7,3)
  1. S @RET@(5)="Sig-Directions: "_$$GETVAL(M,"RXO",7,2)
  1. S @RET@(6)="Note: "_$$GETVAL(M,"RXO",6,2)
  1. S @RET@(7)="Refills: "_+$$GETVAL(M,"RXO",13,1)
  1. S @RET@(8)="Substitution allowed: "_$$ESUBST($$GETVAL(M,"RXO",9))
  1. S @RET@(9)="Last fill date: "_$$FMTE^XLFDT($$FMDATE^HLFNC($$GETVAL(M,"ORC",27,1)),"5DZ0")
  1. S @RET@(10)=" "
  1. S @RET@(11)="Diagnosis: "_$$GETVAL(M,"DG1",3,2)
  1. Q
  1. ; Return full HL7 message
  1. GETHMSG(MSGIEN,DATA) ;EP
  1. N MSG,SEG,CNT
  1. S DATA=$NA(^TMP("REFREQ",$J))
  1. K @DATA
  1. Q:'$$GETMSG^HLOMSG(MSGIEN,.MSG)
  1. S CNT=1
  1. S SEG(1)=MSG("HDR",1)_MSG("HDR",2)
  1. D ADD(.SEG)
  1. F Q:'$$HLNEXT^HLOMSG(.MSG,.SEG) D
  1. .D ADD(.SEG)
  1. Q
  1. ; Return external text for Substitution
  1. ESUBST(VAL) ;
  1. Q $S(VAL="N":"Not Authorized",VAL="T":"Allow therapeutic",1:"Allowed Generic")
  1. I() ;EP -
  1. S CNT=CNT+1
  1. Q CNT
  1. ; Return external text for diagnosis
  1. GETDIAG(MSG) ; EP -
  1. N TXT,DATA,ARY,SEG,HLMSTATE,HDR,SEGIEN,SEGDG1
  1. S TXT=""
  1. I '$$STARTMSG^HLOPRS(.HLMSTATE,MSG,.HDR) Q
  1. F Q:'$$NEXTSEG^HLOPRS(.HLMSTATE,.SEG) D
  1. .I $$GET^HLOPRS(.SEG,0)="DG1" D
  1. ..S TXT=$$GET^HLOPRS(.SEG,3,1)_" ("_$$GET^HLOPRS(.SEG,3,3)_")"
  1. ..I $L(TXT) S C=C+1,@RET@(C)=TXT
  1. Q DX
  1. ; Add data to array
  1. ADD(SEG) ; EP -
  1. N I
  1. S I=0 F S I=$O(SEG(I)) Q:'I S @DATA@($$I())=SEG(I)
  1. S @DATA@($$I())=""
  1. Q
  1. ADD1(SEG) ;
  1. N QUIT,I,J,LINE
  1. S QUIT=0
  1. S (I,J)=1
  1. S LINE(1)=$E(SEG(1),1,255),SEG(1)=$E(SEG(1),81,9999)
  1. I SEG(1)="" K SEG(1)
  1. D SHIFT(.I,.J)
  1. S @VALMAR@($$I,0)=LINE(1)
  1. S I=1
  1. F S I=$O(LINE(I)) Q:'I D
  1. .S @VALMAR@($$I,0)=LINE(I)
  1. Q
  1. ;
  1. SHIFT(I,J) ;
  1. I '$D(SEG(I)) S I=$O(SEG(0)) Q:'I
  1. I $L(LINE(J))<255 D
  1. .N LEN
  1. .S LEN=$L(LINE(J))
  1. .S LINE(J)=LINE(J)_$E(SEG(I),1,255-LEN)
  1. .S SEG(I)=$E(SEG(I),256-LEN,9999)
  1. .I SEG(I)="" K SEG(I)
  1. E D
  1. .S J=J+1
  1. .S LINE(J)="-"
  1. D SHIFT(.I,.J)
  1. Q
  1. ; Return formatted phone number
  1. FMTPHN(X) ;EP
  1. N RES
  1. I $E(X,1,10)?10N Q "("_$E(X,1,3)_")"_$E(X,4,6)_"-"_$E(X,7,10)_$S($L($E(X,11,20)):" "_$E(X,11,20),1:"")
  1. I $E(X,1,7)?7N Q $E(X,1,3)_"-"_$E(X,4,7)_" "_$E(8,20)
  1. I X?10N1" ".6UN Q "("_$E(X,1,3)_")"_$E(X,4,6)_"-"_$E(X,7,10)_$S($L($E(X,11,20)):" "_$E(X,11,20),1:"")
  1. I X?3N1"-"3N1"-"4N.1" ".A Q "("_$E(X,1,3)_")"_$E(X,5,12)_" "_$E(X,13,20)
  1. I X?3N1"-"4N Q X
  1. I X?3N1"-"4N.1" ".6UN Q X
  1. Q X
  1. ; Check status of APSP REFIIL REQUEST entry
  1. ; Input: IEN - IEN
  1. ; STA - Status to check (if not passed, set to -1 and return status value)
  1. RREQSTAT(DATA,IEN,STA) ; EP -
  1. S RES=$P($G(^APSPRREQ(IEN,0)),U,3)
  1. S:'$L($G(STA)) STA=-1
  1. S DATA=$S(STA=-1:RES,1:RES=STA)
  1. Q
  1. EFF(PRV) ;See if SPI is ACTIVE
  1. N EFF,IN
  1. S IN=1
  1. S EFF=9999999 F S EFF=$O(^VA(200,PRV,"SPISTATUS",EFF),-1) Q:'+EFF D
  1. .S IN=$P($G(^VA(200,PRV,"SPISTATUS",EFF,0)),U,2)
  1. Q IN
  1. ACK(HLMSGIEN,MSGTXT) ; Generate APP Ack
  1. N PARMS,ACK,ERR,OCC,DNYC
  1. S PARMS("ACK CODE")="AE"
  1. S PARMS("ERROR MESSAGE")=MSGTXT
  1. D PARSE^APSPES2(.DATA,HLMSGIEN,.HLMSTATE)
  1. I $$ACK^HLOAPI2(.HLMSTATE,.PARMS,.ACK,.ERR) D
  1. .S OCC="UF",DNYC="AF"
  1. .D SETACK^APSPES3
  1. .I '$$SENDACK^HLOAPI2(.ACK,.ERR)&(+RR) D UPTRRACT^APSPES3(RR,$G(ERR,"There was a problem generating the HL7 message"))
  1. Q