| 1 | SCMSVZPD ;ALB/ESD,JLU HL7 ZPD Segment Validation ;05/08/95 | 
|---|
| 2 | ;;5.3;Scheduling;**44,66,142,459,472**;Aug 13, 1993 | 
|---|
| 3 | ; | 
|---|
| 4 | ; | 
|---|
| 5 | EN(ZPDSEG,HLQ,HLFS,VALERR,ENCDT,NODE) ; | 
|---|
| 6 | ; Entry point to return the HL7 ZPD (Patient Data) validation segment | 
|---|
| 7 | ; | 
|---|
| 8 | ;  Input:  ZPDSEG - ZPD Segment | 
|---|
| 9 | ;             HLQ - HL7 null variable | 
|---|
| 10 | ;            HLFS - HL7 field separator | 
|---|
| 11 | ;          VALERR - Contains the array in which to put the errors | 
|---|
| 12 | ;           ENCDT - The date/time of the encounter being processed | 
|---|
| 13 | ;            NODE - The zero node of the entry from the Outpatient | 
|---|
| 14 | ;                   Encounter file. | 
|---|
| 15 | ; | 
|---|
| 16 | ; Output:  1 if ZPD passed validity check | 
|---|
| 17 | ;          Error message if ZPD failed validity check in form of: | 
|---|
| 18 | ;          -1^"xxx failed validity check" (xxx=element in ZPD segment) | 
|---|
| 19 | ; | 
|---|
| 20 | ; | 
|---|
| 21 | N I,MSG,DATA,X,CNT,SEG,DSS,DFN,SEGLINE,OFFSET,ZPDSEGSV | 
|---|
| 22 | S MSG="-1^element in ZPD segment failed validity check",CNT=1,SEG="ZPD" | 
|---|
| 23 | S ZPDSEG=$G(ZPDSEG) | 
|---|
| 24 | M ZPDSEGSV=ZPDSEG | 
|---|
| 25 | D VALIDATE^SCMSVUT0(SEG,ZPDSEG,"0007",VALERR,.CNT) | 
|---|
| 26 | I $D(@VALERR@(SEG)) G ENQ | 
|---|
| 27 | ; | 
|---|
| 28 | ;- Convert HLQ to null | 
|---|
| 29 | S ZPDSEG=$$CONVERT^SCMSVUT0(ZPDSEG,HLFS,HLQ) | 
|---|
| 30 | S I=0 | 
|---|
| 31 | F  S I=$O(ZPDSEG(I)) Q:'I  S ZPDSEG(I)=$$CONVERT^SCMSVUT0(ZPDSEG(I),HLFS,HLQ) | 
|---|
| 32 | ; | 
|---|
| 33 | ;Getting the DSS identifier to check for a LAB | 
|---|
| 34 | S DSS=$P(NODE,U,3) | 
|---|
| 35 | S DSS=$G(^DIC(40.7,DSS,0)) | 
|---|
| 36 | I DSS]"" S DSS=$P(DSS,U,2) | 
|---|
| 37 | ; | 
|---|
| 38 | ;Get pointer to PATIENT file | 
|---|
| 39 | S DFN=$P(NODE,U,2) | 
|---|
| 40 | ; | 
|---|
| 41 | ;- Validate data elements | 
|---|
| 42 | N NODE | 
|---|
| 43 | S OFFSET=0,NODE=0,SEGLINE=ZPDSEG | 
|---|
| 44 | F I=1,1010,1011,1012,17,18,19,21,41 D | 
|---|
| 45 | . I $L(SEGLINE,HLFS)<($E(I,1,2)-OFFSET) D | 
|---|
| 46 | . . ;Segment wrapped | 
|---|
| 47 | . . S OFFSET=OFFSET+$L(SEGLINE,HLFS)-1 | 
|---|
| 48 | . . S NODE=+$O(ZPDSEG(NODE)) | 
|---|
| 49 | . . I NODE=0 S SEGLINE="",NODE=+$O(ZPDSEG(NODE),-1) Q | 
|---|
| 50 | . . S SEGLINE=$G(ZPDSEG(NODE)) | 
|---|
| 51 | . S DATA=$P(SEGLINE,HLFS,(+$E(I,1,2)-OFFSET)) | 
|---|
| 52 | . I I=1011,DSS=108 Q | 
|---|
| 53 | . I I=1012,DSS'=108 Q | 
|---|
| 54 | . I +$E(I,1,2)=10,+DATA S DATA=$$FMDATE^HLFNC(DATA) | 
|---|
| 55 | . D VALIDATE^SCMSVUT0(SEG,DATA,$P($T(@(I)),";",3),VALERR,.CNT) | 
|---|
| 56 | .Q | 
|---|
| 57 | ; | 
|---|
| 58 | ENQ M ZPDSEG=ZPDSEGSV | 
|---|
| 59 | Q $S($D(@VALERR@(SEG)):MSG,1:1) | 
|---|
| 60 | ; | 
|---|
| 61 | ; | 
|---|
| 62 | ERR ;;Invalid or missing patient ID data for encounter (HL7 ZPD data segment) | 
|---|
| 63 | ; | 
|---|
| 64 | ; | 
|---|
| 65 | ;- ZPD data elements validated | 
|---|
| 66 | ; | 
|---|
| 67 | 1 ;;0035;HL7 SEGMENT NAME | 
|---|
| 68 | 1010 ;;3000;DATE OF DEATH INVALID | 
|---|
| 69 | 1011 ;;2370;DATE OF DEATH BEFORE ENCOUNTER DATE | 
|---|
| 70 | 1012 ;;3030;ENCOUNTER 14 DAYS AFTER THE ENCOUNTER DATE | 
|---|
| 71 | 17 ;;3100;HOMELESS INDICATOR | 
|---|
| 72 | 18 ;;3150;POW STATUS INDICATED? | 
|---|
| 73 | 19 ;;3200;TYPE OF INSURANCE | 
|---|
| 74 | 21 ;;3250;INVALID/INCONSISTENT POW LOCATION | 
|---|
| 75 | 41 ;;3400;INVALID EMERGENCY RESPONSE INDICATOR | 
|---|