1 | SCMSVPR1 ;ALB/ESD HL7 PR1 Segment Validation ;06/24/99
|
---|
2 | ;;5.3;Scheduling;**44,66,142,180**;Aug 13, 1993
|
---|
3 | ;06/24/99 ACS - Added CPT modifier to the validation process
|
---|
4 | ;
|
---|
5 | EN(PR1ARRY,HLQ,HLFS,HLECH,VALERR,ENCDT) ;
|
---|
6 | ; Entry point to return the HL7 PR1 (Procedure) validation segment
|
---|
7 | ;
|
---|
8 | ; Input: PR1ARRY - Array of PR1 Segments
|
---|
9 | ; HLQ - HL7 null variable
|
---|
10 | ; HLFS - HL7 field separator
|
---|
11 | ; HLECH - HL7 encoding characters
|
---|
12 | ; VALERR - Array to put errors in
|
---|
13 | ; ENCDT - Date of encounter
|
---|
14 | ;
|
---|
15 | ; Output: 1 if PR1 passed validity check
|
---|
16 | ; Error message if PR1 failed validity check in form of:
|
---|
17 | ; -1^"xxx failed validity check" (xxx=element in PR1 segment)
|
---|
18 | ;
|
---|
19 | ; NOTE: This validity check will pass if at least ONE PR1 segment in
|
---|
20 | ; the PR1 array passes the validity checks.
|
---|
21 | ;
|
---|
22 | N I,J,MSG,OUT,PR1SEG,PR1ASEG,PRTYPE,VALID,X,CNT,SCSETID,SEG,OLD
|
---|
23 | S X="",(I,OUT)=0,MSG="-1^Element in PR1 segment failed validity check",(SCSETID,CNT)=1,SEG="PR1"
|
---|
24 | S PR1ARRY=$G(PR1ARRY)
|
---|
25 | S:(PR1ARRY="") PR1ARRY="^TMP(""VAFHL"",$J,""PROCEDURE"")"
|
---|
26 | F S I=+$O(@PR1ARRY@(I)) Q:'I D
|
---|
27 | . S VALID(I)=1
|
---|
28 | . S J="",J=$O(@PR1ARRY@(I,J)) Q:J=""
|
---|
29 | . ;S PR1SEG=$G(@PR1ARRY@(I,J))
|
---|
30 | . ;-----------------------------------------------------------
|
---|
31 | . ; After the merge, PR1SEG looks like this:
|
---|
32 | . ; PR1SEG=PR1^n^...^cpt^...
|
---|
33 | . ; PR1SEG(1)=|mod~desc~meth|mod~desc~meth|...
|
---|
34 | . ; PR1SEG(2)=|mod~desc~meth|mod~desc~meth|...
|
---|
35 | . ;-----------------------------------------------------------
|
---|
36 | . M PR1SEG=@PR1ARRY@(I,J)
|
---|
37 | . S OLD=CNT
|
---|
38 | . D VALIDATE^SCMSVUT0(SEG,PR1SEG,"0009",VALERR,.CNT)
|
---|
39 | . I $G(@VALERR@(SEG,OLD))="0009" Q
|
---|
40 | . S PR1SEG=$$CONVERT^SCMSVUT0(PR1SEG,HLFS,HLQ)
|
---|
41 | . ;
|
---|
42 | . ;- Validate procedure fields
|
---|
43 | . ;D PROCVAL(PR1SEG)
|
---|
44 | . D PROCVAL(.PR1SEG)
|
---|
45 | . Q
|
---|
46 | ;
|
---|
47 | I '$D(VALID) D VALIDATE^SCMSVUT0(SEG,"","0009",VALERR,.CNT)
|
---|
48 | ENQ Q $S($D(@VALERR@(SEG)):MSG,1:1)
|
---|
49 | ;
|
---|
50 | PROCVAL(PR1SEG) ; -Validate procedure fields
|
---|
51 | ;
|
---|
52 | ;N Z,DATA,CMPSEP
|
---|
53 | N Z,DATA,CMPSEP,REPSEP
|
---|
54 | S CMPSEP=$E(HLECH,1)
|
---|
55 | S REPSEP=$E(HLECH,2)
|
---|
56 | F Z="0101","0201","0401","0403" D
|
---|
57 | . S DATA=$P(PR1SEG,HLFS,+$E(Z,1,2))
|
---|
58 | . S DATA=$P(DATA,CMPSEP,+$E(Z,3,4))
|
---|
59 | . D VALIDATE^SCMSVUT0(SEG,DATA,$P($T(@(Z)),";",3),VALERR,.CNT)
|
---|
60 | ;
|
---|
61 | ;--------------------------------------------------------------
|
---|
62 | ; VALIDATE PROCEDURE MODIFIER FIELDS
|
---|
63 | ;
|
---|
64 | ; The modifier, cpt+modifier, and modifier coding method are
|
---|
65 | ; validated
|
---|
66 | ;
|
---|
67 | ; MODDATA = mod seq, piece 17: mod~desc~code meth|mod~desc~...
|
---|
68 | ; CTR = continuation segment counter
|
---|
69 | ; PROC = CPT procedure code
|
---|
70 | ;--------------------------------------------------------------
|
---|
71 | ;
|
---|
72 | ;- validate modifier components in the first PR1 array seg
|
---|
73 | N MODDATA,PROC
|
---|
74 | S PROC=$P($P(PR1SEG,HLFS,4),CMPSEP,1)
|
---|
75 | S MODDATA=$P(PR1SEG,HLFS,17)
|
---|
76 | Q:'MODDATA
|
---|
77 | D SETUP(MODDATA,PROC)
|
---|
78 | ;
|
---|
79 | ;- validate modifier components in the PR1 continuation segments
|
---|
80 | N CTR,MODDATA
|
---|
81 | S CTR=1,MODDATA=""
|
---|
82 | F S MODDATA=$E($G(PR1SEG(CTR)),2,245) Q:'MODDATA D
|
---|
83 | . D SETUP(MODDATA,PROC)
|
---|
84 | . S CTR=CTR+1
|
---|
85 | . Q
|
---|
86 | Q
|
---|
87 | ;
|
---|
88 | SETUP(MODDATA,PROC) ;
|
---|
89 | ;
|
---|
90 | ;---------------------------------------------------------------
|
---|
91 | ; SET UP AND VALIDATE MODIFIER COMPONENTS
|
---|
92 | ;
|
---|
93 | ; INPUT: MODDATA = modifier components
|
---|
94 | ; format: mod~desc~meth|mod~desc~meth|...
|
---|
95 | ; PROC = CPT procedure
|
---|
96 | ;
|
---|
97 | ; OTHER:
|
---|
98 | ; REPSEP = repetition separator ("|")
|
---|
99 | ; SEG = PR1
|
---|
100 | ; CNT = 1
|
---|
101 | ; VALERR = error message array
|
---|
102 | ; MCOMPNUM = modifier component number to validate
|
---|
103 | ; REPCTR = modifier repetition counter
|
---|
104 | ; MODDATA1 = each repetition of modifier info
|
---|
105 | ; format: mod~desc~meth
|
---|
106 | ; DATA = modifier data to validate (i.e. mod or meth)
|
---|
107 | ;---------------------------------------------------------------
|
---|
108 | ;
|
---|
109 | N MCOMPNUM,REPCTR,MODDATA1,DATA
|
---|
110 | S REPCTR=1
|
---|
111 | ; add repetition separator to end of input data
|
---|
112 | S MODDATA=MODDATA_REPSEP
|
---|
113 | ;
|
---|
114 | ; validate the modifier and coding method for each repetition
|
---|
115 | F S MODDATA1=$P(MODDATA,REPSEP,REPCTR) Q:'MODDATA1 D
|
---|
116 | . F Z="1701","1703" D
|
---|
117 | .. S MCOMPNUM=$E(Z,3,4)
|
---|
118 | .. S DATA=$P(MODDATA1,"~",MCOMPNUM)
|
---|
119 | .. ;
|
---|
120 | .. ;- pass procedure AND modifier if validating modifier
|
---|
121 | .. S:MCOMPNUM="01" DATA=PROC_"~"_DATA
|
---|
122 | .. D VALIDATE^SCMSVUT0(SEG,DATA,$P($T(@(Z)),";",3),VALERR,.CNT)
|
---|
123 | .. Q
|
---|
124 | . S REPCTR=REPCTR+1
|
---|
125 | . Q
|
---|
126 | Q
|
---|
127 | ;
|
---|
128 | ;
|
---|
129 | ;
|
---|
130 | ;- PR1 data elements validated
|
---|
131 | ;
|
---|
132 | ;
|
---|
133 | 0101 ;;0035;HL7 SEGMENT NAME
|
---|
134 | 0201 ;;6250;HL7 SEQUENTIAL NUMBER (SET ID)
|
---|
135 | 0401 ;;6050;PROCEDURE CODE (CPT)
|
---|
136 | 0403 ;;6000;PROCEDURE CODING METHOD
|
---|
137 | 1701 ;;6300;PROCEDURE MODIFIER AND PROC+MOD COMBINATION
|
---|
138 | 1703 ;;6370;PROCEDURE MODIFIER CODING METHOD
|
---|