DGRRLU5 ; ALB/sgg/MM - DG Replacement and Rehosting RPC for VADPT ; May-4-2004  ;
 ;;5.3;Registration;**538**;Aug 13, 1993
 ; provider lookup
 ; called by DGRRLU at line PRVLUP^DGRRLU5 if PARAMS("SEARCH_TYPE") = "PRVLUP"
 ;
 ;
DOC ;INPUT:  Input is by the following parameters in the PARAMS() array:
 ;
 ;"PRV_VPID" - VPID [Required VPID unless PRV_LNAM is not Null.]
 ;             If not null the query will only return the one person 
 ;             with this VPID, and only then if SSN, PROV and STN filters
 ;             do not exclude this person.
 ;"PRV_LNAM" - LAST NAME [Required Char String unless VPID is not Null.]
 ;             If not null the query will only return persons whose 
 ;             last name starts with this string.
 ;"PRV_FNAM" - FIRST NAME [Optional: Character String or Null.]
 ;             If not null the query will only return persons whose 
 ;             first name starts with this string.
 ;"PRV_SSN"  - SSN FILTER [Optional: 9 digits or Null.]
 ;             If not null the query will only return persons with 
 ;             this social security number.
 ;"PRV_PROV" - PROVIDER FILTER [Optional: "P" or Null.]
 ;             If set to "P" the query includes only providers, i.e. 
 ;             persons with a person class active on the PRV_DATE.
 ;"PRV_STN"  - STATION NUMBER FILTER [Optional: an STN or Null.]
 ;             If not null the query only returns persons with this 
 ;             station number.
 ;"PRV_MNM"  - MAXIMUM NUMBER [Optional: min=1 max=50 default=50.]
 ;             The maximum number of persons the query will return.  
 ;             If VPID is not null this is always 1.
 ;"PRV_DATE" - DATE [Optional: if Null this defaults to Today.]
 ;             The Date against which a persons active person class is
 ;             determined.
 ;
 ;OUTPUT:  Output an XML with a schema as given:
 ;
 ; <?xml version="1.0" encoding="utf-8" ?>
 ;      <persons>                                   Example Data
 ;           <person>
 ;           </vpid>                                999999999
 ;           </ien>                                 11579
 ;           </lname>                               KRUSHER
 ;           </fname>                               WILL
 ;           </mname>                               MIDDIE
 ;           </ssn>                                 232323232
 ;           </dob>                                 2330303
 ;           </sex>                                 M
 ;                <providerInfo>
 ;                     </type>                      Physician Assistants
 ;                     </classification>            Physician Assistant
 ;                     </specialization>            Medical
 ;                     </VACode>                    V100100
 ;                     </X12Code>                   363AM0700N
 ;                     </SpecialityCode>            97
 ;                </providerInfo>                                      
 ;           </person>                                      
 ;           <error message=''></error>                                  
 ;           <maximum message=''></maximum>                         
 ;           <record count='1'></record>                           
 ;           <institution name='ALBANY' number='500' productiondatabase='0' domain='DMA.FO-ALBANY.DOMAIN.EXT' ></institution>
 ;      </persons>
 ;
 ;
