- SCMCHLG ;BP/DJB - PCMM HL7 Generate Message ; 3/2/00 12:39pm
- ;;5.3;Scheduling;**177,210**;AUG 13, 1993
- ;
- GENERATE() ;Generate a PCMM Primary Care HL7 message
- ;
- ;Input:
- ;Output:
- ;Return: Number of HL7 array nodes built
- ;
- ;Declare variables
- NEW DATA,ERROR,ID,LINES,NUM,SEG
- NEW HLN,HLRESLT,HLSAN,HLX
- ;
- ;Convert XMITARRY array to HL7 format - ^TMP("HLS",$J,x)
- KILL ^TMP("HLS",$J)
- S NUM=0
- F S NUM=$O(@XMITARRY@(NUM)) Q:'NUM D ;
- . S LINES=0 ;Initialize subscript counter
- . S SEG=""
- . F S SEG=$O(@XMITARRY@(NUM,SEG)) Q:SEG="" D ;
- . . S ID=""
- . . F S ID=$O(@XMITARRY@(NUM,SEG,ID)) Q:ID="" D ;
- . . . ;Convert array to HL7 format
- . . . S DATA=$G(@XMITARRY@(NUM,SEG,ID))
- . . . Q:DATA']""
- . . . S LINES=LINES+1
- . . . S ^TMP("HLS",$J,LINES)=DATA
- . . . ;Convert continuation node
- . . . I $D(@XMITARRY@(NUM,SEG,ID,1)) D ;
- . . . . S DATA=$G(@XMITARRY@(NUM,SEG,ID,1))
- . . . . I DATA]"" S ^TMP("HLS",$J,LINES,1)=DATA
- . ;
- . ;Generate message.
- . ; This call returns HLRESLT with 1-3 pieces as follows:
- . ; MessageID^ErrorCode^ErrorDescription
- . ; If no error occurs, only first piece is returned equal to unique
- . ; ID for message. Otherwise, 3 pieces are returned with 1st piece
- . ; equal to msg ID if one was assigned, otherwise 0.
- . ;
- . S HLP("PRIORITY")="I" ;........Immediate priority
- . D GENERATE^HLMA(HLEID,"GM",1,.HLRESLT,,.HLP)
- . ;
- . ;djb/bp Patch 210. Moved re-initialize code up so it occurs before
- . ;call to LOG^SCMCHLL.
- . ;Re-initialize HL7 message variables
- . KILL HL,HLP
- . S HLEID=$$HLEID^SCMCHL()
- . D INIT^HLFNC2(HLEID,.HL)
- . ;
- . ;If message not generated, log reason & reset LINES to zero.
- . I $P(HLRESLT,"^",2)'="" D ;
- . . S @XMITERR@(VARPTR)=$P(HLRESLT,"^",3)
- . E D ;
- . . S MSGCNT=$G(MSGCNT)+1 ;..Increment message count
- . . ;djb/bp Patch 210 Following line added to log transmission.
- . . I $P(HLRESLT,"^",1) D LOG^SCMCHLL
- . ;
- . ;Re-initialize HL7 message array
- . KILL ^TMP("HLS",$J)
- ;
- ;Done
- Q +$G(MSGCNT)
- --- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HSCMCHLG 2049 printed Jan 18, 2025@03:41:37 Page 2
- SCMCHLG ;BP/DJB - PCMM HL7 Generate Message ; 3/2/00 12:39pm
- +1 ;;5.3;Scheduling;**177,210**;AUG 13, 1993
- +2 ;
- GENERATE() ;Generate a PCMM Primary Care HL7 message
- +1 ;
- +2 ;Input:
- +3 ;Output:
- +4 ;Return: Number of HL7 array nodes built
- +5 ;
- +6 ;Declare variables
- +7 NEW DATA,ERROR,ID,LINES,NUM,SEG
- +8 NEW HLN,HLRESLT,HLSAN,HLX
- +9 ;
- +10 ;Convert XMITARRY array to HL7 format - ^TMP("HLS",$J,x)
- +11 KILL ^TMP("HLS",$JOB)
- +12 SET NUM=0
- +13 ;
- FOR
- SET NUM=$ORDER(@XMITARRY@(NUM))
- if 'NUM
- QUIT
- Begin DoDot:1
- +14 ;Initialize subscript counter
- SET LINES=0
- +15 SET SEG=""
- +16 ;
- FOR
- SET SEG=$ORDER(@XMITARRY@(NUM,SEG))
- if SEG=""
- QUIT
- Begin DoDot:2
- +17 SET ID=""
- +18 ;
- FOR
- SET ID=$ORDER(@XMITARRY@(NUM,SEG,ID))
- if ID=""
- QUIT
- Begin DoDot:3
- +19 ;Convert array to HL7 format
- +20 SET DATA=$GET(@XMITARRY@(NUM,SEG,ID))
- +21 if DATA']""
- QUIT
- +22 SET LINES=LINES+1
- +23 SET ^TMP("HLS",$JOB,LINES)=DATA
- +24 ;Convert continuation node
- +25 ;
- IF $DATA(@XMITARRY@(NUM,SEG,ID,1))
- Begin DoDot:4
- +26 SET DATA=$GET(@XMITARRY@(NUM,SEG,ID,1))
- +27 IF DATA]""
- SET ^TMP("HLS",$JOB,LINES,1)=DATA
- End DoDot:4
- End DoDot:3
- End DoDot:2
- +28 ;
- +29 ;Generate message.
- +30 ; This call returns HLRESLT with 1-3 pieces as follows:
- +31 ; MessageID^ErrorCode^ErrorDescription
- +32 ; If no error occurs, only first piece is returned equal to unique
- +33 ; ID for message. Otherwise, 3 pieces are returned with 1st piece
- +34 ; equal to msg ID if one was assigned, otherwise 0.
- +35 ;
- +36 ;........Immediate priority
- SET HLP("PRIORITY")="I"
- +37 DO GENERATE^HLMA(HLEID,"GM",1,.HLRESLT,,.HLP)
- +38 ;
- +39 ;djb/bp Patch 210. Moved re-initialize code up so it occurs before
- +40 ;call to LOG^SCMCHLL.
- +41 ;Re-initialize HL7 message variables
- +42 KILL HL,HLP
- +43 SET HLEID=$$HLEID^SCMCHL()
- +44 DO INIT^HLFNC2(HLEID,.HL)
- +45 ;
- +46 ;If message not generated, log reason & reset LINES to zero.
- +47 ;
- IF $PIECE(HLRESLT,"^",2)'=""
- Begin DoDot:2
- +48 SET @XMITERR@(VARPTR)=$PIECE(HLRESLT,"^",3)
- End DoDot:2
- +49 ;
- IF '$TEST
- Begin DoDot:2
- +50 ;..Increment message count
- SET MSGCNT=$GET(MSGCNT)+1
- +51 ;djb/bp Patch 210 Following line added to log transmission.
- +52 IF $PIECE(HLRESLT,"^",1)
- DO LOG^SCMCHLL
- End DoDot:2
- +53 ;
- +54 ;Re-initialize HL7 message array
- +55 KILL ^TMP("HLS",$JOB)
- End DoDot:1
- +56 ;
- +57 ;Done
- +58 QUIT +$GET(MSGCNT)