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

APSSSPRO.m

Go to the documentation of this file.
  1. APSSSPRO ;IHS/CIA/PLS - ScriptPro Interface;08-Mar-2012 16:37;PLS
  1. ;;1.0;IHS SCRIPTPRO INTERFACE;**1**;January 11, 2006;Build 13
  1. ;Call via entry point placed in Field 900 of File 9009033
  1. ;Direct entry not supported
  1. ; Modified - IHS/MSC/PLS - 02/08/07 - Line ASK+2 - Added check for ZTSK
  1. ; 12/06/07 - Line ASK+7 - Changed duplicate check for DTOUT to check for DUOUT
  1. Q
  1. EP1(RXIEN,REPRINT,SGY,RXF,RXPI) ;PEP - Main entry point
  1. N APSS,RX0,RX2,RX3,REFIEN,RXSTAT,QTY
  1. N DEVLP
  1. Q:'$G(RXIEN) ; Prescription IEN required
  1. Q:'$D(^APSSPARM($G(DUZ(2))))
  1. Q:'$$SETUP(DUZ(2),.APSS)
  1. TASK ;
  1. I $G(APSS("ASK")),'$$ASK("Send to SCRIPT-PRO") U IO Q
  1. Q:'$G(APSS("DEV")) ; No device
  1. ;S DEVLP=0
  1. ;F S DEVLP=$O(APSS("DEV",DEVLP)) Q:'DEVLP D
  1. ;.
  1. N ZTRTN,ZTIO,ZTDESC,ZTREQ,ZTSAVE,VAR,ZTSK
  1. ;.
  1. ;S DEV=$P(APSS("DEV",DEVLP),U,2)
  1. ;.Q:'DEV ;No device specified
  1. S ZTRTN="EPTASK^APSSSPRO"
  1. S ZTDESC="ScriptPro Interface for RXIEN: "_RXIEN
  1. S ZTDTH=$H
  1. S ZTIO="`"_APSS("DEV")
  1. F VAR="RXIEN","REPRINT","SGY(","RXF","RXPI","PSOSITE" S:$D(VAR) ZTSAVE(VAR)=""
  1. D ^%ZTLOAD
  1. Q
  1. ;
  1. EPTASK ;EP - Tasked entry point
  1. Q:'$$SETUP(DUZ(2),.APSS)
  1. D INIT
  1. ;
  1. Q:'$$DRUGOK($$GETP(RX0,6))
  1. ;
  1. ; Build output from Table
  1. S APSSREC=""
  1. S APSSCMD=$$FIND1^DIC(9009033.3,,,"FILL")
  1. Q:'APSSCMD
  1. D BLDFARY(.APSSFARY,APSSCMD)
  1. ;
  1. D SETRM(0)
  1. U IO W $$PROCARY(APSSCMD,.APSSFARY,.APSSREC)
  1. D:APSS("LOG") LOG(APSSREC,.SGY)
  1. Q
  1. ; Build field array
  1. BLDFARY(ARY,CIEN) ;
  1. N IEN,SEQ
  1. S IEN=0
  1. F S IEN=$O(^APSSCOMD(CIEN,1,IEN)) Q:'IEN D
  1. .S SEQ=+$P($G(^APSSCOMD(CIEN,1,IEN,0)),U,2)
  1. .S:SEQ>0 ARY(SEQ)=IEN
  1. Q
  1. ; Initialize output array
  1. PROCARY(CIEN,FLDS,RET) ;
  1. N LP,VNM
  1. D ADD("|**|<COMMAND>FILL")
  1. S LP=0 F S LP=$O(FLDS(LP)) Q:'LP D
  1. .S VNM=$P(^APSSCOMD(CIEN,1,FLDS(LP),0),U)
  1. .D ADD("<"_VNM_">"_$$DATA(CIEN,FLDS(LP),RXIENS))
  1. D ADD("|##|"_$C(13,10))
  1. Q RET
  1. ; Return data for given tag
  1. DATA(CMDIEN,TAGIEN,RXIENS) ;
  1. N TAG0,FILE,FLD
  1. S TAG0=$G(^APSSCOMD(CMDIEN,1,TAGIEN,0))
  1. S FILE=$P($P(TAG0,U,3),",")
  1. S FLD=$P($P(TAG0,U,3),",",2)
  1. S FMT=$P(TAG0,U,4)
  1. I $L(RXIENS,",")>2 D
  1. .S RXIENS=$S($F(FMT,"R"):RXIENS,1:$P(RXIENS,",",2)_",")
  1. S VAL=""
  1. I FILE,FLD D
  1. .S VAL=$$GET1^DIQ(FILE,RXIENS,FLD,$S(FMT["I":"I",1:"E"))
  1. ; Check for Transform code
  1. I $F(FMT,"Z")>0 D
  1. .X:$L($G(^APSSCOMD(CMDIEN,1,TAGIEN,1))) ^APSSCOMD(CMDIEN,1,TAGIEN,1)
  1. ; Check for Date Format
  1. I $F(FMT,"D")>0 D
  1. .S FMTD=$E(FMT,$F(FMT,"D"))
  1. .S VAL=$TR($$FMTE^XLFDT(VAL,$S(FMTD=2:"7",1:"5")_"Z"),"/","")
  1. .S:FMTD=3 VAL=$E(VAL,1,2)_$E(VAL,5,8)
  1. Q VAL
  1. ; Add a node to the output array
  1. ADD(VAL) ;
  1. S RET=$G(RET,"")_VAL
  1. Q
  1. SETUP(FAC,APSS) ;EP - Build configuration array
  1. N PARAM,DEVLP,CNT,DAT
  1. S APSS("PFL")="N"
  1. S (PARAM,APSS("PARM"))=$G(^APSSPARM(FAC,0))
  1. Q:'PARAM 0
  1. Q:'$$GETP(PARAM,2) 0 ; Interface is turned off
  1. S APSS("DEV")=$$GETDEV(+$G(PSOSITE),+$$GETP(PARAM,3))
  1. S APSS("SIGLINE")=$S($$GETP(PARAM,4):$$GETP(PARAM,4),1:30)
  1. S APSS("CHKDRG")=''$$GETP(PARAM,5)
  1. S APSS("ASK")=''$$GETP(PARAM,6)
  1. S APSS("LOG")=''$$GETP(PARAM,7)
  1. Q 1
  1. ;S CNT=1
  1. ;S APSS("DEV",CNT)=U_$$GETP(PARAM,3)
  1. ;S DEVLP=0
  1. ;F S DEVLP=$O(^APSSPARM(FAC,2,DEVLP)) Q:'DEVLP D
  1. ;.S DAT=^APSSPARM(FAC,2,DEVLP,0)
  1. .Q:'$P(DAT,U,3) ;Is device active?
  1. ;.S CNT=CNT+1
  1. ;.S APSS("DEV",CNT)=DAT
  1. ;Q 1
  1. ;
  1. INIT ;EP - Build data for prescription
  1. S RX0=$G(^PSRX(RXIEN,0))
  1. S RX2=$G(^PSRX(RXIEN,2))
  1. S RX3=$G(^PSRX(RXIEN,3))
  1. S RXSTAT=$G(^PSRX(RXIEN,"STA"))
  1. S PARIEN=+$G(RXPI)
  1. ;S REFIEN=+$O(^PSRX(RXIEN,1,$C(1)),-1)
  1. S REFIEN=+$G(RXF)
  1. S QTY=+$S(PARIEN:$P($G(^PSRX(RXIEN,"P",PARIEN,0)),U,4),REFIEN:$P($G(^PSRX(RXIEN,1,REFIEN,0)),U,4),1:$P(RX0,U,7))
  1. S RXIENS=$S(PARIEN:PARIEN_",",REFIEN:REFIEN_",",1:"")_RXIEN_","
  1. Q
  1. ; Log transmission
  1. LOG(REC,SGY) ;
  1. N APSSNOW,LP
  1. S APSSNOW=$$NOW^XLFDT
  1. L +^XTMP("APSSSPRO"):2
  1. S ^XTMP("APSSSPRO",0)=$$FMADD^XLFDT(DT,7)_U_$$DT^XLFDT
  1. S ^XTMP("APSSSPRO",RXIEN,APSSNOW)=REC
  1. S LP=0 F S LP=$O(SGY(LP)) Q:'LP S ^XTMP("APSSSPRO",RXIEN,APSSNOW,LP)=SGY(LP)
  1. L -^XTMP("APSSSPRO")
  1. Q
  1. ; Check drug availability in ScriptPro
  1. DRUGOK(DRUGIEN) ;EP
  1. I 'APSS("CHKDRG") Q 1 ; Drug checking is disabled
  1. N PARAM
  1. S PARAM=$G(^APSSDRUG(DRUGIEN,0))
  1. Q:'$$GETP(PARAM,1) 0 ; Drug not present
  1. Q:'$$GETP(PARAM,3) 1 ; Inactive date not present
  1. I $$GETP(PARAM,3)<$$FMADD^XLFDT(DT,1) Q 0 ; Drug has been deactivated
  1. Q '(QTY>$$GETP(PARAM,2)) ; Quantity
  1. ;
  1. CHKDRUG(RXIEN) ; PEP - Logic called from field 800 in APSP Control file
  1. N APSS,RX0,RX2,RX3,REFIEN,RXSTAT,QTY
  1. Q:'$$SETUP($G(DUZ(2)),.APSS) 0
  1. D INIT
  1. Q $$DRUGOK($$GETP(RX0,6))
  1. ; Returns given piece of supplied string
  1. GETP(VAL,P) ;EP
  1. Q $P(VAL,U,P)
  1. SIG() ;
  1. S APSS("SIG")=""
  1. S N=0
  1. F S N=$O(SGY(N)) Q:'N D
  1. .I APSS("SIG")="" S APSS("SIG")=SGY(N) Q
  1. .S APSS("SIG")=APSS("SIG")_SGY(N)
  1. Q:$Q APSS("SIG")
  1. Q
  1. ; Return priority
  1. GETPRI(LOCIEN) ;EP
  1. Q:'$G(LOCIEN) 0
  1. Q $S($D(^APSSPARM(DUZ(2),1,LOCIEN,0)):+$$GETP(^APSSPARM(DUZ(2),1,LOCIEN,0),2),1:1)
  1. ;
  1. ASK(PRMPT) ;EP - Prompt user for transmission to ScriptPro
  1. N DIR,DTOUT,DUOUT
  1. I $E(IOST,1)="P"!$G(ZTSK) Q 1 ; User input not available for queued tasks or print devices
  1. S DIR("A")=PRMPT ;"Send to SCRIPT-PRO"
  1. S DIR("B")="N"
  1. S DIR(0)="Y"
  1. D ^DIR
  1. Q:$D(DTOUT)!($D(DUOUT)) 0
  1. Q Y>0
  1. ; Query for drug
  1. HASDRUG(DRUG) ; EP
  1. Q:'$G(DRUG) 0
  1. Q ''$D(^APSSDRUG(DRUG))
  1. ; Set Right Margin of output device
  1. SETRM(X) ;
  1. X ^%ZOSF("RM")
  1. Q
  1. ; Return device for pharmacy division or default
  1. GETDEV(PDIV,DEF) ;EP-
  1. N PDIEN
  1. S PDIEN=$O(^APSSPARM(FAC,2,"B",+$G(PDIV),0))
  1. Q:'PDIEN DEF
  1. S DAT=$G(^APSSPARM(FAC,2,PDIEN,0))
  1. Q $S($P(DAT,U,3)&$P(DAT,U,2):$P(DAT,U,2),1:DEF)