SDES2CLNSEARCH ;ALB/MGD,BWF - CLINIC NAME SEARCH AND LIMITED DATA RETURN ;NOV 20, 2023
;;5.3;Scheduling;**870,871**;Aug 13, 1993;Build 13
;;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 recall 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
;
; OUTPUT - SDRETURN
; List of Recall Clinics from the RECALL REMINDERS (#403.5) 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
N SDSEARCHSTRING,SDSTATION,SDDATE,SDDATETIME,SDRETURNACTIVE
;
D VALCONTEXT^SDES2VALCONTEXT(.SDERRORS,.SDCONTEXT)
I $D(SDERRORS) S SDJSONERRORS("CreateClinic",1)="" M SDJSONERRORS=SDERRORS D BUILDJSON^SDES2JSON(.SDRETURN,.SDJSONERRORS) Q
;
D VALCLINIC(.SDERRORS,.SDCLINIC,.SDVALIDDATA)
I $D(SDERRORS) S SDJSONERRORS("CreateClinic",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 Recall 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 recall clinics using the first input parameter passed in by the RPC
; Input - SEARCHSTRING = string that represents the name of the recall 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 recall clinic names, clinic IENs and the associated recall reminder 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 recall reminder clinic data
; input - SDCLINICIEN = IEN of clinic in #44
; SDCLINICLIST = passed by reference, represents the array of recall clinics and associated data that will be returned to the client
; output - SDCLINICLIST = recall 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;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,"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,"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 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
; set empty object if no records are found
I '$D(SDCLINICLIST("Clinic",SDCLINCNT,"Providers")) S SDCLINICLIST("Clinic",SDCLINCNT,"Providers",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 10267 printed Apr 09, 2024@22:00:20 Page 2
SDES2CLNSEARCH ;ALB/MGD,BWF - CLINIC NAME SEARCH AND LIMITED DATA RETURN ;NOV 20, 2023
+1 ;;5.3;Scheduling;**870,871**;Aug 13, 1993;Build 13
+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 recall 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 ;
+18 ; OUTPUT - SDRETURN
+19 ; List of Recall Clinics from the RECALL REMINDERS (#403.5) file with the following data.
+20 ; Field List:
+21 ; 1. Clinic IEN
+22 ; 2. Clinic name
+23 ; 3. Patient friendly name
+24 ; 4. Default provider IEN
+25 ; 5. Default Provider name
+26 ; 6. Default Provider SECID
+27 ; 7. Stop code IEN
+28 ; 8. Stop code Name
+29 ; 9. Stop code AMIS
+30 ; 10. Credit stop code IEN
+31 ; 11. Credit stop code Name
+32 ; 12. Credit stop code AMIS
+33 ; 13. Status (Active or Inactive) If not passed in, default to DT
+34 ; 14. Non-count (Y or N)
+35 ;
+36 NEW SDLINICLIST,SDERRORS,SDCLINICLIST,SDJSONERRORS
+37 NEW SDSEARCHSTRING,SDSTATION,SDDATE,SDDATETIME,SDRETURNACTIVE
+38 ;
+39 DO VALCONTEXT^SDES2VALCONTEXT(.SDERRORS,.SDCONTEXT)
+40 IF $DATA(SDERRORS)
SET SDJSONERRORS("CreateClinic",1)=""
MERGE SDJSONERRORS=SDERRORS
DO BUILDJSON^SDES2JSON(.SDRETURN,.SDJSONERRORS)
QUIT
+41 ;
+42 DO VALCLINIC(.SDERRORS,.SDCLINIC,.SDVALIDDATA)
+43 IF $DATA(SDERRORS)
SET SDJSONERRORS("CreateClinic",1)=""
MERGE SDJSONERRORS=SDERRORS
DO BUILDJSON^SDES2JSON(.SDRETURN,.SDJSONERRORS)
QUIT
+44 ;
+45 DO GETCLINICLIST(.SDVALIDDATA,.SDCLINICLIST)
+46 DO BUILDJSON^SDESBUILDJSON(.SDRETURN,.SDCLINICLIST)
+47 QUIT
+48 ;
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 Recall 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 recall clinics using the first input parameter passed in by the RPC
+1 ; Input - SEARCHSTRING = string that represents the name of the recall 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 recall clinic names, clinic IENs and the associated recall reminder 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 recall reminder clinic data
+1 ; input - SDCLINICIEN = IEN of clinic in #44
+2 ; SDCLINICLIST = passed by reference, represents the array of recall clinics and associated data that will be returned to the client
+3 ; output - SDCLINICLIST = recall 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;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,"DefaultProviderIEN")=""
+16 SET SDCLINICLIST("Clinic",SDCLINCNT,"DefaultProviderName")=""
+17 SET SDCLINICLIST("Clinic",SDCLINCNT,"DefaultProviderSecID")=""
+18 SET SDCLINICLIST("Clinic",SDCLINCNT,"StopCodeIEN")=$GET(SDDATA(44,SDCLINICIEN_",",8,"I"))
+19 SET SDCLINICLIST("Clinic",SDCLINCNT,"StopCodeName")=$GET(SDDATA(44,SDCLINICIEN_",",8,"E"))
+20 SET SDCLINICLIST("Clinic",SDCLINCNT,"StopCodeAMIS")=$$GET1^DIQ(40.7,$GET(SDDATA(44,SDCLINICIEN_",",8,"I")),1,"I")
+21 SET SDCLINICLIST("Clinic",SDCLINCNT,"OccasionOfServiceClinic")=$GET(SDDATA(44,SDCLINICIEN_",",50.01,"E"))
+22 SET SDCLINICLIST("Clinic",SDCLINCNT,"CreditStopCodeIEN")=$GET(SDDATA(44,SDCLINICIEN_",",2503,"I"))
+23 SET SDCLINICLIST("Clinic",SDCLINCNT,"CreditStopCodeName")=$GET(SDDATA(44,SDCLINICIEN_",",2503,"E"))
+24 SET SDCLINICLIST("Clinic",SDCLINCNT,"CreditStopCodeAMIS")=$$GET1^DIQ(40.7,$GET(SDDATA(44,SDCLINICIEN_",",2503,"I")),1,"I")
+25 SET SDCLINICLIST("Clinic",SDCLINCNT,"NonCountClinic")=$GET(SDDATA(44,SDCLINICIEN_",",2502,"E"))
+26 SET STATUS=$$INACTIVE^SDESUTIL(SDCLINICIEN,SDDATETIME)
SET STATUS=$SELECT(STATUS=1:"Inactive",1:"Active")
+27 SET SDCLINICLIST("Clinic",SDCLINCNT,"ClinicStatus")=STATUS
+28 SET SDCLINICLIST("Clinic",SDCLINCNT,"PbspID")=$GET(SDDATA(44,SDCLINICIEN_",",200,"E"))
+29 SET SDPRVCNT=0
+30 SET SDCLINPROVIDER=0
FOR
SET SDCLINPROVIDER=$ORDER(^SC(SDCLINICIEN,"PR",SDCLINPROVIDER))
if 'SDCLINPROVIDER
QUIT
Begin DoDot:1
+31 SET SDPROVIDERID=$$GET1^DIQ(44.1,SDCLINPROVIDER_","_SDCLINICIEN_",",.01,"I")
+32 SET SDPROVIDERNAME=$$GET1^DIQ(200,SDPROVIDERID,.01,"E")
+33 SET SDPROVIDERSECID=$$GET1^DIQ(200,SDPROVIDERID,205.1,"I")
+34 SET SDDEFAULTPROV=$$GET1^DIQ(44.1,SDCLINPROVIDER_","_SDCLINICIEN_",",.02,"I")
+35 IF SDDEFAULTPROV
Begin DoDot:2
+36 SET SDCLINICLIST("Clinic",SDCLINCNT,"DefaultProviderIEN")=SDPROVIDERID
+37 SET SDCLINICLIST("Clinic",SDCLINCNT,"DefaultProviderName")=$$GET1^DIQ(200,SDPROVIDERID,.01,"E")
+38 SET SDCLINICLIST("Clinic",SDCLINCNT,"DefaultProviderSecID")=SDPROVIDERSECID
End DoDot:2
QUIT
+39 SET SDPRVCNT=SDPRVCNT+1
+40 SET SDCLINICLIST("Clinic",SDCLINCNT,"Providers",SDPRVCNT,"Name")=SDPROVIDERNAME
+41 SET SDCLINICLIST("Clinic",SDCLINCNT,"Providers",SDPRVCNT,"ID")=SDPROVIDERID
+42 SET SDCLINICLIST("Clinic",SDCLINCNT,"Providers",SDPRVCNT,"SecID")=SDPROVIDERSECID
End DoDot:1
+43 ; set empty object if no records are found
+44 IF '$DATA(SDCLINICLIST("Clinic",SDCLINCNT,"Providers"))
SET SDCLINICLIST("Clinic",SDCLINCNT,"Providers",1)=""
+45 QUIT
+46 ;
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