BPSJVAL2 ;BHAM ISC/LJF - Validate Pharmacy data ;3/5/08  11:14
 ;;1.0;E CLAIMS MGMT ENGINE;**1,2,5,7**;JUN 2004;Build 46
 ;;Per VHA Directive 2004-038, this routine should not be modified.
 ;
 N PHARMIX,RET,DIR,X
 ;
 S PHARMIX=0,X=""
 F  S PHARMIX=$O(^BPS(9002313.56,PHARMIX)) Q:'PHARMIX  D  Q:X=U
 . W !!,"VERIFY PHARMACY REGISTRATIONS DATA.",!
 . D REG^BPSJPREG(PHARMIX,2)
 . W !
 . S DIR(0)="EO" D ^DIR
 ;
 Q
 ;
 ; Array HL and variable VERBOSE newed/set by calling routine
 ; RETCODE returned to calling routine
VALIDATE(BPSJDDD) ;
 N SEG,SEGIX,ZRP,RAY,RIX,PIX,PIXL,SEGDAT,ZNOTE,ZMAX,CPS,FS,REP
 N VALDATA,TMP
 S ZMAX=17
 ;
 S RETCODE=$G(RETCODE)
 S ZRP="",RIX=0
 ;
 ; Set HL7 Delimiters - use standard defaults if none provided
 S FS=$G(HL("FS")) I FS="" S FS="|"
 S CPS=$E($G(HL("ECH"))) I CPS="" S CPS="^"
 S REP=$E($G(HL("ECH")),2) I REP="" S REP="~"
 ;
 F SEGIX=3:1 S SEG=$G(^TMP("HLS",$J,SEGIX)),PIX=0 Q:SEG=""  D  I ZRP]"" Q
 . I $E(SEG,1,3)="ZRP" S ZRP=$E(SEG,4) S $E(SEG,1,4)=""
 I ZRP="" Q
 F  S RIX=$O(^TMP("HLS",$J,SEGIX,RIX)) Q:'RIX  I RIX<(ZMAX+1) D
 . S TMP=$P($G(^TMP("HLS",$J,SEGIX,RIX)),ZRP)
 . I $G(TMP)="" S RETCODE(RIX)=""
 . I RIX=3 S RETCODE(RIX)=TMP ;capture pharmacy name
 F  S RIX=$O(RETCODE(RIX)) Q:'RIX  D
 . D @RIX
 . I +$G(VERBOSE),$L($G(RETCODE(RIX))) W !,RETCODE(RIX)
 ;
 Q
 ;
 ; NS=Not Supported, R=Required, RE=Required or empty, C=Conditional
 ; CE=Conditional or empty, O=Optional,
 ;
1 ; Set ID - NS
 Q
2 ; NCPDP Number - C
 S ZNOTE="   NCPDP NUMBER - VALID"
 I RETCODE(RIX)="" D
 . I BPSJDDD=0 D
 . . I '$D(RETCODE(17)) Q
 . . S ZNOTE="** NCPDP NUMBER - NCPDP OR NPI - Missing/Invalid",RETCODE=2
 . . S RETCODE(RIX)=ZNOTE_RETCODE(RIX)
 Q
3 ; PHARMACY NAME - R
 S ZNOTE="   PHARMACY NAME"
 I RETCODE(RIX)="" D
 . S ZNOTE="** PHARMACY NAME - Missing/Invalid",RETCODE=3
 I RETCODE(RIX)]"" S RETCODE(RIX)=": "_$$DECODE(RETCODE(RIX))
 S RETCODE(RIX)=ZNOTE_RETCODE(RIX)
 Q
4 ; DEA Number - R
 S ZNOTE="   DEA NUMBER - Required - VALID"
 I RETCODE(RIX)="" D
 . S ZNOTE="** DEA NUMBER - Missing/Invalid",RETCODE=4
 . S RETCODE(RIX)=ZNOTE_RETCODE(RIX)
 Q
5 ; Hour of Operation
 S ZNOTE="" ; not sending anymore
 Q
6 ; Mailing Address - R
 S ZNOTE=$$TRIMTAIL(RETCODE(RIX))
 S VALDATA=($L($P(ZNOTE,CPS,1))<1)          ; Street address
 S VALDATA=($L($P(ZNOTE,CPS,3))<1)+VALDATA  ; City
 S VALDATA=($L($P(ZNOTE,CPS,4))<1)+VALDATA  ; State
 S VALDATA=($L($P(ZNOTE,CPS,5))<1)+VALDATA  ; Zip
 S ZNOTE="   MAILING ADDRESS - Required - VALID"
 I VALDATA D
 . S ZNOTE="** MAILING ADDRESS - Missing/Invalid",RETCODE=6
 . S RETCODE(RIX)=ZNOTE_RETCODE(RIX)
 Q