PRVLUP(RESULT,PARAMS) ;
 NEW DGRRVPID,DGRRLNAM,DGRRFNAM,DGRRSSN,DGRRPROV,DGRRSTN,DGRRMNM,DGRRDATE
 SET DGRRVPID=$G(PARAMS("PRV_VPID")) ; - The VPID of a Provider (Required unless lookup is by Provider Name)
 SET DGRRLNAM=$G(PARAMS("PRV_LNAM")) ; - Part or all of the last name to use for basis of query (Required unless lookup is by VPID)
 SET DGRRFNAM=$G(PARAMS("PRV_FNAM")) ; - Part or all of the first name to use for basis of query filter (optional, can be null)
 SET DGRRSSN=$G(PARAMS("PRV_SSN"))   ; - Social Security Number (null or full 9 digits) to use as additional filter for query
 SET DGRRPROV=$G(PARAMS("PRV_PROV")) ; - If value set to "P", screen for only providers (only persons with active person class)
 SET DGRRSTN=$G(PARAMS("PRV_STN"))   ; - Filter persons based on station number entered (optional, can be null)
 SET DGRRMNM=$G(PARAMS("PRV_MNM"))   ; - Maximum Number of entries to return (Number between 1 and 50.  Null defaults to 50)
 SET DGRRDATE=$G(PARAMS("PRV_DATE")) ; - Date to be used to determine whether person has active person class.  If null, current date is used.
 ;
 N DGRRARR,DGRRCNT,ERRMESS,DGRRGLB
 DO ADD("<persons>")
 SET DGRRCNT=0 ;Initialize Record Count
 IF (DGRRLNAM=""),(DGRRVPID="") SET ERRMESS="Query requires a last name or a VPID." GOTO FINALLY
 ;
 D EN1^XUPSQRY(.DGRRARR,DGRRVPID,DGRRLNAM,DGRRFNAM,DGRRSSN,DGRRPROV,DGRRSTN,DGRRMNM,DGRRDATE)
 K ^TMP($J,"PLUQRY")
 M ^TMP($J,"PLUQRY")=@DGRRARR
 I '$D(^TMP($J,"PLUQRY",1))!($G(^TMP($J,"PLUQRY",1))=0) D  Q
 .S ERRMESS="No records found."
 .D FINALLY
 N DGRRI,DGRRCNT
 S (DGRRI,DGRRCNT)=0
 F  S DGRRI=$O(^TMP($J,"PLUQRY",DGRRI)) Q:DGRRI=""  D
 .N DGRR0,DGRR1,DGRR2,DGRR3,DGRR4,DGRRVPID,DGRRIEN,DGRRNM,DGRRSSN,DGRRDOB,DGRRSEX
 .S DGRRCNT=DGRRCNT+1
 .; DGRR0=VPID^IEN^Last Name~First Name~Middle Name^SSN^DOB^SEX
 .S DGRR0=$G(^TMP($J,"PLUQRY",DGRRCNT,0))
 .S DGRR1=$G(^TMP($J,"PLUQRY",DGRRCNT,1))  ;Provider Type
 .S DGRR2=$G(^TMP($J,"PLUQRY",DGRRCNT,2))  ;Provider Classification
 .S DGRR3=$G(^TMP($J,"PLUQRY",DGRRCNT,3))  ;Area of Specialization
 .; DGRR4=VA Code^X12 Code^Specialty Code
 .S DGRR4=$G(^TMP($J,"PLUQRY",DGRRCNT,4))
 .S DGRRVPID=$P(DGRR0,U)
 .S DGRRIEN=$P(DGRR0,U,2)
 .S DGRRNM=$P(DGRR0,U,3)
 .S DGRRSSN=$P(DGRR0,U,4)
 .S DGRRDOB=$P(DGRR0,U,5)
 .S DGRRSEX=$P(DGRR0,U,6)
 .D FOUND
 D FINALLY
 Q
 ;
FINALLY DO ADD("<error message='"_$G(ERRMESS)_"'></error>")
 DO ADD("<maximum message=''></maximum>")
 DO ADD("<record count='"_DGRRCNT_"'></record>")
 I $G(DGRRARR)'="" K @DGRRARR
 K ^TMP($J,"PLUQRY")
 Q
 ;
