[623] | 1 | MHV7B1 ;WAS/GPM - HL7 message builder RTB^K13 ; [8/22/05 6:18pm]
|
---|
| 2 | ;;1.0;My HealtheVet;;Aug 23, 2005
|
---|
| 3 | ;;Per VHA Directive 2004-038, this routine should not be modified.
|
---|
| 4 | ;
|
---|
| 5 | Q
|
---|
| 6 | ;
|
---|
| 7 | RTBK13(MSGROOT,QRY,ERR,DATAROOT,HL) ; Build query response
|
---|
| 8 | ;
|
---|
| 9 | ; Populates the array pointed to by MSGROOT with an RTB^K13 query
|
---|
| 10 | ; response message by calling the appropriate segment builders based
|
---|
| 11 | ; on the type of response ACK/Data or NAK. Extracted data pointed to
|
---|
| 12 | ; by DATAROOT, errors, hit counts, and query information are user to
|
---|
| 13 | ; buld the segments.
|
---|
| 14 | ; An error number in ERR^4 indicates a NAK is needed.
|
---|
| 15 | ; DATAROOT being null indicates a dataless ACK (testing purposes).
|
---|
| 16 | ; Multiple types of RDF/RDT are supported based on the type of
|
---|
| 17 | ; data in the response, indicated by QRY("TYPE").
|
---|
| 18 | ;
|
---|
| 19 | ; Input:
|
---|
| 20 | ; MSGROOT - Global root of message
|
---|
| 21 | ; QRY - Query parameters
|
---|
| 22 | ; QRY("TYPE") - Request type number
|
---|
| 23 | ; QRY("MID") - original message control ID
|
---|
| 24 | ; ERR - Caret delimited error string
|
---|
| 25 | ; segment^sequence^field^code^ACK type^error text
|
---|
| 26 | ; DATAROOT - Global root of data array
|
---|
| 27 | ; HL - HL7 package array variable
|
---|
| 28 | ;
|
---|
| 29 | ; Output: RTB^K13 message in MSGROOT
|
---|
| 30 | ;
|
---|
| 31 | N CNT,RDT,HIT
|
---|
| 32 | S HIT=""
|
---|
| 33 | I DATAROOT'="" S HIT=$G(@DATAROOT)
|
---|
| 34 | I HIT="" S HIT=0
|
---|
| 35 | S HIT=HIT_"^"_HIT_"^0"
|
---|
| 36 | K @MSGROOT
|
---|
| 37 | S CNT=1,@MSGROOT@(CNT)=$$MSA($G(QRY("MID")),ERR,.HL)
|
---|
| 38 | I $P(ERR,"^",4) S CNT=CNT+1,HIT="0^0^0",@MSGROOT@(CNT)=$$ERR(ERR,.HL)
|
---|
| 39 | S CNT=CNT+1,@MSGROOT@(CNT)=$$QAK(.QRY,ERR,HIT,.HL)
|
---|
| 40 | S CNT=CNT+1,@MSGROOT@(CNT)=$$QPD(.QRY,.HL)
|
---|
| 41 | Q:$P(ERR,"^",4)
|
---|
| 42 | S CNT=CNT+1,@MSGROOT@(CNT)=$$RDF(QRY("TYPE"),.HL)
|
---|
| 43 | Q:DATAROOT=""
|
---|
| 44 | Q:@DATAROOT<1
|
---|
| 45 | D RDT(MSGROOT,QRY("TYPE"),DATAROOT,.CNT,.HL)
|
---|
| 46 | Q
|
---|
| 47 | ;
|
---|
| 48 | MSA(MID,ERROR,HL) ;build MSA segment
|
---|
| 49 | N MSA,ACK
|
---|
| 50 | S ACK=$P(ERROR,"^",5)
|
---|
| 51 | I ACK="" S ACK="AA"
|
---|
| 52 | S MSA(0)="MSA"
|
---|
| 53 | S MSA(1)=ACK ;ACK code
|
---|
| 54 | S MSA(2)=MID ;message control ID
|
---|
| 55 | S MSA(3)=$$ESCAPE^MHV7U($P(ERROR,"^",6),.HL) ;text message
|
---|
| 56 | Q $$BLDSEG^MHV7U(.MSA,.HL)
|
---|
| 57 | ;
|
---|
| 58 | ERR(ERROR,HL) ;build ERR segment
|
---|
| 59 | N ERR
|
---|
| 60 | S ERR(0)="ERR"
|
---|
| 61 | S ERR(1,1,1)=$P(ERROR,"^",1) ;segment
|
---|
| 62 | S ERR(1,1,2)=$P(ERROR,"^",2) ;sequence
|
---|
| 63 | S ERR(1,1,3)=$P(ERROR,"^",3) ;field
|
---|
| 64 | S ERR(1,1,4,1)=$P(ERROR,"^",4) ;code
|
---|
| 65 | S ERR(1,1,4,2)=$$ESCAPE^MHV7U($P(ERROR,"^",6),.HL) ;text
|
---|
| 66 | Q $$BLDSEG^MHV7U(.ERR,.HL)
|
---|
| 67 | ;
|
---|
| 68 | QAK(QRY,ERROR,HIT,HL) ;build QAK segment
|
---|
| 69 | N QAK,STATUS
|
---|
| 70 | S STATUS=$P(ERROR,"^",5)
|
---|
| 71 | I STATUS="" S STATUS="OK"
|
---|
| 72 | I STATUS="OK",HIT<1 S STATUS="NF"
|
---|
| 73 | S QAK(0)="QAK"
|
---|
| 74 | S QAK(1)=QRY("QPD",2) ;query tag
|
---|
| 75 | S QAK(2)=STATUS ;query response status
|
---|
| 76 | M QAK(3)=QRY("QPD",1) ;message query name
|
---|
| 77 | S QAK(4)=$P(HIT,"^",1) ;hit count total
|
---|
| 78 | S QAK(5)=$P(HIT,"^",2) ;hits this payload
|
---|
| 79 | S QAK(6)=$P(HIT,"^",3) ;hits remaining
|
---|
| 80 | Q $$BLDSEG^MHV7U(.QAK,.HL)
|
---|
| 81 | ;
|
---|
| 82 | QPD(QRY,HL) ;build QPD segment
|
---|
| 83 | N QPD
|
---|
| 84 | M QPD=QRY("QPD")
|
---|
| 85 | S QPD(0)="QPD"
|
---|
| 86 | S QPD(7)=$G(QRY("ICN")) ;ICN
|
---|
| 87 | S QPD(8)=$G(QRY("DFN")) ;DFN
|
---|
| 88 | Q $$BLDSEG^MHV7U(.QPD,.HL)
|
---|
| 89 | ;
|
---|
| 90 | RDF(REQTYPE,HL) ; build RDF segment
|
---|
| 91 | N RTN
|
---|
| 92 | S RTN=$$RTN(REQTYPE)
|
---|
| 93 | Q:RTN="" "RDF"
|
---|
| 94 | Q @("$$RDF^"_RTN_"(.HL)")
|
---|
| 95 | ;
|
---|
| 96 | RDT(MSGROOT,REQTYPE,DATAROOT,CNT,HL) ; Build RDT segments
|
---|
| 97 | N RTN
|
---|
| 98 | S RTN=$$RTN(REQTYPE)
|
---|
| 99 | Q:RTN=""
|
---|
| 100 | D @("RDT^"_RTN_"(MSGROOT,DATAROOT,.CNT,.HL)")
|
---|
| 101 | Q
|
---|
| 102 | ;
|
---|
| 103 | RTN(REQTYPE) ;
|
---|
| 104 | N RDEF
|
---|
| 105 | S RDEF(3)="MHV7B1B"
|
---|
| 106 | S RDEF(21)="MHV7B1B"
|
---|
| 107 | Q $G(RDEF(REQTYPE))
|
---|
| 108 | ;
|
---|