7 ; Remittance Address - R
 S ZNOTE=$$TRIMTAIL(RETCODE(RIX))
 S VALDATA=($L($P(ZNOTE,CPS,1))<1)          ; Street Address
 S VALDATA=($L($P(ZNOTE,CPS,3))<1)+VALDATA  ; City
 S VALDATA=($L($P(ZNOTE,CPS,4))<1)+VALDATA  ; State
 S VALDATA=($L($P(ZNOTE,CPS,5))<1)+VALDATA  ; Zip
 S ZNOTE="   REMITTANCE ADDRESS - Required - VALID"
 I VALDATA D
 . S ZNOTE="** REMITTANCE ADDRESS - Missing/Invalid",RETCODE=7
 . S RETCODE(RIX)=ZNOTE_RETCODE(RIX)
 Q
8 ; Contact Name
 S ZNOTE=$$TRIMTAIL(RETCODE(RIX))
 S VALDATA=($L($P(ZNOTE,CPS,1))<1)  ; Surname
 S ZNOTE="   CONTACT NAME - Required - VALID"
 I VALDATA D
 . S ZNOTE="** CONTACT NAME - Missing/Invalid",RETCODE=8
 . S RETCODE(RIX)=ZNOTE_RETCODE(RIX)
 Q
9 ; Contact Title
 S ZNOTE="   CONTACT TITLE - VALID"
 Q
10 ; Contact means
 S ZNOTE="   CONTACT MEANS - VALID"
 ;S RETCODE(RIX)=ZNOTE_RETCODE(RIX)
 Q
11 ; Alternate Contact Name
 S ZNOTE=$$TRIMTAIL(RETCODE(RIX))
 S VALDATA=($L($P(ZNOTE,CPS,1))<1)  ; Surname
 S ZNOTE="   ALTERNATE CONTACT NAME - Required - VALID"
 I VALDATA D
 . S ZNOTE="** ALTERNATE CONTACT NAME - Missing/Invalid",RETCODE=11
 . S RETCODE(RIX)=ZNOTE_RETCODE(RIX)
 Q
12 ; Alternate Contact Title
 S ZNOTE="   ALTERNATE CONTACT TITLE - VALID"
 Q
13 ; Alternate Contact means
 S ZNOTE="   ALTERNATE CONTACT MEANS - VALID"
 Q
14 ; Lead Pharmacist Name - R
 S ZNOTE=$$TRIMTAIL(RETCODE(RIX))
 S VALDATA=($L($P(ZNOTE,CPS,1))<1)  ; Surname
 S ZNOTE="   LEAD PHARMACIST NAME - Required - VALID"
 I VALDATA D
 . S ZNOTE="** LEAD PHARMACIST NAME - Missing/Invalid",RETCODE=14
 . S RETCODE(RIX)=ZNOTE_RETCODE(RIX)
 Q
15 ; Lead Pharmacist Title
 S ZNOTE="   LEAD PHARMACIST TITLE - VALID"
 Q
16 ; Lead Pharmacist License Number
 S ZNOTE="   LEAD PHARMACIST LICENSE NUMBER - VALID"
 Q
17 ; NPI Number - C (R - AFTER DDD)
 S ZNOTE="   NPI NUMBER - Required - VALID "
 I RETCODE(RIX)="" D
 . I BPSJDDD=0 D
 . . I '$D(RETCODE(2)) S ZNOTE="   NPI NUMBER - Warning NPI NUMBER Missing " Q
 . . S ZNOTE="** NPI NUMBER - NPI OR NCPDP - Missing/Invalid" S RETCODE=17
 . I BPSJDDD>0 D
 . . S ZNOTE="** NPI NUMBER - Missing/Invalid" S RETCODE=17
 . S RETCODE(RIX)=ZNOTE_RETCODE(RIX)
 Q
 ;