FOUND ;Build XML of found records
 ;
 DO ADD("<person>")
 DO ADD("<vpid>"_$$CHARCHK^DGRRUTL(DGRRVPID)_"</vpid>")
 DO ADD("<ien>"_$$CHARCHK^DGRRUTL(DGRRIEN)_"</ien>")
 DO ADD("<lname>"_$$CHARCHK^DGRRUTL($P(DGRRNM,"~",1))_"</lname>")
 DO ADD("<fname>"_$$CHARCHK^DGRRUTL($P(DGRRNM,"~",2))_"</fname>")
 DO ADD("<mname>"_$$CHARCHK^DGRRUTL($P(DGRRNM,"~",3))_"</mname>")
 DO ADD("<ssn>"_$$CHARCHK^DGRRUTL(DGRRSSN)_"</ssn>")
 DO ADD("<dob>"_$$CHARCHK^DGRRUTL(DGRRDOB)_"</dob>")
 DO ADD("<sex>"_$$CHARCHK^DGRRUTL(DGRRSEX)_"</sex>")
 DO ADD("<providerInfo>")
 DO ADD("<type>"_$$CHARCHK^DGRRUTL($P(DGRR1,U))_"</type>")
 DO ADD("<classification>"_$$CHARCHK^DGRRUTL($P(DGRR2,U))_"</classification>")
 DO ADD("<specialization>"_$$CHARCHK^DGRRUTL($P(DGRR3,U))_"</specialization>")
 DO ADD("<VACode>"_$$CHARCHK^DGRRUTL($P(DGRR4,U))_"</VACode>")
 DO ADD("<X12Code>"_$$CHARCHK^DGRRUTL($P(DGRR4,U,2))_"</X12Code>")
 DO ADD("<SpecialityCode>"_$$CHARCHK^DGRRUTL($P(DGRR4,U,3))_"</SpecialityCode>")
 DO ADD("</providerInfo>")
 DO ADD("</person>")
 QUIT
 ;
ADD(STR) ; add string to array
 SET DGRRLINE=DGRRLINE+1
 SET @DGRRESLT@(DGRRLINE)=STR
 QUIT
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HDGRRLU5   7160     printed  Sep 23, 2025@20:33:32                                                                                                                                                                                                     Page 2
DGRRLU5   ; ALB/sgg/MM - DG Replacement and Rehosting RPC for VADPT ; May-4-2004  ;
 +1       ;;5.3;Registration;**538**;Aug 13, 1993
 +2       ; provider lookup
 +3       ; called by DGRRLU at line PRVLUP^DGRRLU5 if PARAMS("SEARCH_TYPE") = "PRVLUP"
 +4       ;
 +5       ;
DOC       ;INPUT:  Input is by the following parameters in the PARAMS() array:
 +1       ;
 +2       ;"PRV_VPID" - VPID [Required VPID unless PRV_LNAM is not Null.]
 +3       ;             If not null the query will only return the one person 
 +4       ;             with this VPID, and only then if SSN, PROV and STN filters
 +5       ;             do not exclude this person.
 +6       ;"PRV_LNAM" - LAST NAME [Required Char String unless VPID is not Null.]
 +7       ;             If not null the query will only return persons whose 
 +8       ;             last name starts with this string.
 +9       ;"PRV_FNAM" - FIRST NAME [Optional: Character String or Null.]
 +10      ;             If not null the query will only return persons whose 
 +11      ;             first name starts with this string.
 +12      ;"PRV_SSN"  - SSN FILTER [Optional: 9 digits or Null.]
 +13      ;             If not null the query will only return persons with 
 +14      ;             this social security number.
 +15      ;"PRV_PROV" - PROVIDER FILTER [Optional: "P" or Null.]
 +16      ;             If set to "P" the query includes only providers, i.e. 
 +17      ;             persons with a person class active on the PRV_DATE.
 +18      ;"PRV_STN"  - STATION NUMBER FILTER [Optional: an STN or Null.]
 +19      ;             If not null the query only returns persons with this 
 +20      ;             station number.
 +21      ;"PRV_MNM"  - MAXIMUM NUMBER [Optional: min=1 max=50 default=50.]
 +22      ;             The maximum number of persons the query will return.  
 +23      ;             If VPID is not null this is always 1.
 +24      ;"PRV_DATE" - DATE [Optional: if Null this defaults to Today.]
 +25      ;             The Date against which a persons active person class is
 +26      ;             determined.
 +27      ;
 +28      ;OUTPUT:  Output an XML with a schema as given:
 +29      ;
 +30      ; <?xml version="1.0" encoding="utf-8" ?>
 +31      ;      <persons>                                   Example Data
 +32      ;           <person>
 +33      ;           </vpid>                                999999999
 +34      ;           </ien>                                 11579
 +35      ;           </lname>                               KRUSHER
 +36      ;           </fname>                               WILL
 +37      ;           </mname>                               MIDDIE
 +38      ;           </ssn>                                 232323232
 +39      ;           </dob>                                 2330303
 +40      ;           </sex>                                 M
 +41      ;                <providerInfo>
 +42      ;                     </type>                      Physician Assistants
 +43      ;                     </classification>            Physician Assistant
 +44      ;                     </specialization>            Medical
 +45      ;                     </VACode>                    V100100
 +46      ;                     </X12Code>                   363AM0700N
 +47      ;                     </SpecialityCode>            97
 +48      ;                </providerInfo>                                      
 +49      ;           </person>                                      
 +50      ;           <error message=''></error>                                  
 +51      ;           <maximum message=''></maximum>                         
 +52      ;           <record count='1'></record>                           
 +53      ;           <institution name='ALBANY' number='500' productiondatabase='0' domain='DMA.FO-ALBANY.DOMAIN.EXT' ></institution>
 +54      ;      </persons>
 +55      ;
 +56      ;
