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

BOPRNEW1.m

Go to the documentation of this file.
  1. BOPRNEW1 ;IHS/ILC/ALG/CIA/PLS - ILC Queue Processor;06-Feb-2006 22:12;SM
  1. ;;1.0;AUTOMATED DISPENSING INTERFACE;**1**;Jul 26, 2005
  1. Q
  1. ;This routine should be queued to run or set up as in the automatic
  1. ;partition startup process. It should always be running.
  1. ;
  1. ;Get Lock / Only one process should be running at a time
  1. GO ;TaskMan Entry
  1. L +^BOP(90355.1,"FILER"):1 E Q
  1. ;
  1. S X="ERR^BOPRNEW",@^%ZOSF("TRAP")
  1. ;Just in case it is started without TaskMan, initialize an environment
  1. S DIQUIET=1 D DT^DICRW
  1. ;
  1. ;Loop on Queue, looking for transactions that have been received
  1. ;
  1. N BOPC,BOPX,BOPXX,BOPDA,BOPSTOP,BOPNONU
  1. S (BOPXX,BOPC)=0
  1. LOOP S BOPXX=$O(^BOP(90355.1,"AC",0,BOPXX))
  1. I +$G(^BOP(90355,1,12))=1 Q ; all interfaces stopped
  1. Q:'$P($G(^BOP(90355,1,"SITE")),U,8) ; Default Clerk must be defined
  1. I 'BOPXX S BOPC=BOPC+1 G HANG
  1. ;
  1. ;Only process "Ready" & "Fillable" Transactions
  1. S I=$G(^BOP(90355.1,BOPXX,99))
  1. G LOOP:$P(I,U)'=1,LOOP:$P(I,U,2)
  1. ;
  1. ;Put data into local array
  1. K BOPIN S J=0,I=0
  1. F S I=$O(^BOP(90355.1,BOPXX,"DATA",I)) Q:'I S J=J+1,BOPIN(J)=^(I,0)
  1. ;
  1. S BOPDA=BOPXX,BOPSTOP=0,BOPNONU=1
  1. D ACTION
  1. ;
  1. ;Mark the Transaction processed
  1. S DIE=90355.1,DA=BOPDA,DR="99.1///9" D ^DIE
  1. K ^BOP(90355.1,"AC",0,BOPDA)
  1. ;
  1. ;Continue to run if Run flag is set.
  1. LOOPQ I +$G(^BOP(90355,1,4)) S BOPC=0 G LOOP
  1. Q
  1. ;
  1. HANG ;Loop control if nothing to process
  1. ;If nothing ready to work on wait a bit, then try again.
  1. ;This process will quit if no transactions are received for an hour.
  1. ;If it quits, it will be restarted automatically by the Monitor.
  1. ;
  1. H 36 G LOOPQ:BOPC<99
  1. Q
  1. ;
  1. ACTION ;Entry from BOPOR to send Acknowledgement
  1. ;Initialize
  1. N BOPX
  1. S BOPN="",I=0
  1. F S I=$O(BOPIN(I)) Q:'I D
  1. .S X=$P(BOPIN(I),"|") I X'="" S BOPX(X)=BOPIN(I)
  1. ;
  1. ;BOPN=MSH Segment
  1. ;
  1. F S BOPN=$O(BOPIN(BOPN)) Q:BOPN<1 I $P(BOPIN(BOPN),"|")="MSH" D
  1. .S BOPII=$O(BOPIN(BOPN)) Q:'BOPII
  1. .S BOPQRD=BOPIN(BOPII),ACTION=$P($P(BOPIN(BOPN),"|",9),U)
  1. .I ACTION'["DFT" Q:BOPQRD'["QRD|"
  1. .S X=BOPIN(BOPN),RECAPP=$P(X,"|",3),SNDAPP=$P(X,"|",5)
  1. .S FLD="|",HLFS="|",ENCD="^~\&",HLECH="^~\&",SITE=""
  1. .S COM=$E(ENCD,1),REP=$E(ENCD,2),ESC=$E(ENCD,3),SCOM=$E(ENCD,4)
  1. .S X=^BOP(90355,1,0),PROCID=$P(X,U,12),VERID=$P(X,U,13)
  1. .S MCID=$$NOW^XLFDT(),TIME=$$HLDATE^HLFNC(MCID),TIME=$P(TIME,"-",1)
  1. .;If processing from TCP/IP Listener transmit ACK and Quit
  1. .I ACTION="DFT" D Q
  1. ..D DFT^BOPROC(BOPDA)
  1. .I ACTION="ETO" D Q
  1. ..D INIT^BOPCAP Q:$D(BOPQ)
  1. ..S BOP(.02)="Q03",BOP(.04)="QRY",X=$P($G(BOPX("ZPM")),"|",25)
  1. ..S BOPYR=$E(X,1,4),BOPMD=$E(X,5,8),BOPT=$E(X,9,12)
  1. ..S BOP(.03)=BOPYR-1700_BOPMD_+("."_BOPT)
  1. ..S BOP1="",BOP10=""
  1. ..K BOPQ D MSH^BOPCAP Q:$G(BOPQ) D FLAG^BOPCAP
  1. ..D DFT^BOPROC(BOPDA)
  1. .I ACTION="EPQ" D Q
  1. ..S X=$P(BOPQRD,"|",9) Q:'X
  1. ..S X=$O(^DPT("SSN",X,0)) Q:'X
  1. ..S (BOPDFN,DFN)=X
  1. ..D INIT^BOPCAP Q:$D(BOPQ)
  1. ..D PID^BOPCP,PV1^BOPCP
  1. ..S BOP(.02)="A01",BOP(.04)="ADT"
  1. ..S BOP(10.2)=$G(^DPT(DFN,.1))
  1. ..S BOP(10.3)=$P($G(^DPT(DFN,.101)),U)
  1. ..S X=$P($G(^DPT(DFN,.1041)),U)
  1. ..S BOP(10.4)=$P($G(^VA(200,+X,0)),U)
  1. ..S X=$P($G(^DPT(DFN,.105)),U),BOP(10.6)=$P($G(^DGPM(+X,0)),U)
  1. ..S BOP(.03)=BOP(10.6)
  1. ..S BOP10=U_BOP(10.2)_U_BOP(10.3)_U_BOP(10.4)_U_U_BOP(10.6)
  1. ..K BOPQ D MSH^BOPCAP Q:$G(BOPQ) D FLAG^BOPCAP
  1. .I ACTION="EOQ" D Q
  1. ..S X=$P(BOPQRD,"|",9) Q:'X S X=$O(^DPT("SSN",X,0)) Q:'X
  1. ..S (DFN,PSGP)=X
  1. ..F BOPO=0:0 S BOPO=$O(^PS(55,DFN,5,BOPO)) Q:BOPO<1 D
  1. ...S BOPN0=$G(^PS(55,DFN,5,BOPO,0)) Q:'BOPN0
  1. ...S PSGORD=BOPO ;Order Number
  1. ...Q:$P(BOPN0,U,9)'="A" ;Status
  1. ...Q:'$P($G(^PS(55,DFN,5,BOPO,4)),U,9) ;Verified
  1. ...D NEW^BOPCAP
  1. Q
  1. ERR ;S ^TMP($J,"BOPO","NEW1",$S($G(ZTSK):ZTSK,1:$J))=$$EC^%ZOSV() Q
  1. Q