TRIMTAIL(INSTR) ;
 N OUTSTR,CHR
 ;
 I $G(INSTR)="" Q ""   ; quit if nothing there
 ;
 S INSTR=$RE(INSTR)
 S CHR=$E($TR(INSTR,CPS_REP))
 I CHR]"" Q $RE($P(INSTR,CHR,2,200))_CHR
 Q ""
 ;
 ; DECODE - Normalize data for display
 ; Input:
 ;   INSTR - String to normalize
 ; Output
 ;   Normalize data
DECODE(INSTR) ;
 N TRCH
 S TRCH("\F\")="|",TRCH("\R\")="~",TRCH("\E\")="\"
 S TRCH("\T\")="&",TRCH("\S\")="^"
 Q $$DECODE^BPSJZPR(INSTR,.TRCH)
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HBPSJVAL2   5319     printed  Sep 23, 2025@19:27:20                                                                                                                                                                                                    Page 2
BPSJVAL2  ;BHAM ISC/LJF - Validate Pharmacy data ;3/5/08  11:14
 +1       ;;1.0;E CLAIMS MGMT ENGINE;**1,2,5,7**;JUN 2004;Build 46
 +2       ;;Per VHA Directive 2004-038, this routine should not be modified.
 +3       ;
 +4        NEW PHARMIX,RET,DIR,X
 +5       ;
 +6        SET PHARMIX=0
           SET X=""
 +7        FOR 
               SET PHARMIX=$ORDER(^BPS(9002313.56,PHARMIX))
               if 'PHARMIX
                   QUIT 
               Begin DoDot:1
 +8                WRITE !!,"VERIFY PHARMACY REGISTRATIONS DATA.",!
 +9                DO REG^BPSJPREG(PHARMIX,2)
 +10               WRITE !
 +11               SET DIR(0)="EO"
                   DO ^DIR
               End DoDot:1
               if X=U
                   QUIT 
 +12      ;
 +13       QUIT 
 +14      ;
 +15      ; Array HL and variable VERBOSE newed/set by calling routine
 +16      ; RETCODE returned to calling routine
VALIDATE(BPSJDDD) ;
 +1        NEW SEG,SEGIX,ZRP,RAY,RIX,PIX,PIXL,SEGDAT,ZNOTE,ZMAX,CPS,FS,REP
 +2        NEW VALDATA,TMP
 +3        SET ZMAX=17
 +4       ;
 +5        SET RETCODE=$GET(RETCODE)
 +6        SET ZRP=""
           SET RIX=0
 +7       ;
 +8       ; Set HL7 Delimiters - use standard defaults if none provided
 +9        SET FS=$GET(HL("FS"))
           IF FS=""
               SET FS="|"
 +10       SET CPS=$EXTRACT($GET(HL("ECH")))
           IF CPS=""
               SET CPS="^"
 +11       SET REP=$EXTRACT($GET(HL("ECH")),2)
           IF REP=""
               SET REP="~"
 +12      ;
 +13       FOR SEGIX=3:1
               SET SEG=$GET(^TMP("HLS",$JOB,SEGIX))
               SET PIX=0
               if SEG=""
                   QUIT 
               Begin DoDot:1
 +14               IF $EXTRACT(SEG,1,3)="ZRP"
                       SET ZRP=$EXTRACT(SEG,4)
                       SET $EXTRACT(SEG,1,4)=""
               End DoDot:1
               IF ZRP]""
                   QUIT 
 +15       IF ZRP=""
               QUIT 
 +16       FOR 
               SET RIX=$ORDER(^TMP("HLS",$JOB,SEGIX,RIX))
               if 'RIX
                   QUIT 
               IF RIX<(ZMAX+1)
                   Begin DoDot:1
 +17                   SET TMP=$PIECE($GET(^TMP("HLS",$JOB,SEGIX,RIX)),ZRP)
 +18                   IF $GET(TMP)=""
                           SET RETCODE(RIX)=""
 +19      ;capture pharmacy name
                       IF RIX=3
                           SET RETCODE(RIX)=TMP
                   End DoDot:1
 +20       FOR 
               SET RIX=$ORDER(RETCODE(RIX))
               if 'RIX
                   QUIT 
               Begin DoDot:1
 +21               DO @RIX
 +22               IF +$GET(VERBOSE)
                       IF $LENGTH($GET(RETCODE(RIX)))
                           WRITE !,RETCODE(RIX)
               End DoDot:1
 +23      ;
 +24       QUIT 
 +25      ;
 +26      ; NS=Not Supported, R=Required, RE=Required or empty, C=Conditional
 +27      ; CE=Conditional or empty, O=Optional,
 +28      ;
1         ; Set ID - NS
 +1        QUIT 
2         ; NCPDP Number - C
 +1        SET ZNOTE="   NCPDP NUMBER - VALID"
 +2        IF RETCODE(RIX)=""
               Begin DoDot:1
 +3                IF BPSJDDD=0
                       Begin DoDot:2
 +4                        IF '$DATA(RETCODE(17))
                               QUIT 
 +5                        SET ZNOTE="** NCPDP NUMBER - NCPDP OR NPI - Missing/Invalid"
                           SET RETCODE=2
 +6                        SET RETCODE(RIX)=ZNOTE_RETCODE(RIX)
                       End DoDot:2
               End DoDot:1
 +7        QUIT 
3         ; PHARMACY NAME - R
 +1        SET ZNOTE="   PHARMACY NAME"
 +2        IF RETCODE(RIX)=""
               Begin DoDot:1
 +3                SET ZNOTE="** PHARMACY NAME - Missing/Invalid"
                   SET RETCODE=3
               End DoDot:1
 +4        IF RETCODE(RIX)]""
               SET RETCODE(RIX)=": "_$$DECODE(RETCODE(RIX))
 +5        SET RETCODE(RIX)=ZNOTE_RETCODE(RIX)
 +6        QUIT 
