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

DGROHLR.m

Go to the documentation of this file.
  1. DGROHLR ;DJH/AMA - ROM HL7 RECEIVE DRIVERS ; 10/20/10 10:55am
  1. ;;5.3;Registration;**533,572,754,797**;Aug 13, 1993;Build 24
  1. ;
  1. RCV ;Receive all message types and route to message specific receiver
  1. ;
  1. ;This procedure is the main driver entry point for receiving all
  1. ;message types (ACK, QRY and ORF) for Register Once Messaging.
  1. ;
  1. ;All procedures and functions assume that all VistA HL7 environment
  1. ;variables are properly initialized and will produce a fatal error if
  1. ;they are missing.
  1. ;
  1. ;The received message is copied to a temporary work global for
  1. ;processing. The message type is determined from the MSH segment and
  1. ;a receive processing procedure specific to the message type is called.
  1. ;(Ex. ORF~R01 message calls procedure: RCVORF). The specific receive
  1. ;processing procedure calls a message specific parse procedure to
  1. ;validate the message data and return data arrays for storage. If no
  1. ;parse errors are reported during validation, then the data arrays are
  1. ;stored by the receive processing procedure. Control, along with any
  1. ;parse validation errors, is then passed to the message specific send
  1. ;processing procedures to build and transmit the acknowledgment and
  1. ;query results messages.
  1. ;
  1. ; The message specific procedures are as follows:
  1. ;
  1. ; Message Receive Procedure Parse Procedure Send Procedure
  1. ; ------- ----------------- ---------------- --------------
  1. ; SNDACK^DGROHLS
  1. ; ACK~R01 RCVACK^DGROHLR PARSACK^DGROHLU4 N/A
  1. ; QRY~R02 RCVQRY^DGROHLR PARSQRY^DGROHLQ3 SNDORF^DGROHLS
  1. ; ORF~R01 RCVORF^DGROHLR PARSORF^DGROHLQ3 N/A
  1. ;
  1. N DGCNT,DGMSGTYP,DGSEG,DGSEGCNT,DGWRK
  1. ;
  1. S DGWRK=$NA(^TMP("DGROHL7",$J))
  1. K @DGWRK
  1. ;
  1. ;load work global with segments
  1. F DGSEGCNT=1:1 X HLNEXT Q:HLQUIT'>0 D
  1. . S DGCNT=0
  1. . S @DGWRK@(DGSEGCNT,DGCNT)=HLNODE
  1. . F S DGCNT=$O(HLNODE(DGCNT)) Q:'DGCNT D
  1. . . S @DGWRK@(DGSEGCNT,DGCNT)=HLNODE(DGCNT)
  1. ;
  1. ;get message type from "MSH"
  1. I $$NXTSEG^DGROHLUT(DGWRK,0,HL("FS"),.DGSEG),$G(DGSEG("TYPE"))="MSH" D
  1. . S DGMSGTYP=$P(DGSEG(9),$E(HL("ECH"),1),1)
  1. . ;HLMTIENS is only required by RCVORU and RCVQRY, thus $GET
  1. . I DGMSGTYP="" S (DGMSGTYP,HL("MTN"))="ORF",HLMTIENS=HLMTIEN
  1. . I DGMSGTYP=HL("MTN") D @("RCV"_DGMSGTYP_"(DGWRK,$G(HLMTIENS),.HL)")
  1. ;
  1. ;cleanup
  1. K @DGWRK
  1. Q
  1. ;
  1. RCVACK(DGWRK,DGMIEN,DGHL) ;Receive ACK Message Types (ACK~R01)
  1. ;
  1. ; Input:
  1. ; DGWRK - name of work global containing segments
  1. ; DGMIEN - IEN of message entry in file #773
  1. ; DGHL - HL environment array
  1. ;
  1. ; Output:
  1. ; none
  1. ;
  1. N DGACK ;ACK data array
  1. N DGERR ;error array
  1. N DGLIEN ;HL7 transmission log IEN
  1. N DGROL ;HL7 transmssion log data array
  1. ;
  1. S ACKCODE=0
  1. D PARSACK^DGROHLU4(DGWRK,.DGHL,.DGACK,.DGERR)
  1. I $G(DGACK("ACKCODE"))'="AA" S ACKCODE=1
  1. Q
  1. ;
  1. RCVQRY(DGWRK,DGMIEN,DGHL) ;Receive QRY Message Types (QRY~R02)
  1. ;
  1. ; Input:
  1. ; DGWRK - name of work global containing segments
  1. ; DGMIEN - IEN of message entry in file #773
  1. ; DGHL - HL environment array
  1. ;
  1. ; Output:
  1. ; none
  1. ;
  1. N DGDFN,DGQRY,DGQRYERR,DGSEGERR
  1. ;
  1. D PARSQRY^DGROHLQ3(DGWRK,.DGHL,.DGQRY,.DGSEGERR)
  1. S DGDFN=$$GETDFN^DGROUT2(DGQRY("ICN"),DGQRY("DOB"),DGQRY("SSN"))
  1. I DGDFN'>0 D
  1. . S DGQRYERR="NM"
  1. . ;
  1. . ;THE ICN FROM THE MPI DOES NOT MATCH A PATIENT, SO NOTIFY THE MPI
  1. . D MPIMAIL^DGROMAIL(.DGQRY)
  1. . ;
  1. D SNDORF^DGROHLS(.DGQRY,DGMIEN,.DGHL,DGDFN,.DGSEGERR,.DGQRYERR)
  1. Q
  1. ;
  1. RCVORF(DGWRK,DGMIEN,DGHL) ;Receive ORF Message Types (ORF~R01)
  1. ;
  1. ; Input:
  1. ; DGWRK - name of work global containing segments, ^TMP("DGROHL7",$J)
  1. ; DGMIEN - IEN of message entry in file #773
  1. ; DGHL - HL environment array
  1. ;
  1. ; Output:
  1. ; none
  1. ;
  1. N DGDATA ;patient data array to upload
  1. N DGERR ;parse error array
  1. N DGORF ;ORF data array
  1. ;
  1. S DGDATA=$NA(^TMP("DGROFDA",$J)) K @DGDATA
  1. D PARSORF^DGROHLQ3(DGWRK,.DGHL,.DGORF,.DGERR,.DGDATA)
  1. ;
  1. I $D(DGROVRCK) DO
  1. . S:('$D(DGORF("PATCH"))) DGROVRCK=0
  1. . I ($D(DGORF("PATCH"))),(+DGORF("PATCH")'=572) S DGROVRCK=0
  1. ;
  1. ;* QUIT conditions
  1. Q:'$D(DGORF)
  1. Q:(+$G(DGORF("DFN"))'>0)
  1. Q:'$D(^DPT(DGORF("DFN"),0))
  1. Q:('$D(DGORF("PATCH")))
  1. ;Q:(+DGORF("PATCH")'=572)
  1. ;
  1. S DFN=DGORF("DFN")
  1. ;
  1. ;Get DFN at Last Site Treated
  1. S LSTDFN=+$O(@DGDATA@(2,""))
  1. ;CHECK BUSINESS RULES
  1. D AO^DGRODEBR(DGDATA,DFN,LSTDFN) ;AGENT ORANGE EXPOSURE
  1. D IR^DGRODEBR(DGDATA,DFN,LSTDFN) ;RADIATION EXPOSURE
  1. D DOD^DGRODEBR(DGDATA,DFN,LSTDFN) ;DATE OF DEATH
  1. D TA^DGRODEBR(DGDATA,LSTDFN) ;TEMPORARY ADDRESS
  1. D SP^DGRODEBR(DGDATA,DFN,LSTDFN) ;SENSITIVE PATIENT
  1. D CA^DGRODEBR(DGDATA,LSTDFN) ;CONFIDENTIAL ADDRESS
  1. D SWA^DGRODEBR(DGDATA,DFN,LSTDFN) ;SOUTHWEST ASIA CONDITIONS
  1. D INC^DGRODEBR(DGDATA,DFN,LSTDFN) ;RULED INCOMPETENT
  1. D INE^DGRODEBR(DGDATA,DFN,LSTDFN) ;INELIGIBLE
  1. D RDOC^DGRODEBR(DGDATA,DFN,LSTDFN) ;RECENT DATE(S) OF CARE
  1. D MSE^DGRODEBR(DGDATA,LSTDFN) ;MILITARY SERVICE EPISODES
  1. ;
  1. ;File the data
  1. D CONVFDA^DGROHLR1(DFN,DGDATA)
  1. ;CLEAN UP
  1. K @DGDATA
  1. Q