Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: SDESCLNSEARCH

SDESCLNSEARCH.m

Go to the documentation of this file.
  1. SDESCLNSEARCH ;ALB/MGD,BWF,JAS - CLINIC NAME SEARCH AND LIMITED DATA RETURN ;NOV 07, 2024
  1. ;;5.3;Scheduling;**824,851,861,895**;Aug 13, 1993;Build 11
  1. ;;Per VHA Directive 6402, this routine should not be modified
  1. ;
  1. Q
  1. ;
  1. ;External References
  1. ;-------------------
  1. ; Reference to $$ACTIVPRV^PXAPI is supported by IA #2349
  1. ;
  1. ; RPC = SDES SEARCH CLINIC ATTRIBUTES
  1. SEARCHCLIN(JSONRETURN,SEARCHSTRING,STATION,DATE) ;Search for clinics and provide return of matches and limited date in JSON STRING
  1. ; INPUT
  1. ; SEARCHSTRING (Req) = free text string that represents the recall clinic name that will be searched
  1. ; STATION (Opt) = Station Number: If present, the search would be limited to matching clinics at the given institution.
  1. ; If absent, the search would take place across all divisions/institutions. Example values: 534, 534GB
  1. ; DATE (Opt) = Date in ISO 8601 format to use for Clinic Status verification. If not passed in, default to DT.
  1. ; OUTPUT - JSONRETURN
  1. ; List of Recall Clinics from the RECALL REMINDERS (#403.5) file with the following data.
  1. ; Field List:
  1. ; 1. Clinic IEN
  1. ; 2. Clinic name
  1. ; 3. Patient friendly name
  1. ; 4. Default provider IEN
  1. ; 5. Default Provider name
  1. ; 6. Default Provider SECID
  1. ; 7. Stop code IEN
  1. ; 8. Stop code NAME
  1. ; 9. Stop code AMIS
  1. ; 10. Credit stop code IEN
  1. ; 11. Credit stop code name
  1. ; 12. Credit stop code AMIS
  1. ; 13. Status (Active or Inactive) If not passed in, default to DT
  1. ; 14. Non-count (Y or N)
  1. ;
  1. N CLINICLIST,ERROREXISTS,ERRORLIST,CLINICLIST
  1. K JSONRETURN
  1. S SEARCHSTRING=$G(SEARCHSTRING),STATION=$G(STATION),DATE=$G(DATE)
  1. S ERROREXISTS=0
  1. S ERROREXISTS=$$VALIDATEINPUT(.ERRORLIST,SEARCHSTRING,STATION,.DATE)
  1. I ERROREXISTS S ERRORLIST("Clinic",1)="" D BUILDJSON^SDESBUILDJSON(.JSONRETURN,.ERRORLIST) Q
  1. D GETCLINICLIST(SEARCHSTRING,STATION,DATE,.CLINICLIST)
  1. D BUILDJSON^SDESBUILDJSON(.JSONRETURN,.CLINICLIST)
  1. Q
  1. ;
  1. VALIDATEINPUT(ERRORLIST,SEARCHSTRING,STATION,DATE) ; validate incoming parameters
  1. ; input - ERRORLIST = passed in by reference, represents the errors that could be generated when validating the searchstring
  1. ; SEARCHSTRING = represents the name or partial name of the Recall Clinic
  1. ; STATION = Station Number
  1. ; returns 0 or 1
  1. ; 0 = no validation errors
  1. ; 1 = validation errors
  1. N NOMATCHFOUND,INACTIVEONDATE
  1. S (NOMATCHFOUND,INACTIVEONDATE)=0
  1. S SEARCHSTRING=$TR(SEARCHSTRING,$C(13)_$C(10)_$C(9),"")
  1. I ($L(SEARCHSTRING)<2)!($L(SEARCHSTRING)>30) D Q 1
  1. . D ERRLOG^SDESJSON(.ERRORLIST,473)
  1. I STATION'="",(($L(STATION)<3)!($L(STATION)>7)) D Q 1
  1. . D ERRLOG^SDESJSON(.ERRORLIST,197)
  1. I STATION'="" D Q:NOMATCHFOUND 1
  1. . D FIND^DIC(4,,"@;99","X",STATION,,"D",,,"RESULTS")
  1. . I '$D(RESULTS("DILIST",2)) D
  1. . . S NOMATCHFOUND=1
  1. . . D ERRLOG^SDESJSON(.ERRORLIST,197)
  1. I DATE="" S DATE=DT
  1. I DATE'="",DATE'?7N S DATE=$$ISOTFM^SDAMUTDT(DATE,"")
  1. I DATE=-1 D ERRLOG^SDESJSON(.ERRORLIST,244) Q 1
  1. Q 0
  1. ;
  1. GETCLINICLIST(SEARCHSTRING,STATION,DATE,CLINICLIST) ; pull matching recall clinics using the first input parameter passed in by the RPC
  1. ; Input - SEARCHSTRING = string that represents the name of the recall clinic
  1. ; STATION = Station Number
  1. ; DATE = Fileman Date to use for Clinic Status verification
  1. ; CLINICLIST = passed in by reference; represents the array that will be returned as output
  1. ; Output - CLINICLIST = list of recall clinic names, clinic IENs and the associated recall reminder IENs.
  1. N CLINCNT,RESULTS,SUB3
  1. K CLINICLIST
  1. S (SUB3,CLINCNT)=0
  1. D FIND^DIC(44,,"@;.01",,SEARCHSTRING,,"B^C",,,"RESULTS")
  1. F S SUB3=$O(RESULTS("DILIST",2,SUB3)) Q:SUB3="" D
  1. . S CLINICIEN=$G(RESULTS("DILIST",2,SUB3))
  1. . I STATION'="" Q:$$WRONGDIVISION(CLINICIEN,STATION)
  1. . Q:$$INACTIVE^SDESUTIL(CLINICIEN,DATE)
  1. . S CLINCNT=CLINCNT+1
  1. . I CLINICIEN D BUILDRETURN(CLINICIEN,CLINCNT,.CLINICLIST)
  1. I CLINCNT=0 S CLINICLIST("Clinic",1)=""
  1. Q
  1. ;
  1. BUILDRETURN(CLINICIEN,CLINCNT,CLINICLIST) ;Build return array with recall reminder clinic data
  1. ; input - CLINICIEN = IEN of clinic in #44
  1. ; CLINICLIST = passed by reference, represents the array of recall clinics and associated data that will be returned to the client
  1. ; output - CLINICLIST = recall clinic array and their associated data to be sent back to the client
  1. ;
  1. N STATUS,SDFIELDS,SDDATA,PRVCNT,CLINPROVIDER,PROVIDERID,PROVIDERNAME,DEFAULTPROVIDER,PROVIDERSECID
  1. S SDFIELDS=".01;1;8;16;60;2502;2503"
  1. D GETS^DIQ(44,CLINICIEN_",",SDFIELDS,"IE","SDDATA","SDMSG")
  1. S CLINICLIST("Clinic",CLINCNT,"Abbreviation")=$G(SDDATA(44,CLINICIEN_",",1,"E"))
  1. S CLINICLIST("Clinic",CLINCNT,"ClinicIEN")=CLINICIEN
  1. S CLINICLIST("Clinic",CLINCNT,"ClinicName")=$G(SDDATA(44,CLINICIEN_",",.01,"E"))
  1. S CLINICLIST("Clinic",CLINCNT,"PatientFriendlyName")=$G(SDDATA(44,CLINICIEN_",",60,"E"))
  1. ; initialize default provider fields to null to ensure they are always defined (in the event no default provider is found)
  1. S CLINICLIST("Clinic",CLINCNT,"DefaultProviderIEN")=""
  1. S CLINICLIST("Clinic",CLINCNT,"DefaultProviderName")=""
  1. S CLINICLIST("Clinic",CLINCNT,"DefaultProviderSecID")=""
  1. S CLINICLIST("Clinic",CLINCNT,"StopCodeIEN")=$G(SDDATA(44,CLINICIEN_",",8,"I"))
  1. S CLINICLIST("Clinic",CLINCNT,"StopCodeName")=$G(SDDATA(44,CLINICIEN_",",8,"E"))
  1. S CLINICLIST("Clinic",CLINCNT,"StopCodeAMIS")=$$GET1^DIQ(40.7,$G(SDDATA(44,CLINICIEN_",",8,"I")),1,"I")
  1. S CLINICLIST("Clinic",CLINCNT,"CreditStopCodeIEN")=$G(SDDATA(44,CLINICIEN_",",2503,"I"))
  1. S CLINICLIST("Clinic",CLINCNT,"CreditStopCodeName")=$G(SDDATA(44,CLINICIEN_",",2503,"E"))
  1. S CLINICLIST("Clinic",CLINCNT,"CreditStopCodeAMIS")=$$GET1^DIQ(40.7,$G(SDDATA(44,CLINICIEN_",",2503,"I")),1,"I")
  1. S CLINICLIST("Clinic",CLINCNT,"NonCountClinic")=$G(SDDATA(44,CLINICIEN_",",2502,"E"))
  1. S STATUS=$$INACTIVE^SDESUTIL(CLINICIEN,DATE),STATUS=$S(STATUS=1:"Inactive",1:"Active")
  1. S CLINICLIST("Clinic",CLINCNT,"ClinicStatus")=STATUS
  1. S PRVCNT=0
  1. S CLINPROVIDER=0 F S CLINPROVIDER=$O(^SC(CLINICIEN,"PR",CLINPROVIDER)) Q:'CLINPROVIDER D
  1. .S PROVIDERID=$$GET1^DIQ(44.1,CLINPROVIDER_","_CLINICIEN_",",.01,"I")
  1. .S PROVIDERNAME=$$GET1^DIQ(200,PROVIDERID,.01,"E")
  1. .S PROVIDERSECID=$$GET1^DIQ(200,PROVIDERID,205.1,"I")
  1. .S DEFAULTPROVIDER=$$GET1^DIQ(44.1,CLINPROVIDER_","_CLINICIEN_",",.02,"I")
  1. .I DEFAULTPROVIDER D Q
  1. ..S CLINICLIST("Clinic",CLINCNT,"DefaultProviderIEN")=PROVIDERID
  1. ..S CLINICLIST("Clinic",CLINCNT,"DefaultProviderName")=$$GET1^DIQ(200,PROVIDERID,.01,"E")
  1. ..S CLINICLIST("Clinic",CLINCNT,"DefaultProviderSecID")=PROVIDERSECID
  1. .S PRVCNT=PRVCNT+1
  1. .S CLINICLIST("Clinic",CLINCNT,"Providers",PRVCNT,"Name")=PROVIDERNAME
  1. .S CLINICLIST("Clinic",CLINCNT,"Providers",PRVCNT,"ID")=PROVIDERID
  1. .S CLINICLIST("Clinic",CLINCNT,"Providers",PRVCNT,"SecID")=PROVIDERSECID
  1. ; set empty object if no records are found
  1. I '$D(CLINICLIST("Clinic",CLINCNT,"Providers")) S CLINICLIST("Clinic",CLINCNT,"Providers",1)=""
  1. ; get subspecialties
  1. N SSCNT,SSFN,SUBSPECIEN
  1. S SSCNT=0
  1. F SSFN=301:1:302 D
  1. . S SUBSPECIEN=0
  1. . F S SUBSPECIEN=$O(^SC(CLINICIEN,SSFN,"B",SUBSPECIEN)) Q:'SUBSPECIEN D
  1. . . S SSCNT=SSCNT+1
  1. . . S CLINICLIST("Clinic",CLINCNT,"Subspecialty",SSCNT,"ID")=$$GET1^DIQ(409.94,SUBSPECIEN_",",.01,"E")
  1. . . S CLINICLIST("Clinic",CLINCNT,"Subspecialty",SSCNT,"Name")=$$GET1^DIQ(409.94,SUBSPECIEN_",",1)
  1. . . S CLINICLIST("Clinic",CLINCNT,"Subspecialty",SSCNT,"Tier")=$$GET1^DIQ(409.94,SUBSPECIEN_",",2,"E")
  1. . . S CLINICLIST("Clinic",CLINCNT,"Subspecialty",SSCNT,"Parent")=$$GET1^DIQ(409.94,SUBSPECIEN_",",3,"E")
  1. I '$D(CLINICLIST("Clinic",CLINCNT,"Subspecialty")) S CLINICLIST("Clinic",CLINCNT,"Subspecialty",1)=""
  1. Q
  1. ;
  1. WRONGDIVISION(CLINICIEN,STATION) ;
  1. ; Screen out Clinics that don't match passed in Station Number
  1. N DIVISION,INSTIEN,STATIONID
  1. S DIVISION=$$GET1^DIQ(44,CLINICIEN,3.5,"I")
  1. S INSTIEN=$$GET1^DIQ(40.8,DIVISION,.07,"I")
  1. S STATIONID=$$GET1^DIQ(4,INSTIEN,99,"I")
  1. I STATIONID'[STATION Q 1
  1. Q 0