VistA-FOIAVistA/r/PATIENT_DATA_EXCHANGE-VAQ/VAQCON.m

62 lines
2.5 KiB
Mathematica

VAQCON ;ALB/JRP - MESSAGE CONSTRUCTION;14-APR-93
;;1.5;PATIENT DATA EXCHANGE;;NOV 17, 1993
XMIT(TRANARR,ROOT,MESSNUM,ARRAY,OFFSET) ;BUILD MESSAGE FOR TRANSACTION
;INPUT : TRANARR - Array whose subscripts are pointers to
; VAQ - TRANSACTION file (full global reference)
; ROOT - Location of Extraction Arrays (full global reference)
; MESSNUM - Message number to place transmisison into
; (if 0, transmission will be placed in ARRAY)
; ARRAY - Array to store transmission in (full global reference)
; OFFSET - Where to begin placing information (defaults to 0)
;OUTPUT : N - Number of lines in transmission
; -1^Error_Text - Error
;NOTES : Transactions pointed to by TRANARR will be placed in the
; same transmission and therefore should have the same domain
; as their destination.
; : If MESSNUM=0, then the transmission will be placed into
; ARRAY(LineNumber)=Line_of_info
; If MESSNUM>0 then the transmission will be placed into
; ^XMB(3.9,MESSNUM,2,LineNumber,0)=Line_of_info
; : The first subscript in ROOT must be a pointer to the
; transaction. The second subscript in ROOT must be the
; segment abbreviation. This is required to identify the
; segments for each transaction contained in a DATA or DISPLAY
; block. ( ROOT(TransactionPointer,SegmentAbbreviation) )
;
;CHECK INPUT
Q:($G(TRANARR)="") "-1^Did not pass reference to array of transaction pointers"
S ROOT=$G(ROOT)
S MESSNUM=+$G(MESSNUM)
I (('MESSNUM)&($G(ARRAY)="")) Q "-1^Did not pass message number or reference to output array"
I (MESSNUM) Q:('$D(^XMB(3.9,MESSNUM))) "-1^Valid message number not passed"
S OFFSET=+$G(OFFSET)
;DECLARE VARIABLES
N TMP,X,LINE,TRANPTR,Y,TMPROOT
S LINE=OFFSET
;START PDX TRANSMISSION
S TMP="$TRANSMIT"
S:('MESSNUM) @ARRAY@(LINE)=TMP
S:(MESSNUM) X=$$ADDLINE^VAQCON1(TMP,MESSNUM,LINE)
S LINE=LINE+1
;LOOP THROUGH EACH TRANSACTION
S TRANPTR=""
F S TRANPTR=$O(@TRANARR@(TRANPTR)) Q:('TRANPTR) D Q:(TMP<0)
.;PLACE TRANSACTION POINTER INTO ROOT
.S TMP=$P(ROOT,"(",1)
.S X=$P(ROOT,"(",2)
.S Y=$P(X,")",1)
.S:(Y="") TMPROOT=TMP_"("_TRANPTR_")"
.S:(Y'="") TMPROOT=TMP_"("_Y_","_TRANPTR_")"
.S:(ROOT="") TMPROOT=""
.;PUT IN MESSAGE
.S TMP=$$MESSAGE^VAQCON0(TRANPTR,TMPROOT,MESSNUM,ARRAY,LINE)
.Q:(TMP<0)
.S LINE=LINE+TMP
Q:(TMP<0) TMP
;END PDX TRANSMISSION
S TMP="$$TRANSMIT"
S:('MESSNUM) @ARRAY@(LINE)=TMP
S:(MESSNUM) X=$$ADDLINE^VAQCON1(TMP,MESSNUM,LINE)
S LINE=LINE+1
Q (LINE-OFFSET)