4         ; DEA Number - R
 +1        SET ZNOTE="   DEA NUMBER - Required - VALID"
 +2        IF RETCODE(RIX)=""
               Begin DoDot:1
 +3                SET ZNOTE="** DEA NUMBER - Missing/Invalid"
                   SET RETCODE=4
 +4                SET RETCODE(RIX)=ZNOTE_RETCODE(RIX)
               End DoDot:1
 +5        QUIT 
5         ; Hour of Operation
 +1       ; not sending anymore
           SET ZNOTE=""
 +2        QUIT 
6         ; Mailing Address - R
 +1        SET ZNOTE=$$TRIMTAIL(RETCODE(RIX))
 +2       ; Street address
           SET VALDATA=($LENGTH($PIECE(ZNOTE,CPS,1))<1)
 +3       ; City
           SET VALDATA=($LENGTH($PIECE(ZNOTE,CPS,3))<1)+VALDATA
 +4       ; State
           SET VALDATA=($LENGTH($PIECE(ZNOTE,CPS,4))<1)+VALDATA
 +5       ; Zip
           SET VALDATA=($LENGTH($PIECE(ZNOTE,CPS,5))<1)+VALDATA
 +6        SET ZNOTE="   MAILING ADDRESS - Required - VALID"
 +7        IF VALDATA
               Begin DoDot:1
 +8                SET ZNOTE="** MAILING ADDRESS - Missing/Invalid"
                   SET RETCODE=6
 +9                SET RETCODE(RIX)=ZNOTE_RETCODE(RIX)
               End DoDot:1
 +10       QUIT 
7         ; Remittance Address - R
 +1        SET ZNOTE=$$TRIMTAIL(RETCODE(RIX))
 +2       ; Street Address
           SET VALDATA=($LENGTH($PIECE(ZNOTE,CPS,1))<1)
 +3       ; City
           SET VALDATA=($LENGTH($PIECE(ZNOTE,CPS,3))<1)+VALDATA
 +4       ; State
           SET VALDATA=($LENGTH($PIECE(ZNOTE,CPS,4))<1)+VALDATA
 +5       ; Zip
           SET VALDATA=($LENGTH($PIECE(ZNOTE,CPS,5))<1)+VALDATA
 +6        SET ZNOTE="   REMITTANCE ADDRESS - Required - VALID"
 +7        IF VALDATA
               Begin DoDot:1
 +8                SET ZNOTE="** REMITTANCE ADDRESS - Missing/Invalid"
                   SET RETCODE=7
 +9                SET RETCODE(RIX)=ZNOTE_RETCODE(RIX)
               End DoDot:1
 +10       QUIT 
8         ; Contact Name
 +1        SET ZNOTE=$$TRIMTAIL(RETCODE(RIX))
 +2       ; Surname
           SET VALDATA=($LENGTH($PIECE(ZNOTE,CPS,1))<1)
 +3        SET ZNOTE="   CONTACT NAME - Required - VALID"
 +4        IF VALDATA
               Begin DoDot:1
 +5                SET ZNOTE="** CONTACT NAME - Missing/Invalid"
                   SET RETCODE=8
 +6                SET RETCODE(RIX)=ZNOTE_RETCODE(RIX)
               End DoDot:1
 +7        QUIT 
