- SDES2CLNSEARCH ;ALB/MGD,BWF,JAS,JDJ,JAS - CLINIC NAME SEARCH AND LIMITED DATA RETURN ;NOV 07, 2024
- ;;5.3;Scheduling;**870,871,875,887,895**;Aug 13, 1993;Build 11
- ;;Per VHA Directive 6402, this routine should not be modified
- ;
- Q
- ;
- ;External References
- ;-------------------
- ; Reference to $$ACTIVPRV^PXAPI is supported by IA #2349
- ;
- ; Copy of SDESCLNSEARCH for SDES2 Namespace
- ; RPC = SDES2 SEARCH CLINIC ATTRIBUTES
- SEARCHCLIN(SDRETURN,SDCONTEXT,SDCLINIC) ;Search for clinics and provide return of matches and limited date in JSON STRING
- ; The SDCONTEXT array is controlled by the Acheron application and its fields are
- ; needed for the storage of the required auditing information.
- ;
- ; SDCONTEXT("ACHERON AUDIT ID") = Up to 40 Character unique ID number. Ex: 11d9dcc6-c6a2-4785-8031-8261576fca37
- ; SDCONTEXT("PATIENT DFN") = The DFN/IEN of the target patient from the calling application.
- ; SDCONTEXT("PATIENT ICN") = The ICN of the target patient from the calling application.
- ; SDCONTEXT("USER DUZ") = The DUZ of the user taking action in the calling application.
- ; SDCONTEXT("USER SECID") = The SECID of the user taking action in the calling application.
- ;
- ; The SDCLINIC array contains the following array elements:
- ; SDCLINIC("SEARCHSTRING") (Req) = free text string that represents the clinic name that will be searched
- ; SDCLINIC("STATION") (Opt) = Station Number: If present, the search would be limited to matching clinics at the given institution.
- ; If absent, the search would take place across all divisions/institutions. Example values: 534, 534GB
- ; SDCLINIC("DATETIME") (Opt) = Date in ISO 8601 format to use for Clinic Status verification. If not passed in, defaults to DT.
- ; SDCLINIC("RETURNACTIVE") (Opt) = Boolean to return Active or Inactive clinics.
- ; 1:Returns active and inactive clinics, 0:Returns only active clinics, Defaults to 0 if not passed in
- ; SDCLINIC("LENGTH OF APPOINTMENT") (Opt) = numeric string (2-3) Example value: 30
- ;
- ; OUTPUT - SDRETURN
- ; List of Clinics from the HOSPITAL LOCATION (#44) file with the following data.
- ; Field List:
- ; 1. Clinic IEN
- ; 2. Clinic name
- ; 3. Patient friendly name
- ; 4. Default provider IEN
- ; 5. Default Provider name
- ; 6. Default Provider SECID
- ; 7. Stop code IEN
- ; 8. Stop code Name
- ; 9. Stop code AMIS
- ; 10. Credit stop code IEN
- ; 11. Credit stop code Name
- ; 12. Credit stop code AMIS
- ; 13. Status (Active or Inactive) If not passed in, default to DT
- ; 14. Non-count (Y or N)
- ;
- N SDLINICLIST,SDERRORS,SDCLINICLIST,SDJSONERRORS,SDVALIDDATA
- N SDSEARCHSTRING,SDSTATION,SDDATE,SDDATETIME,SDRETURNACTIVE
- ;
- D VALCONTEXT^SDES2VALCONTEXT(.SDERRORS,.SDCONTEXT)
- I $D(SDERRORS) S SDJSONERRORS("Clinic",1)="" M SDJSONERRORS=SDERRORS D BUILDJSON^SDES2JSON(.SDRETURN,.SDJSONERRORS) Q
- ;
- D VALCLINIC(.SDERRORS,.SDCLINIC,.SDVALIDDATA)
- I $D(SDERRORS) S SDJSONERRORS("Clinic",1)="" M SDJSONERRORS=SDERRORS D BUILDJSON^SDES2JSON(.SDRETURN,.SDJSONERRORS) Q
- ;
- D GETCLINICLIST(.SDVALIDDATA,.SDCLINICLIST)
- D BUILDJSON^SDESBUILDJSON(.SDRETURN,.SDCLINICLIST)
- Q
- ;
- VALCLINIC(SDERRORS,SDCLINIC,SDVALIDDATA) ; validate incoming clinic parameters
- ; Input - SDERRORS = passed in by reference, represents the errors that could be generated when validating the search string
- ; SDSEARCHSTRING = represents the name or partial name of the Clinic
- ; SDSTATION = Station Number
- ; SDDATETIME (Opt) = Date in ISO 8601 format to use for Clinic Status verification. If not passed in, default to DT.
- ; SDRETURNACTIVE ? Boolean: 1:Return active and inactive clinics, 0:Return only active clinics
- ;
- ; Returns 0 or 1
- ; 0 = no validation errors
- ; 1 = validation errors
- ;
- S SDSEARCHSTRING=$G(SDCLINIC("SEARCHSTRING"))
- S SDSEARCHSTRING=$TR(SDSEARCHSTRING,$C(13)_$C(10)_$C(9),"")
- I ($L(SDSEARCHSTRING)<2)!($L(SDSEARCHSTRING)>30) D ERRLOG^SDESJSON(.SDERRORS,$S(SDSEARCHSTRING="":231,1:473))
- S SDVALIDDATA("SEARCHSTRING")=SDSEARCHSTRING
- ;
- S SDSTATION=$G(SDCLINIC("STATION"))
- S SDDATETIME=$G(SDCLINIC("DATETIME"))
- I SDSTATION'="" D VALSTATIONNUM^SDES2VAL4(.SDERRORS,SDSTATION,SDDATETIME)
- S SDVALIDDATA("STATION")=SDSTATION
- ;
- I SDDATETIME="" S SDDATETIME=DT
- I SDDATETIME'="",SDDATETIME'?7N D
- .S SDDATETIME=$$ISOTFM^SDAMUTDT(SDDATETIME,"")
- .I SDDATETIME=-1 D ERRLOG^SDESJSON(.SDERRORS,244)
- S SDVALIDDATA("DATETIME")=SDDATETIME
- ;
- S SDRETURNACTIVE=$G(SDCLINIC("RETURNACTIVE"))
- I SDRETURNACTIVE="" S SDRETURNACTIVE=0
- D VALBOOLEAN^SDES2UTIL1(.SDERRORS,SDRETURNACTIVE,0,"SDCLINIC(""RETURNACTIVE"")")
- S SDVALIDDATA("RETURNACTIVE")=SDRETURNACTIVE
- Q
- ;
- GETCLINICLIST(SDVALIDDATA,SDCLINICLIST) ; pull matching clinics using the first input parameter passed in by the RPC
- ; Input - SEARCHSTRING = string that represents the name of the clinic
- ; SDSTATION = Station Number
- ; SDDATETIME = Date/Time in FileMan format to use for Clinic Status verification
- ; SDRETURNACTIVE ? Boolean: 1:Return active and inactive clinics, 0:Return only active clinics
- ; SDCLINICLIST = passed in by reference; represents the array that will be returned as output
- ; Output - SDCLINICLIST = list of clinic names, clinic IENs and the associated IENs.
- N SDCLINCNT,SDRESULTS,SUB3,SDCNT,SDINDX,SDNAMEINDX
- S SDSEARCHSTRING=SDVALIDDATA("SEARCHSTRING")
- S SDSTATION=SDVALIDDATA("STATION")
- S SDDATETIME=SDVALIDDATA("DATETIME")
- S SDRETURNACTIVE=SDVALIDDATA("RETURNACTIVE")
- K SDCLINICLIST,SDRESULTS
- S SDNAMEINDX=0,SDCNT=0
- ; Loop through B x-ref
- F S SDNAMEINDX=$O(^SC("B",SDNAMEINDX)) Q:SDNAMEINDX="" D
- .Q:SDNAMEINDX'[SDSEARCHSTRING
- .S SDINDX=$O(^SC("B",SDNAMEINDX,""))
- .Q:'$D(^SC(SDINDX,0))
- .S SDCNT=SDCNT+1
- .S SDRESULTS(SDINDX)=""
- ; Loop through C x-ref
- S SDNAMEINDX=0
- F S SDNAMEINDX=$O(^SC("C",SDNAMEINDX)) Q:SDNAMEINDX="" D
- .Q:SDNAMEINDX'[SDSEARCHSTRING
- .S SDINDX=0
- .F S SDINDX=$O(^SC("C",SDNAMEINDX,SDINDX)) Q:'SDINDX D
- ..Q:'$D(^SC(SDINDX,0))
- ..S SDCNT=SDCNT+1
- ..S SDRESULTS(SDINDX)=""
- ; Process Matching Clinics
- S SDINDX=0,SDCLINCNT=0
- F S SDINDX=$O(SDRESULTS(SDINDX)) Q:SDINDX="" D
- .I SDRETURNACTIVE=0,SDSTATION'="" Q:$$WRONGDIVISION(SDINDX,SDSTATION)
- .I SDRETURNACTIVE=0 Q:$$INACTIVE^SDES2UTIL(SDINDX,SDDATETIME)
- .S SDCLINCNT=SDCLINCNT+1
- .I SDINDX D BUILDRETURN(SDINDX,SDCLINCNT,.SDCLINICLIST,.SDDATETIME)
- I SDCLINCNT=0 S SDCLINICLIST("Clinic",1)=""
- Q
- ;
- BUILDRETURN(SDCLINICIEN,SDCLINCNT,SDCLINICLIST,SDDATETIME) ;Build return array with reminder clinic data
- ; input - SDCLINICIEN = IEN of clinic in #44
- ; SDCLINICLIST = passed by reference, represents the array of clinics and associated data that will be returned to the client
- ; output - SDCLINICLIST = clinic array and their associated data to be sent back to the client
- ;
- N STATUS,SDFIELDS,SDDATA,SDPRVCNT,SDCLINPROVIDER,SDPROVIDERID,SDPROVIDERNAME,SDDEFAULTPROV,SDPROVIDERSECID
- S SDFIELDS=".01;1;2;2.1;8;16;50.01;60;200;2500;2502;2503"
- D GETS^DIQ(44,SDCLINICIEN_",",SDFIELDS,"IE","SDDATA","SDMSG")
- S SDCLINICLIST("Clinic",SDCLINCNT,"Abbreviation")=$G(SDDATA(44,SDCLINICIEN_",",1,"E"))
- S SDCLINICLIST("Clinic",SDCLINCNT,"Type")=$G(SDDATA(44,SDCLINICIEN_",",2,"E"))
- S SDCLINICLIST("Clinic",SDCLINCNT,"TypeExtension")=$G(SDDATA(44,SDCLINICIEN_",",2.1,"E"))
- S SDCLINICLIST("Clinic",SDCLINCNT,"ClinicIEN")=SDCLINICIEN
- S SDCLINICLIST("Clinic",SDCLINCNT,"ClinicName")=$G(SDDATA(44,SDCLINICIEN_",",.01,"E"))
- S SDCLINICLIST("Clinic",SDCLINCNT,"PatientFriendlyName")=$G(SDDATA(44,SDCLINICIEN_",",60,"E"))
- ; initialize default provider fields to null to ensure they are always defined (in the event no default provider is found)
- S SDCLINICLIST("Clinic",SDCLINCNT,"DefaultProviderActive")=""
- S SDCLINICLIST("Clinic",SDCLINCNT,"DefaultProviderIEN")=""
- S SDCLINICLIST("Clinic",SDCLINCNT,"DefaultProviderName")=""
- S SDCLINICLIST("Clinic",SDCLINCNT,"DefaultProviderSecID")=""
- S SDCLINICLIST("Clinic",SDCLINCNT,"StopCodeIEN")=$G(SDDATA(44,SDCLINICIEN_",",8,"I"))
- S SDCLINICLIST("Clinic",SDCLINCNT,"StopCodeName")=$G(SDDATA(44,SDCLINICIEN_",",8,"E"))
- S SDCLINICLIST("Clinic",SDCLINCNT,"StopCodeAMIS")=$$GET1^DIQ(40.7,$G(SDDATA(44,SDCLINICIEN_",",8,"I")),1,"I")
- S SDCLINICLIST("Clinic",SDCLINCNT,"OccasionOfServiceClinic")=$G(SDDATA(44,SDCLINICIEN_",",50.01,"E"))
- S SDCLINICLIST("Clinic",SDCLINCNT,"ProhibitedClinic")=$S($G(SDDATA(44,SDCLINICIEN_",",2500,"E"))="YES":1,1:0)
- S SDCLINICLIST("Clinic",SDCLINCNT,"CreditStopCodeIEN")=$G(SDDATA(44,SDCLINICIEN_",",2503,"I"))
- S SDCLINICLIST("Clinic",SDCLINCNT,"CreditStopCodeName")=$G(SDDATA(44,SDCLINICIEN_",",2503,"E"))
- S SDCLINICLIST("Clinic",SDCLINCNT,"CreditStopCodeAMIS")=$$GET1^DIQ(40.7,$G(SDDATA(44,SDCLINICIEN_",",2503,"I")),1,"I")
- S SDCLINICLIST("Clinic",SDCLINCNT,"NonCountClinic")=$G(SDDATA(44,SDCLINICIEN_",",2502,"E"))
- S STATUS=$$INACTIVE^SDESUTIL(SDCLINICIEN,SDDATETIME),STATUS=$S(STATUS=1:"Inactive",1:"Active")
- S SDCLINICLIST("Clinic",SDCLINCNT,"ClinicStatus")=STATUS
- S SDCLINICLIST("Clinic",SDCLINCNT,"PbspID")=$G(SDDATA(44,SDCLINICIEN_",",200,"E"))
- S SDPRVCNT=0
- S SDCLINPROVIDER=0 F S SDCLINPROVIDER=$O(^SC(SDCLINICIEN,"PR",SDCLINPROVIDER)) Q:'SDCLINPROVIDER D
- .S SDPROVIDERID=$$GET1^DIQ(44.1,SDCLINPROVIDER_","_SDCLINICIEN_",",.01,"I")
- .S SDPROVIDERNAME=$$GET1^DIQ(200,SDPROVIDERID,.01,"E")
- .S SDPROVIDERSECID=$$GET1^DIQ(200,SDPROVIDERID,205.1,"I")
- .S SDDEFAULTPROV=$$GET1^DIQ(44.1,SDCLINPROVIDER_","_SDCLINICIEN_",",.02,"I")
- .I SDDEFAULTPROV D Q
- ..S SDCLINICLIST("Clinic",SDCLINCNT,"DefaultProviderIEN")=SDPROVIDERID
- ..S SDCLINICLIST("Clinic",SDCLINCNT,"DefaultProviderName")=$$GET1^DIQ(200,SDPROVIDERID,.01,"E")
- ..S SDCLINICLIST("Clinic",SDCLINCNT,"DefaultProviderSecID")=SDPROVIDERSECID
- ..S SDCLINICLIST("Clinic",SDCLINCNT,"DefaultProviderActive")=$$ACTIVPRV^PXAPI(SDPROVIDERID,$G(SDDATETIME))
- .S SDPRVCNT=SDPRVCNT+1
- .S SDCLINICLIST("Clinic",SDCLINCNT,"Providers",SDPRVCNT,"Name")=SDPROVIDERNAME
- .S SDCLINICLIST("Clinic",SDCLINCNT,"Providers",SDPRVCNT,"ID")=SDPROVIDERID
- .S SDCLINICLIST("Clinic",SDCLINCNT,"Providers",SDPRVCNT,"SecID")=SDPROVIDERSECID
- .S SDCLINICLIST("Clinic",SDCLINCNT,"Providers",SDPRVCNT,"Active")=$$ACTIVPRV^PXAPI(SDPROVIDERID,$G(SDDATETIME))
- ; set empty object if no records are found
- I '$D(SDCLINICLIST("Clinic",SDCLINCNT,"Providers")) S SDCLINICLIST("Clinic",SDCLINCNT,"Providers",1)=""
- ; get subspecialties
- N SSCNT,SSFN,SUBSPECIEN
- S SSCNT=0
- F SSFN=301:1:302 D
- . S SUBSPECIEN=0
- . F S SUBSPECIEN=$O(^SC(SDCLINICIEN,SSFN,"B",SUBSPECIEN)) Q:'SUBSPECIEN D
- . . S SSCNT=SSCNT+1
- . . S SDCLINICLIST("Clinic",SDCLINCNT,"Subspecialty",SSCNT,"ID")=$$GET1^DIQ(409.94,SUBSPECIEN_",",.01,"E")
- . . S SDCLINICLIST("Clinic",SDCLINCNT,"Subspecialty",SSCNT,"Name")=$$GET1^DIQ(409.94,SUBSPECIEN_",",1)
- . . S SDCLINICLIST("Clinic",SDCLINCNT,"Subspecialty",SSCNT,"Tier")=$$GET1^DIQ(409.94,SUBSPECIEN_",",2,"E")
- . . S SDCLINICLIST("Clinic",SDCLINCNT,"Subspecialty",SSCNT,"Parent")=$$GET1^DIQ(409.94,SUBSPECIEN_",",3,"E")
- I '$D(SDCLINICLIST("Clinic",SDCLINCNT,"Subspecialty")) S SDCLINICLIST("Clinic",SDCLINCNT,"Subspecialty",1)=""
- Q
- ;
- WRONGDIVISION(SDCLINICIEN,STATION) ;
- ; Screen out Clinics that don't match passed in Station Number
- N SDDIVISION,SDINSTIEN,STATIONID
- S SDDIVISION=$$GET1^DIQ(44,SDCLINICIEN,3.5,"I")
- S SDINSTIEN=$$GET1^DIQ(40.8,SDDIVISION,.07,"I")
- S STATIONID=$$GET1^DIQ(4,SDINSTIEN,99,"I")
- I STATIONID'[STATION Q 1
- Q 0
- --- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HSDES2CLNSEARCH 11447 printed Jan 18, 2025@03:54:41 Page 2
- SDES2CLNSEARCH ;ALB/MGD,BWF,JAS,JDJ,JAS - CLINIC NAME SEARCH AND LIMITED DATA RETURN ;NOV 07, 2024
- +1 ;;5.3;Scheduling;**870,871,875,887,895**;Aug 13, 1993;Build 11
- +2 ;;Per VHA Directive 6402, this routine should not be modified
- +3 ;
- +4 QUIT
- +5 ;
- +6 ;External References
- +7 ;-------------------
- +8 ; Reference to $$ACTIVPRV^PXAPI is supported by IA #2349
- +9 ;
- +10 ; Copy of SDESCLNSEARCH for SDES2 Namespace
- +11 ; RPC = SDES2 SEARCH CLINIC ATTRIBUTES
- SEARCHCLIN(SDRETURN,SDCONTEXT,SDCLINIC) ;Search for clinics and provide return of matches and limited date in JSON STRING
- +1 ; The SDCONTEXT array is controlled by the Acheron application and its fields are
- +2 ; needed for the storage of the required auditing information.
- +3 ;
- +4 ; SDCONTEXT("ACHERON AUDIT ID") = Up to 40 Character unique ID number. Ex: 11d9dcc6-c6a2-4785-8031-8261576fca37
- +5 ; SDCONTEXT("PATIENT DFN") = The DFN/IEN of the target patient from the calling application.
- +6 ; SDCONTEXT("PATIENT ICN") = The ICN of the target patient from the calling application.
- +7 ; SDCONTEXT("USER DUZ") = The DUZ of the user taking action in the calling application.
- +8 ; SDCONTEXT("USER SECID") = The SECID of the user taking action in the calling application.
- +9 ;
- +10 ; The SDCLINIC array contains the following array elements:
- +11 ; SDCLINIC("SEARCHSTRING") (Req) = free text string that represents the clinic name that will be searched
- +12 ; SDCLINIC("STATION") (Opt) = Station Number: If present, the search would be limited to matching clinics at the given institution.
- +13 ; If absent, the search would take place across all divisions/institutions. Example values: 534, 534GB
- +14 ; SDCLINIC("DATETIME") (Opt) = Date in ISO 8601 format to use for Clinic Status verification. If not passed in, defaults to DT.
- +15 ; SDCLINIC("RETURNACTIVE") (Opt) = Boolean to return Active or Inactive clinics.
- +16 ; 1:Returns active and inactive clinics, 0:Returns only active clinics, Defaults to 0 if not passed in
- +17 ; SDCLINIC("LENGTH OF APPOINTMENT") (Opt) = numeric string (2-3) Example value: 30
- +18 ;
- +19 ; OUTPUT - SDRETURN
- +20 ; List of Clinics from the HOSPITAL LOCATION (#44) file with the following data.
- +21 ; Field List:
- +22 ; 1. Clinic IEN
- +23 ; 2. Clinic name
- +24 ; 3. Patient friendly name
- +25 ; 4. Default provider IEN
- +26 ; 5. Default Provider name
- +27 ; 6. Default Provider SECID
- +28 ; 7. Stop code IEN
- +29 ; 8. Stop code Name
- +30 ; 9. Stop code AMIS
- +31 ; 10. Credit stop code IEN
- +32 ; 11. Credit stop code Name
- +33 ; 12. Credit stop code AMIS
- +34 ; 13. Status (Active or Inactive) If not passed in, default to DT
- +35 ; 14. Non-count (Y or N)
- +36 ;
- +37 NEW SDLINICLIST,SDERRORS,SDCLINICLIST,SDJSONERRORS,SDVALIDDATA
- +38 NEW SDSEARCHSTRING,SDSTATION,SDDATE,SDDATETIME,SDRETURNACTIVE
- +39 ;
- +40 DO VALCONTEXT^SDES2VALCONTEXT(.SDERRORS,.SDCONTEXT)
- +41 IF $DATA(SDERRORS)
- SET SDJSONERRORS("Clinic",1)=""
- MERGE SDJSONERRORS=SDERRORS
- DO BUILDJSON^SDES2JSON(.SDRETURN,.SDJSONERRORS)
- QUIT
- +42 ;
- +43 DO VALCLINIC(.SDERRORS,.SDCLINIC,.SDVALIDDATA)
- +44 IF $DATA(SDERRORS)
- SET SDJSONERRORS("Clinic",1)=""
- MERGE SDJSONERRORS=SDERRORS
- DO BUILDJSON^SDES2JSON(.SDRETURN,.SDJSONERRORS)
- QUIT
- +45 ;
- +46 DO GETCLINICLIST(.SDVALIDDATA,.SDCLINICLIST)
- +47 DO BUILDJSON^SDESBUILDJSON(.SDRETURN,.SDCLINICLIST)
- +48 QUIT
- +49 ;
- VALCLINIC(SDERRORS,SDCLINIC,SDVALIDDATA) ; validate incoming clinic parameters
- +1 ; Input - SDERRORS = passed in by reference, represents the errors that could be generated when validating the search string
- +2 ; SDSEARCHSTRING = represents the name or partial name of the Clinic
- +3 ; SDSTATION = Station Number
- +4 ; SDDATETIME (Opt) = Date in ISO 8601 format to use for Clinic Status verification. If not passed in, default to DT.
- +5 ; SDRETURNACTIVE ? Boolean: 1:Return active and inactive clinics, 0:Return only active clinics
- +6 ;
- +7 ; Returns 0 or 1
- +8 ; 0 = no validation errors
- +9 ; 1 = validation errors
- +10 ;
- +11 SET SDSEARCHSTRING=$GET(SDCLINIC("SEARCHSTRING"))
- +12 SET SDSEARCHSTRING=$TRANSLATE(SDSEARCHSTRING,$CHAR(13)_$CHAR(10)_$CHAR(9),"")
- +13 IF ($LENGTH(SDSEARCHSTRING)<2)!($LENGTH(SDSEARCHSTRING)>30)
- DO ERRLOG^SDESJSON(.SDERRORS,$SELECT(SDSEARCHSTRING="":231,1:473))
- +14 SET SDVALIDDATA("SEARCHSTRING")=SDSEARCHSTRING
- +15 ;
- +16 SET SDSTATION=$GET(SDCLINIC("STATION"))
- +17 SET SDDATETIME=$GET(SDCLINIC("DATETIME"))
- +18 IF SDSTATION'=""
- DO VALSTATIONNUM^SDES2VAL4(.SDERRORS,SDSTATION,SDDATETIME)
- +19 SET SDVALIDDATA("STATION")=SDSTATION
- +20 ;
- +21 IF SDDATETIME=""
- SET SDDATETIME=DT
- +22 IF SDDATETIME'=""
- IF SDDATETIME'?7N
- Begin DoDot:1
- +23 SET SDDATETIME=$$ISOTFM^SDAMUTDT(SDDATETIME,"")
- +24 IF SDDATETIME=-1
- DO ERRLOG^SDESJSON(.SDERRORS,244)
- End DoDot:1
- +25 SET SDVALIDDATA("DATETIME")=SDDATETIME
- +26 ;
- +27 SET SDRETURNACTIVE=$GET(SDCLINIC("RETURNACTIVE"))
- +28 IF SDRETURNACTIVE=""
- SET SDRETURNACTIVE=0
- +29 DO VALBOOLEAN^SDES2UTIL1(.SDERRORS,SDRETURNACTIVE,0,"SDCLINIC(""RETURNACTIVE"")")
- +30 SET SDVALIDDATA("RETURNACTIVE")=SDRETURNACTIVE
- +31 QUIT
- +32 ;
- GETCLINICLIST(SDVALIDDATA,SDCLINICLIST) ; pull matching clinics using the first input parameter passed in by the RPC
- +1 ; Input - SEARCHSTRING = string that represents the name of the clinic
- +2 ; SDSTATION = Station Number
- +3 ; SDDATETIME = Date/Time in FileMan format to use for Clinic Status verification
- +4 ; SDRETURNACTIVE ? Boolean: 1:Return active and inactive clinics, 0:Return only active clinics
- +5 ; SDCLINICLIST = passed in by reference; represents the array that will be returned as output
- +6 ; Output - SDCLINICLIST = list of clinic names, clinic IENs and the associated IENs.
- +7 NEW SDCLINCNT,SDRESULTS,SUB3,SDCNT,SDINDX,SDNAMEINDX
- +8 SET SDSEARCHSTRING=SDVALIDDATA("SEARCHSTRING")
- +9 SET SDSTATION=SDVALIDDATA("STATION")
- +10 SET SDDATETIME=SDVALIDDATA("DATETIME")
- +11 SET SDRETURNACTIVE=SDVALIDDATA("RETURNACTIVE")
- +12 KILL SDCLINICLIST,SDRESULTS
- +13 SET SDNAMEINDX=0
- SET SDCNT=0
- +14 ; Loop through B x-ref
- +15 FOR
- SET SDNAMEINDX=$ORDER(^SC("B",SDNAMEINDX))
- if SDNAMEINDX=""
- QUIT
- Begin DoDot:1
- +16 if SDNAMEINDX'[SDSEARCHSTRING
- QUIT
- +17 SET SDINDX=$ORDER(^SC("B",SDNAMEINDX,""))
- +18 if '$DATA(^SC(SDINDX,0))
- QUIT
- +19 SET SDCNT=SDCNT+1
- +20 SET SDRESULTS(SDINDX)=""
- End DoDot:1
- +21 ; Loop through C x-ref
- +22 SET SDNAMEINDX=0
- +23 FOR
- SET SDNAMEINDX=$ORDER(^SC("C",SDNAMEINDX))
- if SDNAMEINDX=""
- QUIT
- Begin DoDot:1
- +24 if SDNAMEINDX'[SDSEARCHSTRING
- QUIT
- +25 SET SDINDX=0
- +26 FOR
- SET SDINDX=$ORDER(^SC("C",SDNAMEINDX,SDINDX))
- if 'SDINDX
- QUIT
- Begin DoDot:2
- +27 if '$DATA(^SC(SDINDX,0))
- QUIT
- +28 SET SDCNT=SDCNT+1
- +29 SET SDRESULTS(SDINDX)=""
- End DoDot:2
- End DoDot:1
- +30 ; Process Matching Clinics
- +31 SET SDINDX=0
- SET SDCLINCNT=0
- +32 FOR
- SET SDINDX=$ORDER(SDRESULTS(SDINDX))
- if SDINDX=""
- QUIT
- Begin DoDot:1
- +33 IF SDRETURNACTIVE=0
- IF SDSTATION'=""
- if $$WRONGDIVISION(SDINDX,SDSTATION)
- QUIT
- +34 IF SDRETURNACTIVE=0
- if $$INACTIVE^SDES2UTIL(SDINDX,SDDATETIME)
- QUIT
- +35 SET SDCLINCNT=SDCLINCNT+1
- +36 IF SDINDX
- DO BUILDRETURN(SDINDX,SDCLINCNT,.SDCLINICLIST,.SDDATETIME)
- End DoDot:1
- +37 IF SDCLINCNT=0
- SET SDCLINICLIST("Clinic",1)=""
- +38 QUIT
- +39 ;
- BUILDRETURN(SDCLINICIEN,SDCLINCNT,SDCLINICLIST,SDDATETIME) ;Build return array with reminder clinic data
- +1 ; input - SDCLINICIEN = IEN of clinic in #44
- +2 ; SDCLINICLIST = passed by reference, represents the array of clinics and associated data that will be returned to the client
- +3 ; output - SDCLINICLIST = clinic array and their associated data to be sent back to the client
- +4 ;
- +5 NEW STATUS,SDFIELDS,SDDATA,SDPRVCNT,SDCLINPROVIDER,SDPROVIDERID,SDPROVIDERNAME,SDDEFAULTPROV,SDPROVIDERSECID
- +6 SET SDFIELDS=".01;1;2;2.1;8;16;50.01;60;200;2500;2502;2503"
- +7 DO GETS^DIQ(44,SDCLINICIEN_",",SDFIELDS,"IE","SDDATA","SDMSG")
- +8 SET SDCLINICLIST("Clinic",SDCLINCNT,"Abbreviation")=$GET(SDDATA(44,SDCLINICIEN_",",1,"E"))
- +9 SET SDCLINICLIST("Clinic",SDCLINCNT,"Type")=$GET(SDDATA(44,SDCLINICIEN_",",2,"E"))
- +10 SET SDCLINICLIST("Clinic",SDCLINCNT,"TypeExtension")=$GET(SDDATA(44,SDCLINICIEN_",",2.1,"E"))
- +11 SET SDCLINICLIST("Clinic",SDCLINCNT,"ClinicIEN")=SDCLINICIEN
- +12 SET SDCLINICLIST("Clinic",SDCLINCNT,"ClinicName")=$GET(SDDATA(44,SDCLINICIEN_",",.01,"E"))
- +13 SET SDCLINICLIST("Clinic",SDCLINCNT,"PatientFriendlyName")=$GET(SDDATA(44,SDCLINICIEN_",",60,"E"))
- +14 ; initialize default provider fields to null to ensure they are always defined (in the event no default provider is found)
- +15 SET SDCLINICLIST("Clinic",SDCLINCNT,"DefaultProviderActive")=""
- +16 SET SDCLINICLIST("Clinic",SDCLINCNT,"DefaultProviderIEN")=""
- +17 SET SDCLINICLIST("Clinic",SDCLINCNT,"DefaultProviderName")=""
- +18 SET SDCLINICLIST("Clinic",SDCLINCNT,"DefaultProviderSecID")=""
- +19 SET SDCLINICLIST("Clinic",SDCLINCNT,"StopCodeIEN")=$GET(SDDATA(44,SDCLINICIEN_",",8,"I"))
- +20 SET SDCLINICLIST("Clinic",SDCLINCNT,"StopCodeName")=$GET(SDDATA(44,SDCLINICIEN_",",8,"E"))
- +21 SET SDCLINICLIST("Clinic",SDCLINCNT,"StopCodeAMIS")=$$GET1^DIQ(40.7,$GET(SDDATA(44,SDCLINICIEN_",",8,"I")),1,"I")
- +22 SET SDCLINICLIST("Clinic",SDCLINCNT,"OccasionOfServiceClinic")=$GET(SDDATA(44,SDCLINICIEN_",",50.01,"E"))
- +23 SET SDCLINICLIST("Clinic",SDCLINCNT,"ProhibitedClinic")=$SELECT($GET(SDDATA(44,SDCLINICIEN_",",2500,"E"))="YES":1,1:0)
- +24 SET SDCLINICLIST("Clinic",SDCLINCNT,"CreditStopCodeIEN")=$GET(SDDATA(44,SDCLINICIEN_",",2503,"I"))
- +25 SET SDCLINICLIST("Clinic",SDCLINCNT,"CreditStopCodeName")=$GET(SDDATA(44,SDCLINICIEN_",",2503,"E"))
- +26 SET SDCLINICLIST("Clinic",SDCLINCNT,"CreditStopCodeAMIS")=$$GET1^DIQ(40.7,$GET(SDDATA(44,SDCLINICIEN_",",2503,"I")),1,"I")
- +27 SET SDCLINICLIST("Clinic",SDCLINCNT,"NonCountClinic")=$GET(SDDATA(44,SDCLINICIEN_",",2502,"E"))
- +28 SET STATUS=$$INACTIVE^SDESUTIL(SDCLINICIEN,SDDATETIME)
- SET STATUS=$SELECT(STATUS=1:"Inactive",1:"Active")
- +29 SET SDCLINICLIST("Clinic",SDCLINCNT,"ClinicStatus")=STATUS
- +30 SET SDCLINICLIST("Clinic",SDCLINCNT,"PbspID")=$GET(SDDATA(44,SDCLINICIEN_",",200,"E"))
- +31 SET SDPRVCNT=0
- +32 SET SDCLINPROVIDER=0
- FOR
- SET SDCLINPROVIDER=$ORDER(^SC(SDCLINICIEN,"PR",SDCLINPROVIDER))
- if 'SDCLINPROVIDER
- QUIT
- Begin DoDot:1
- +33 SET SDPROVIDERID=$$GET1^DIQ(44.1,SDCLINPROVIDER_","_SDCLINICIEN_",",.01,"I")
- +34 SET SDPROVIDERNAME=$$GET1^DIQ(200,SDPROVIDERID,.01,"E")
- +35 SET SDPROVIDERSECID=$$GET1^DIQ(200,SDPROVIDERID,205.1,"I")
- +36 SET SDDEFAULTPROV=$$GET1^DIQ(44.1,SDCLINPROVIDER_","_SDCLINICIEN_",",.02,"I")
- +37 IF SDDEFAULTPROV
- Begin DoDot:2
- +38 SET SDCLINICLIST("Clinic",SDCLINCNT,"DefaultProviderIEN")=SDPROVIDERID
- +39 SET SDCLINICLIST("Clinic",SDCLINCNT,"DefaultProviderName")=$$GET1^DIQ(200,SDPROVIDERID,.01,"E")
- +40 SET SDCLINICLIST("Clinic",SDCLINCNT,"DefaultProviderSecID")=SDPROVIDERSECID
- +41 SET SDCLINICLIST("Clinic",SDCLINCNT,"DefaultProviderActive")=$$ACTIVPRV^PXAPI(SDPROVIDERID,$GET(SDDATETIME))
- End DoDot:2
- QUIT
- +42 SET SDPRVCNT=SDPRVCNT+1
- +43 SET SDCLINICLIST("Clinic",SDCLINCNT,"Providers",SDPRVCNT,"Name")=SDPROVIDERNAME
- +44 SET SDCLINICLIST("Clinic",SDCLINCNT,"Providers",SDPRVCNT,"ID")=SDPROVIDERID
- +45 SET SDCLINICLIST("Clinic",SDCLINCNT,"Providers",SDPRVCNT,"SecID")=SDPROVIDERSECID
- +46 SET SDCLINICLIST("Clinic",SDCLINCNT,"Providers",SDPRVCNT,"Active")=$$ACTIVPRV^PXAPI(SDPROVIDERID,$GET(SDDATETIME))
- End DoDot:1
- +47 ; set empty object if no records are found
- +48 IF '$DATA(SDCLINICLIST("Clinic",SDCLINCNT,"Providers"))
- SET SDCLINICLIST("Clinic",SDCLINCNT,"Providers",1)=""
- +49 ; get subspecialties
- +50 NEW SSCNT,SSFN,SUBSPECIEN
- +51 SET SSCNT=0
- +52 FOR SSFN=301:1:302
- Begin DoDot:1
- +53 SET SUBSPECIEN=0
- +54 FOR
- SET SUBSPECIEN=$ORDER(^SC(SDCLINICIEN,SSFN,"B",SUBSPECIEN))
- if 'SUBSPECIEN
- QUIT
- Begin DoDot:2
- +55 SET SSCNT=SSCNT+1
- +56 SET SDCLINICLIST("Clinic",SDCLINCNT,"Subspecialty",SSCNT,"ID")=$$GET1^DIQ(409.94,SUBSPECIEN_",",.01,"E")
- +57 SET SDCLINICLIST("Clinic",SDCLINCNT,"Subspecialty",SSCNT,"Name")=$$GET1^DIQ(409.94,SUBSPECIEN_",",1)
- +58 SET SDCLINICLIST("Clinic",SDCLINCNT,"Subspecialty",SSCNT,"Tier")=$$GET1^DIQ(409.94,SUBSPECIEN_",",2,"E")
- +59 SET SDCLINICLIST("Clinic",SDCLINCNT,"Subspecialty",SSCNT,"Parent")=$$GET1^DIQ(409.94,SUBSPECIEN_",",3,"E")
- End DoDot:2
- End DoDot:1
- +60 IF '$DATA(SDCLINICLIST("Clinic",SDCLINCNT,"Subspecialty"))
- SET SDCLINICLIST("Clinic",SDCLINCNT,"Subspecialty",1)=""
- +61 QUIT
- +62 ;
- WRONGDIVISION(SDCLINICIEN,STATION) ;
- +1 ; Screen out Clinics that don't match passed in Station Number
- +2 NEW SDDIVISION,SDINSTIEN,STATIONID
- +3 SET SDDIVISION=$$GET1^DIQ(44,SDCLINICIEN,3.5,"I")
- +4 SET SDINSTIEN=$$GET1^DIQ(40.8,SDDIVISION,.07,"I")
- +5 SET STATIONID=$$GET1^DIQ(4,SDINSTIEN,99,"I")
- +6 IF STATIONID'[STATION
- QUIT 1
- +7 QUIT 0