PRVLUP(RESULT,PARAMS) ;
 +1        NEW DGRRVPID,DGRRLNAM,DGRRFNAM,DGRRSSN,DGRRPROV,DGRRSTN,DGRRMNM,DGRRDATE
 +2       ; - The VPID of a Provider (Required unless lookup is by Provider Name)
           SET DGRRVPID=$GET(PARAMS("PRV_VPID"))
 +3       ; - Part or all of the last name to use for basis of query (Required unless lookup is by VPID)
           SET DGRRLNAM=$GET(PARAMS("PRV_LNAM"))
 +4       ; - Part or all of the first name to use for basis of query filter (optional, can be null)
           SET DGRRFNAM=$GET(PARAMS("PRV_FNAM"))
 +5       ; - Social Security Number (null or full 9 digits) to use as additional filter for query
           SET DGRRSSN=$GET(PARAMS("PRV_SSN"))
 +6       ; - If value set to "P", screen for only providers (only persons with active person class)
           SET DGRRPROV=$GET(PARAMS("PRV_PROV"))
 +7       ; - Filter persons based on station number entered (optional, can be null)
           SET DGRRSTN=$GET(PARAMS("PRV_STN"))
 +8       ; - Maximum Number of entries to return (Number between 1 and 50.  Null defaults to 50)
           SET DGRRMNM=$GET(PARAMS("PRV_MNM"))
 +9       ; - Date to be used to determine whether person has active person class.  If null, current date is used.
           SET DGRRDATE=$GET(PARAMS("PRV_DATE"))
 +10      ;
 +11       NEW DGRRARR,DGRRCNT,ERRMESS,DGRRGLB
 +12       DO ADD("<persons>")
 +13      ;Initialize Record Count
           SET DGRRCNT=0
 +14       IF (DGRRLNAM="")
               IF (DGRRVPID="")
                   SET ERRMESS="Query requires a last name or a VPID."
                   GOTO FINALLY
 +15      ;
 +16       DO EN1^XUPSQRY(.DGRRARR,DGRRVPID,DGRRLNAM,DGRRFNAM,DGRRSSN,DGRRPROV,DGRRSTN,DGRRMNM,DGRRDATE)
 +17       KILL ^TMP($JOB,"PLUQRY")
 +18       MERGE ^TMP($JOB,"PLUQRY")=@DGRRARR
 +19       IF '$DATA(^TMP($JOB,"PLUQRY",1))!($GET(^TMP($JOB,"PLUQRY",1))=0)
               Begin DoDot:1
 +20               SET ERRMESS="No records found."
 +21               DO FINALLY
               End DoDot:1
               QUIT 
 +22       NEW DGRRI,DGRRCNT
 +23       SET (DGRRI,DGRRCNT)=0
 +24       FOR 
               SET DGRRI=$ORDER(^TMP($JOB,"PLUQRY",DGRRI))
               if DGRRI=""
                   QUIT 
               Begin DoDot:1
 +25               NEW DGRR0,DGRR1,DGRR2,DGRR3,DGRR4,DGRRVPID,DGRRIEN,DGRRNM,DGRRSSN,DGRRDOB,DGRRSEX
 +26               SET DGRRCNT=DGRRCNT+1
 +27      ; DGRR0=VPID^IEN^Last Name~First Name~Middle Name^SSN^DOB^SEX
 +28               SET DGRR0=$GET(^TMP($JOB,"PLUQRY",DGRRCNT,0))
 +29      ;Provider Type
                   SET DGRR1=$GET(^TMP($JOB,"PLUQRY",DGRRCNT,1))
 +30      ;Provider Classification
                   SET DGRR2=$GET(^TMP($JOB,"PLUQRY",DGRRCNT,2))
 +31      ;Area of Specialization
                   SET DGRR3=$GET(^TMP($JOB,"PLUQRY",DGRRCNT,3))
 +32      ; DGRR4=VA Code^X12 Code^Specialty Code
 +33               SET DGRR4=$GET(^TMP($JOB,"PLUQRY",DGRRCNT,4))
 +34               SET DGRRVPID=$PIECE(DGRR0,U)
 +35               SET DGRRIEN=$PIECE(DGRR0,U,2)
 +36               SET DGRRNM=$PIECE(DGRR0,U,3)
 +37               SET DGRRSSN=$PIECE(DGRR0,U,4)
 +38               SET DGRRDOB=$PIECE(DGRR0,U,5)
 +39               SET DGRRSEX=$PIECE(DGRR0,U,6)
 +40               DO FOUND
               End DoDot:1
 +41       DO FINALLY
 +42       QUIT 
 +43      ;