9         ; Contact Title
 +1        SET ZNOTE="   CONTACT TITLE - VALID"
 +2        QUIT 
10        ; Contact means
 +1        SET ZNOTE="   CONTACT MEANS - VALID"
 +2       ;S RETCODE(RIX)=ZNOTE_RETCODE(RIX)
 +3        QUIT 
11        ; Alternate Contact Name
 +1        SET ZNOTE=$$TRIMTAIL(RETCODE(RIX))
 +2       ; Surname
           SET VALDATA=($LENGTH($PIECE(ZNOTE,CPS,1))<1)
 +3        SET ZNOTE="   ALTERNATE CONTACT NAME - Required - VALID"
 +4        IF VALDATA
               Begin DoDot:1
 +5                SET ZNOTE="** ALTERNATE CONTACT NAME - Missing/Invalid"
                   SET RETCODE=11
 +6                SET RETCODE(RIX)=ZNOTE_RETCODE(RIX)
               End DoDot:1
 +7        QUIT 
12        ; Alternate Contact Title
 +1        SET ZNOTE="   ALTERNATE CONTACT TITLE - VALID"
 +2        QUIT 
13        ; Alternate Contact means
 +1        SET ZNOTE="   ALTERNATE CONTACT MEANS - VALID"
 +2        QUIT 
14        ; Lead Pharmacist Name - R
 +1        SET ZNOTE=$$TRIMTAIL(RETCODE(RIX))
 +2       ; Surname
           SET VALDATA=($LENGTH($PIECE(ZNOTE,CPS,1))<1)
 +3        SET ZNOTE="   LEAD PHARMACIST NAME - Required - VALID"
 +4        IF VALDATA
               Begin DoDot:1
 +5                SET ZNOTE="** LEAD PHARMACIST NAME - Missing/Invalid"
                   SET RETCODE=14
 +6                SET RETCODE(RIX)=ZNOTE_RETCODE(RIX)
               End DoDot:1
 +7        QUIT 
15        ; Lead Pharmacist Title
 +1        SET ZNOTE="   LEAD PHARMACIST TITLE - VALID"
 +2        QUIT 
16        ; Lead Pharmacist License Number
 +1        SET ZNOTE="   LEAD PHARMACIST LICENSE NUMBER - VALID"
 +2        QUIT 
17        ; NPI Number - C (R - AFTER DDD)
 +1        SET ZNOTE="   NPI NUMBER - Required - VALID "
 +2        IF RETCODE(RIX)=""
               Begin DoDot:1
 +3                IF BPSJDDD=0
                       Begin DoDot:2
 +4                        IF '$DATA(RETCODE(2))
                               SET ZNOTE="   NPI NUMBER - Warning NPI NUMBER Missing "
                               QUIT 
 +5                        SET ZNOTE="** NPI NUMBER - NPI OR NCPDP - Missing/Invalid"
                           SET RETCODE=17
                       End DoDot:2
 +6                IF BPSJDDD>0
                       Begin DoDot:2
 +7                        SET ZNOTE="** NPI NUMBER - Missing/Invalid"
                           SET RETCODE=17
                       End DoDot:2
 +8                SET RETCODE(RIX)=ZNOTE_RETCODE(RIX)
               End DoDot:1
 +9        QUIT 
 +10      ;
TRIMTAIL(INSTR) ;
 +1        NEW OUTSTR,CHR
 +2       ;
 +3       ; quit if nothing there
           IF $GET(INSTR)=""
               QUIT ""
 +4       ;
 +5        SET INSTR=$REVERSE(INSTR)
 +6        SET CHR=$EXTRACT($TRANSLATE(INSTR,CPS_REP))
 +7        IF CHR]""
               QUIT $REVERSE($PIECE(INSTR,CHR,2,200))_CHR
 +8        QUIT ""
 +9       ;
 +10      ; DECODE - Normalize data for display
 +11      ; Input:
 +12      ;   INSTR - String to normalize
 +13      ; Output
 +14      ;   Normalize data
DECODE(INSTR) ;
 +1        NEW TRCH
 +2        SET TRCH("\F\")="|"
           SET TRCH("\R\")="~"
           SET TRCH("\E\")="\"
 +3        SET TRCH("\T\")="&"
           SET TRCH("\S\")="^"
 +4        QUIT $$DECODE^BPSJZPR(INSTR,.TRCH)