1 | MHV7BU ;WAS/EFJ - HL7 message builder UTILITY ; [12/14/06 11:10am]
|
---|
2 | ;;1.0;My HealtheVet;**2**;Aug 23, 2005;Build 22
|
---|
3 | ;;Per VHA Directive 2004-038, this routine should not be modified.
|
---|
4 | ;
|
---|
5 | ; Utilities common to message and segment builders.
|
---|
6 | ;
|
---|
7 | Q
|
---|
8 | ;
|
---|
9 | PID3(PID,ICN,DFN,SSN) ;Build PID3 - Patient Identifier List
|
---|
10 | ; Populates PID array with Patient Identifier List Entries for
|
---|
11 | ; ICN, DFN, and SSN.
|
---|
12 | ;
|
---|
13 | ; Integration Agreements:
|
---|
14 | ; 10112 : $$SITE^VASITE
|
---|
15 | ;
|
---|
16 | ; Input:
|
---|
17 | ; ICN, DFN, SSN - Identifiers
|
---|
18 | ;
|
---|
19 | ; Output:
|
---|
20 | ; PID - PID array
|
---|
21 | ;
|
---|
22 | N STATION,IDCNT
|
---|
23 | S STATION=$P($$SITE^VASITE,"^",3)
|
---|
24 | S IDCNT=0
|
---|
25 | I ICN'="" D
|
---|
26 | . S IDCNT=IDCNT+1
|
---|
27 | . S PID(3,IDCNT,1)=ICN ;Patient ID - ICN
|
---|
28 | . S PID(3,IDCNT,4,1)="USVHA" ;assigning authority ID
|
---|
29 | . S PID(3,IDCNT,4,3)="HL70363" ;assigning authority type
|
---|
30 | . S PID(3,IDCNT,5)="NI" ;Patient ID type
|
---|
31 | . S PID(3,IDCNT,6,1)="VA FACILITY ID" ;assigning facility
|
---|
32 | . S PID(3,IDCNT,6,2)=STATION ;Station number
|
---|
33 | . S PID(3,IDCNT,6,3)="L" ;facility ID type
|
---|
34 | ;
|
---|
35 | I DFN'="" D
|
---|
36 | . S IDCNT=IDCNT+1
|
---|
37 | . S PID(3,IDCNT,1)=DFN ;Patient ID - DFN
|
---|
38 | . S PID(3,IDCNT,4,1)="USVHA" ;assigning authority ID
|
---|
39 | . S PID(3,IDCNT,4,3)="HL70363" ;assigning authority type
|
---|
40 | . S PID(3,IDCNT,5)="PI" ;Patient ID type
|
---|
41 | . S PID(3,IDCNT,6,1)="VA FACILITY ID" ;assigning facility
|
---|
42 | . S PID(3,IDCNT,6,2)=STATION ;Station number
|
---|
43 | . S PID(3,IDCNT,6,3)="L" ;facility ID type
|
---|
44 | ;
|
---|
45 | I SSN'="" D
|
---|
46 | . S IDCNT=IDCNT+1
|
---|
47 | . S PID(3,IDCNT,1)=SSN ;Patient ID - SSN
|
---|
48 | . S PID(3,IDCNT,4,1)="USSSA" ;assigning authority ID
|
---|
49 | . S PID(3,IDCNT,4,3)="HL70363" ;assigning authority type
|
---|
50 | . S PID(3,IDCNT,5)="SS" ;Patient ID type
|
---|
51 | . S PID(3,IDCNT,6,1)="VA FACILITY ID" ;assigning facility
|
---|
52 | . S PID(3,IDCNT,6,2)=STATION ;Station number
|
---|
53 | . S PID(3,IDCNT,6,3)="L" ;facility ID type
|
---|
54 | Q
|
---|
55 | ;
|
---|
56 | FMTNAME(NAME,SUBSEG,HL,DATATYPE) ;Format comma/space delimited name
|
---|
57 | ; Populates SUBSEG array with formatted and escaped name components
|
---|
58 | ; based on the DATATYPE passed. XCN types and XPN types differ in
|
---|
59 | ; that XCN has an ID in the first component effectively shifting the
|
---|
60 | ; name components by one.
|
---|
61 | ;
|
---|
62 | ; Integration Agreements:
|
---|
63 | ; 3065 : NAMEFMT^XLFNAME
|
---|
64 | ;
|
---|
65 | ; Input:
|
---|
66 | ; NAME - FileMan formatted name Ex: PATIENT,FIRST M
|
---|
67 | ; HL - HL7 package array variable
|
---|
68 | ; DATATYPE - HL7 data type to be formatted Ex: XCN, XPN
|
---|
69 | ;
|
---|
70 | ; Output:
|
---|
71 | ; SUBSEG - Array to hold the formatted name.
|
---|
72 | ;
|
---|
73 | ; Example Usage:
|
---|
74 | ; S NAME="SMITH,BOB A"
|
---|
75 | ; K NMARR
|
---|
76 | ; D FMTNAME^MHV7BU(NAME,.NMARR,.HL,"XCN")
|
---|
77 | ; M PD1(4,1)=NMARR
|
---|
78 | ;
|
---|
79 | N OFFSET
|
---|
80 | S OFFSET=(DATATYPE="XCN")
|
---|
81 | S NAME=$$NAMEFMT^XLFNAME(.NAME,"F","DSP")
|
---|
82 | S SUBSEG(1+OFFSET)=$$ESCAPE^MHV7U($P(NAME," ",1),.HL) ;family
|
---|
83 | S SUBSEG(2+OFFSET)=$$ESCAPE^MHV7U($P(NAME," ",2),.HL) ;given
|
---|
84 | S SUBSEG(3+OFFSET)=$$ESCAPE^MHV7U($P(NAME," ",3),.HL) ;middle
|
---|
85 | S SUBSEG(4+OFFSET)=$$ESCAPE^MHV7U($P(NAME," ",4),.HL) ;suffix
|
---|
86 | S SUBSEG(5+OFFSET)=$$ESCAPE^MHV7U($P(NAME," ",5),.HL) ;prefix
|
---|
87 | S SUBSEG(6+OFFSET)=$$ESCAPE^MHV7U($P(NAME," ",6),.HL) ;degree
|
---|
88 | Q
|
---|
89 | ;
|
---|
90 | FMTNAME2(IEN,FILE,SUBSEG,HL,DATATYPE) ;Lookup and format name
|
---|
91 | ; Looks up name components based on IEN and FILE passed.
|
---|
92 | ; Populates SUBSEG array with formatted and escaped name components
|
---|
93 | ; based on the DATATYPE passed. XCN types and XPN types differ in
|
---|
94 | ; that XCN has an ID in the first component effectively shifting the
|
---|
95 | ; name components by one.
|
---|
96 | ;
|
---|
97 | ; Integration Agreements:
|
---|
98 | ; 3065 : NAMEFMT^XLFNAME
|
---|
99 | ;
|
---|
100 | ; Input:
|
---|
101 | ; IEN - IEN of patient/person in FILE
|
---|
102 | ; FILE - File number of file Ex: 2 - PATIENT file
|
---|
103 | ; HL - HL7 package array variable
|
---|
104 | ; DATATYPE - HL7 data type to be formatted Ex: XCN, XPN
|
---|
105 | ;
|
---|
106 | ; Output:
|
---|
107 | ; SUBSEG - Array to hold the formatted name.
|
---|
108 | ;
|
---|
109 | ; Example Usage:
|
---|
110 | ; K NMARR
|
---|
111 | ; D FMTNAME^MHV7BU(DFN,2,.NMARR,.HL,"XPN")
|
---|
112 | ; M PID(5,1)=NMARR
|
---|
113 | ;
|
---|
114 | N NAME,OFFSET
|
---|
115 | S OFFSET=(DATATYPE="XCN")
|
---|
116 | S NAME("FILE")=FILE,NAME("FIELD")=.01,NAME("IENS")=IEN_","
|
---|
117 | S NAME=$$NAMEFMT^XLFNAME(.NAME,"F","DSP")
|
---|
118 | S SUBSEG(1+OFFSET)=$$ESCAPE^MHV7U($P(NAME," ",1),.HL) ;family
|
---|
119 | S SUBSEG(2+OFFSET)=$$ESCAPE^MHV7U($P(NAME," ",2),.HL) ;given
|
---|
120 | S SUBSEG(3+OFFSET)=$$ESCAPE^MHV7U($P(NAME," ",3),.HL) ;middle
|
---|
121 | S SUBSEG(4+OFFSET)=$$ESCAPE^MHV7U($P(NAME," ",4),.HL) ;suffix
|
---|
122 | S SUBSEG(5+OFFSET)=$$ESCAPE^MHV7U($P(NAME," ",5),.HL) ;prefix
|
---|
123 | S SUBSEG(6+OFFSET)=$$ESCAPE^MHV7U($P(NAME," ",6),.HL) ;degree
|
---|
124 | Q
|
---|
125 | ;
|
---|
126 | FMTHL7(DT) ;Convert Fileman formatted dates to HL7 format
|
---|
127 | ; Handles imprecise dates properly because $$FMTHL7^XLFDT does not.
|
---|
128 | ; Strips Timezone offset
|
---|
129 | ;
|
---|
130 | ; Integration Agreements:
|
---|
131 | ; 10103 : FMTHL7^XLFDT
|
---|
132 | ;
|
---|
133 | ; Input:
|
---|
134 | ; DT - Fileman formatted date/time
|
---|
135 | ;
|
---|
136 | ; Output: Returns HL7 formatted date/time
|
---|
137 | ;
|
---|
138 | S DT=$$FMTHL7^XLFDT(DT)
|
---|
139 | I $E(DT,7,8)="00" S DT=$E(DT,1,6)
|
---|
140 | I $E(DT,5,6)="00" S DT=$E(DT,1,4)
|
---|
141 | S DT=$P(DT,"-")
|
---|
142 | S DT=$P(DT,"+")
|
---|
143 | Q DT
|
---|
144 | ;
|
---|