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

INHVAX.m

Go to the documentation of this file.
  1. INHVAX(UIF,ERROR) ;JSH; 21 Jul 92 10:28;Transceiver/Receiver
  1. ;;3.01;BHL IHS Interfaces with GIS;;JUL 01, 2001
  1. ;COPYRIGHT 1991-2000 SAIC
  1. ;
  1. ;First part is the transceiver
  1. S SYSTEM="SC" N DIC,DLAYGO
  1. ;First, get an entry in the DHCP/SAIC-CARE MESSAGE FILE
  1. S X=$$NOW^UTDT("S"),DIC="^INVA(",DIC(0)="L",DLAYGO=4090 D ^DICN
  1. I Y<0 S ERROR(1)="Unable to create entry in ^INVA" Q 1
  1. S INZ=+Y L +^INVA(INZ)
  1. S $P(^INVA(INZ,0),U,2,3)=SYSTEM_U_0
  1. S (%,LCT)=0 F D GETLINE^INHOU(UIF,.LCT,.LINE) Q:'$D(LINE) D
  1. . ;copy main line
  1. . S %=%+1,^INVA(INZ,1,%,0)=LINE
  1. . ;Copy overflow nodes
  1. . F I=1:1 Q:'$D(LINE(I)) S ^INVA(INZ,1,%+I,0)=LINE(I)
  1. . S %=%+I-1,^INVA(INZ,1,%,0)=^INVA(INZ,1,%,0)_$C(13)
  1. S ^INVA(INZ,1,0)=U_U_%_U_%
  1. ;Cross-reference the entry
  1. S DA=INZ,DIK="^INVA(" D IX1^DIK
  1. ;Unlock and quit
  1. L -^INVA(INZ) Q 0
  1. ;
  1. RECEIVE ;Receiver
  1. S SYSTEM="VA" K CONVERT
  1. LOOP Q:'$D(^INRHB("RUN",INBPN)) S IN=0,^INRHB("RUN",INBPN)=$H
  1. LP1 ;Look for a message using the APS cross reference
  1. L -^INVA(IN) Q:'$D(^INRHB("RUN",INBPN)) S ^INRHB("RUN",INBPN)=$H
  1. S IN=$O(^INVA("APS",0,SYSTEM,IN)) I 'IN Q:$D(CONVERT) G WAIT
  1. ;Lock the entry
  1. L +^INVA(IN):0 E G LP1
  1. G:$P(^INVA(IN,0),U,3) LP1
  1. S ING="INDATA" K INDATA
  1. S (%,%1)=0 F Q:%="" S %=$O(^INVA(IN,1,%)) Q:'% S %1=%1+1,INDATA(%1)=^(%,0) D:INDATA(%1)'[$C(13) I INDATA(%1)[$C(13) S INDATA(%1)=$TR(INDATA(%1),$C(13))
  1. . S %2=0 F S %=$O(^INVA(IN,1,%)) Q:'% S %2=%2+1,INDATA(%1,%2)=^(%,0) I INDATA(%1,%2)[$C(13) S INDATA(%1,%2)=$TR(INDATA(%1,%2),$C(13)) Q
  1. I '$D(INDATA(2)) D ENR^INHE(INBPN,"Message format error in DHCP/SAIC message #"_IN) G MP
  1. I $E(INDATA(2),1,3)="MSA" S DEST="INCOMING ACK",ACK=0 G STORE
  1. S X=$P(INDATA(2),U,1,2) I $E(X,1,3)'="EVN" D ENR^INHE(INBPN,"DHCP/SAIC message entry #"_IN_" does not have the EVN segment in the correct location.") G MP
  1. G:'$D(CONVERT) NOCON
  1. ;If doing conversion ignore those with incorrect event types
  1. G:$P(X,U,2)'=CONVERT LP1
  1. I $D(CONVERT(0)),$P($G(INDATA(3)),U)'=CONVERT(0) G LP1
  1. I $D(CONVERT("C")) S CONVERT("COUNT")=CONVERT("COUNT")+1 Q:CONVERT("COUNT")>CONVERT("C")
  1. S ACK=0 W "."
  1. NOCON S XX=^INVA(IN,0),A=$P(XX,U,4),A=A+1,$P(^(0),U,4)=A
  1. I A>5 D ENR^INHE(INBPN,"Too many attempts for entry #"_IN) G MP
  1. S DEST=$P($T(@$P(X,U,2)),";",3),ACK=1
  1. I DEST="" D ENR^INHE(INBPN,"No known destination for event type "_$P(X,U,2)_" in DHCP/SAIC message entry #"_IN) G MP
  1. ;
  1. STORE ;store in UIF
  1. S MESSID=$P(INDATA(1),U,10) I MESSID="" D ENR^INHE(INBPN,"DHCP/SAIC message entry #"_IN_" does not have a message ID") G MP
  1. S:$D(CONVERT) MESSID=$P(X,U,2)_MESSID
  1. ;Call the input driver
  1. S X=$$NEW^INHD(MESSID,DEST,"DHCP","INDATA",ACK,"I")
  1. ;If the input driver returns a -1 then the transaction was rejected
  1. I X<0 D ENR^INHE(INBPN,"DHCP/SAIC message entry #"_IN_" was rejected by GIS") G MP
  1. ;Update the DATE TRANSFERRED field
  1. S DIE="^INVA(",DA=IN,DR=".05///NOW" D ^DIE
  1. MP ;Mark as processed, unlock and return to loop
  1. S DIE="^INVA(",DA=IN,DR=".03///1" D ^DIE L -^INVA(IN) G LP1
  1. ;
  1. WAIT ;
  1. H 5 G LOOP
  1. ;
  1. CONVERT ;Entry to run conversion
  1. D VAR^DWUTL K CONVERT
  1. W @IOF D ^UTSRD("Event type to convert: ","Enter the EVENT TYPE of messages to process") Q:X=""!($E(X)="^") S CONVERT=X
  1. W ! D ^UTSRD("Value of first segment: ","Enter a value which the first segment must match to be processed. Use NULL to bypass this check.") Q:$E(X)=U
  1. S:X]"" CONVERT(0)=X
  1. W ! D ^UTSRD("Max number of messages to move: ","Enter how many you wish to move.") Q:$E(X)=U S:X CONVERT("C")=+X
  1. W ! D ^UTSRD("Starting entry number in INVA: ") Q:$E(X)=U!(+X<0) S IN=+X S:IN'<1 IN=IN-1
  1. W ! D ^UTSRD("Number of transfer jobs: ") Q:$E(X)=U S X=+X S:X<1 X=1 S ITERC=X
  1. D WAIT^DICD
  1. S INBPN="CONVERT",^INRHB("RUN",INBPN)="",SYSTEM="VA",CONVERT("COUNT")=0
  1. F X=1:1:ITERC D
  1. .S ZTSAVE("*")="",ZTDESC="Transfer messages to GIS",ZTIO="",ZTRTN="LP1^INHVAX" D ^%ZTLOAD
  1. Q
  1. ;
  1. DEST ;The following tags are used to determine destination
  1. PATADM ;;PATIENT ID-IN
  1. REGTAX ;;DISABILITY CONDITION CONVERSION
  1. SYSUSR ;;USER/PERSON/PROVIDER CONVERSION
  1. REGTAB ;;INSURANCE CONVERSION
  1. PATREG ;;ADD/UPDATE PATIENT REGISTRATION
  1. PATADT ;;ADT/PTF CONVERSION
  1. OUTPHR ;;OUTPATIENT PHARMACY CONVERSION
  1. PATPHARM ;;PHARMACY PATIENT UPDATE
  1. PATBILL ;;BILLING PATIENT
  1. PATLRG ;;GENERAL LAB RESULTS
  1. PATLRM ;;MICROBIOLOGY RESULTS
  1. PATLRA ;;AP RESULTS
  1. INPHR ;;INPATIENT PHARMACY CONVERSION
  1. PATALG ;;OUTPATIENT PHARMACY BURST-AL