| 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
 | 
|---|