FINALLY    DO ADD("<error message='"_$GET(ERRMESS)_"'></error>")
 +1        DO ADD("<maximum message=''></maximum>")
 +2        DO ADD("<record count='"_DGRRCNT_"'></record>")
 +3        IF $GET(DGRRARR)'=""
               KILL @DGRRARR
 +4        KILL ^TMP($JOB,"PLUQRY")
 +5        QUIT 
 +6       ;
FOUND     ;Build XML of found records
 +1       ;
 +2        DO ADD("<person>")
 +3        DO ADD("<vpid>"_$$CHARCHK^DGRRUTL(DGRRVPID)_"</vpid>")
 +4        DO ADD("<ien>"_$$CHARCHK^DGRRUTL(DGRRIEN)_"</ien>")
 +5        DO ADD("<lname>"_$$CHARCHK^DGRRUTL($PIECE(DGRRNM,"~",1))_"</lname>")
 +6        DO ADD("<fname>"_$$CHARCHK^DGRRUTL($PIECE(DGRRNM,"~",2))_"</fname>")
 +7        DO ADD("<mname>"_$$CHARCHK^DGRRUTL($PIECE(DGRRNM,"~",3))_"</mname>")
 +8        DO ADD("<ssn>"_$$CHARCHK^DGRRUTL(DGRRSSN)_"</ssn>")
 +9        DO ADD("<dob>"_$$CHARCHK^DGRRUTL(DGRRDOB)_"</dob>")
 +10       DO ADD("<sex>"_$$CHARCHK^DGRRUTL(DGRRSEX)_"</sex>")
 +11       DO ADD("<providerInfo>")
 +12       DO ADD("<type>"_$$CHARCHK^DGRRUTL($PIECE(DGRR1,U))_"</type>")
 +13       DO ADD("<classification>"_$$CHARCHK^DGRRUTL($PIECE(DGRR2,U))_"</classification>")
 +14       DO ADD("<specialization>"_$$CHARCHK^DGRRUTL($PIECE(DGRR3,U))_"</specialization>")
 +15       DO ADD("<VACode>"_$$CHARCHK^DGRRUTL($PIECE(DGRR4,U))_"</VACode>")
 +16       DO ADD("<X12Code>"_$$CHARCHK^DGRRUTL($PIECE(DGRR4,U,2))_"</X12Code>")
 +17       DO ADD("<SpecialityCode>"_$$CHARCHK^DGRRUTL($PIECE(DGRR4,U,3))_"</SpecialityCode>")
 +18       DO ADD("</providerInfo>")
 +19       DO ADD("</person>")
 +20       QUIT 
 +21      ;
ADD(STR)  ; add string to array
 +1        SET DGRRLINE=DGRRLINE+1
 +2        SET @DGRRESLT@(DGRRLINE)=STR
 +3        QUIT