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

SDES2PATSEARCH.m

Go to the documentation of this file.
  1. SDES2PATSEARCH ;ALB/ANU,BLB,BWF,MCB - SDES2 PATIENT SEARCH; JAN 30, 2025
  1. ;;5.3;Scheduling;**864,866,881,899**;Aug 13, 1993;Build 2
  1. ;;Per VHA Directive 6402, this routine should not be modified
  1. ;
  1. ; clone of SDESPATSEARCH - BLB
  1. ;
  1. ; Reference to PATIENT in ICR #7030
  1. ; Reference to PATIENT in ICR #7029
  1. ; Reference to PATIENT in ICR #1476
  1. ; Reference to PATIENT in ICR #10035
  1. ; Reference to RATED DISABILITIES sub-file in ICR #4807
  1. ; Reference to DISABILITY CONDITION in #733
  1. ;
  1. Q
  1. ;
  1. N RETURN,ERRORS,PATIENTLIST,INDEX,VALRET,SDDFN,NUMOFRECORDS,SEARCHSTRING,PARAMETERS,SDDUZ
  1. ;
  1. D VALCONTEXT^SDES2VALCONTEXT(.ERRORS,.SDCONTEXT)
  1. I $D(ERRORS) S ERRORS("Patient",1)="" D BUILDJSON^SDES2JSON(.JSONRETURN,.ERRORS) Q
  1. ;
  1. S SDDUZ=$S($G(SDCONTEXT("USER DUZ"))'="":$G(SDCONTEXT("USER DUZ")),1:DUZ)
  1. ;
  1. D POPULATEINPUTS(.PARAMS,.SEARCHSTRING,.NUMOFRECORDS,.INDEX)
  1. D VALIDATE(.ERRORS,.NUMOFRECORDS,.SEARCHSTRING)
  1. I $D(ERRORS) S ERRORS("Patient",1)="" D BUILDJSON^SDES2JSON(.JSONRETURN,.ERRORS) Q
  1. ;
  1. D BUILDPATIENTLIST(.PATIENTLIST,$G(SEARCHSTRING),$G(NUMOFRECORDS),$G(INDEX),SDDUZ)
  1. ;
  1. I '$D(PATIENTLIST) S PATIENTLIST("Patient",1)=""
  1. M RETURN=PATIENTLIST D BUILDJSON(.JSONRETURN,.RETURN)
  1. Q
  1. ;
  1. POPULATEINPUTS(PARAMS,SEARCHSTRING,NUMOFRECORDS,INDEX) ;
  1. S NUMOFRECORDS=$G(PARAMS("NUMOFRECORDS"))
  1. S SEARCHSTRING=$G(PARAMS("SEARCHSTRING"))
  1. S SEARCHSTRING=$E(SEARCHSTRING,1,30)
  1. S SEARCHSTRING=$$CTRL^XMXUTIL1(SEARCHSTRING)
  1. S INDEX=$$INDEX(.SEARCHSTRING)
  1. Q
  1. ;
  1. INDEX(SEARCHSTRING) ; returns the index to be searched in ^DPT
  1. I $G(SEARCHSTRING)?1A4N Q "BS5" ;initial+4SSN
  1. ;
  1. I $$ISOTFM^SDAMUTDT($G(SEARCHSTRING))'=-1 D Q "ADOB" ;DOB
  1. .S SEARCHSTRING=$$ISOTFM^SDAMUTDT($G(SEARCHSTRING))
  1. ;
  1. I $G(SEARCHSTRING)?9N!($G(SEARCHSTRING)?3N1"-"2N1"-"4N)!($G(SEARCHSTRING)?9N.1"P")!($G(SEARCHSTRING)?3N1"-"2N1"-"4N.1"P") D Q "SSN" ;SSN
  1. .S SEARCHSTRING=$TR($G(SEARCHSTRING),"-","")
  1. ;
  1. Q "B"
  1. ;
  1. BUILDPATIENTLIST(PATIENTLIST,SEARCHSTRING,NUMOFRECORDS,INDEX,SDDUZ) ;
  1. N NUM,PATIENTNAME,DFN,SEARCHCRITERIA
  1. ;
  1. I INDEX="B" S SEARCHSTRING=$$TRAILINGSPACES(SEARCHSTRING)
  1. S SEARCHCRITERIA=$$GETSUB^SDES2UTIL(SEARCHSTRING) ;decrements all input types by 1
  1. I $G(SEARCHSTRING)="" S SEARCHCRITERIA=0
  1. S NUM=0
  1. F S SEARCHCRITERIA=$O(^DPT(INDEX,SEARCHCRITERIA)) Q:SEARCHCRITERIA=""!(NUM=NUMOFRECORDS)!(SEARCHCRITERIA'[SEARCHSTRING) D
  1. .S DFN=0
  1. .F S DFN=$O(^DPT(INDEX,SEARCHCRITERIA,DFN)) Q:'DFN!(NUM=NUMOFRECORDS) D
  1. ..S NUM=NUM+1
  1. ..D POPULATE(.PATIENTLIST,$G(DFN),SDDUZ,NUM)
  1. Q
  1. ;
  1. POPULATE(PATIENTLIST,DFN,SDDUZ,NUM) ;
  1. N PATIENTDATA
  1. ;
  1. D GETS^DIQ(2,DFN,".01;.02;.024;.03;.1;.2405;.301;.302;.351;.361;391;1100.01","IE","PATIENTDATA")
  1. S PATIENTLIST("Patient",NUM,"DFN")=DFN
  1. S PATIENTLIST("Patient",NUM,"Name")=$G(PATIENTDATA(2,DFN_",",.01,"E"))
  1. S PATIENTLIST("Patient",NUM,"DateOfBirth")=$$FMTISO^SDAMUTDT($G(PATIENTDATA(2,DFN_",",.03,"I")))
  1. S PATIENTLIST("Patient",NUM,"DateOfDeath")=$$FMTISO^SDAMUTDT($G(PATIENTDATA(2,DFN_",",.351,"I")))
  1. S PATIENTLIST("Patient",NUM,"PreferredName")=$G(PATIENTDATA(2,DFN_",",.2405,"E"))
  1. S PATIENTLIST("Patient",NUM,"PatientType")=$G(PATIENTDATA(2,DFN_",",391,"E"))
  1. S PATIENTLIST("Patient",NUM,"Ward")=$G(PATIENTDATA(2,DFN_",",.1,"E")) ;.1
  1. S PATIENTLIST("Patient",NUM,"FugitiveFelon")=$G(PATIENTDATA(2,DFN_",",1100.01,"E"))
  1. S PATIENTLIST("Patient",NUM,"Gender")=$G(PATIENTDATA(2,DFN_",",.02,"E")) ;.02
  1. S PATIENTLIST("Patient",NUM,"GenderIdentity")=$G(PATIENTDATA(2,DFN_",",.024,"E"))
  1. S PATIENTLIST("Patient",NUM,"MentalHealthProvider")=$P($$START^SCMCMHTC(DFN),U,2)
  1. S PATIENTLIST("Patient",NUM,"PrimaryCarePractitioner")=$P($$OUTPTPR^SDUTL3(DFN),U,2)
  1. S PATIENTLIST("Patient",NUM,"ICNNumber")=$$GETICN(DFN)
  1. S PATIENTLIST("Patient",NUM,"Last4SSN")=$$LAST4SSN^SDESINPUTVALUTL(DFN)
  1. S PATIENTLIST("Patient",NUM,"NewGAFRequired")=$S($$NEWGAF^SDUTL2(DFN):"New GAF Required",1:"No new GAF required")
  1. S PATIENTLIST("Patient",NUM,"PriorityGroup")=$$GET1^DIQ(27.11,$$GET1^DIQ(2,DFN,27.01,"I"),.07,"E")
  1. S PATIENTLIST("Patient",NUM,"EnrollmentSubGroup")=$$GET1^DIQ(27.11,$$GET1^DIQ(2,DFN,27.01,"I"),.12,"E")
  1. ;
  1. D GETSENSITIVEPAT(.PATIENTLIST,DFN,SDDUZ,NUM)
  1. ;
  1. I $D(^DGPF(26.13,"C",DFN)) D GETFLAGS(.PATIENTLIST,DFN,NUM)
  1. I '$D(^DGPF(26.13,"C",DFN)) S PATIENTLIST("Patient",NUM,"Flag")=""
  1. ;
  1. I $D(^DGS(41.41,"B",DFN)) D GETLASTDEMOUPDAT(.PATIENTLIST,DFN,NUM)
  1. I '$D(^DGS(41.41,"B",DFN)) S PATIENTLIST("Patient",NUM,"DemographicsUpdated")=""
  1. ;
  1. I $D(^DPT(DFN,"E","B")) D GETELIGIBILITY(.PATIENTLIST,DFN,NUM)
  1. I '$D(^DPT(DFN,"E","B")) S PATIENTLIST("Patient",NUM,"Eligibility")=""
  1. ;
  1. I $D(^DPT(DFN,.373)) D GETCONDITIONS(.PATIENTLIST,DFN,NUM)
  1. I '$D(^DPT(DFN,.373)) S PATIENTLIST("Patient",NUM,"ServiceConnectedCondition")=""
  1. ;
  1. I $D(^DPT(DFN,.372)) D GETDISABILITIES(.PATIENTLIST,DFN,NUM)
  1. I '$D(^DPT(DFN,.372)) S PATIENTLIST("Patient",NUM,"RatedDisabilities")=""
  1. ;
  1. I $G(PATIENTDATA(2,DFN_",",.301,"I"))="Y" S PATIENTLIST("Patient",NUM,"ServiceConnected")="YES"_" "_"("_$G(PATIENTDATA(2,DFN_",",.302,"I"))_"%)"
  1. I $G(PATIENTDATA(2,DFN_",",.301,"I"))="N" S PATIENTLIST("Patient",NUM,"ServiceConnected")="NO"
  1. Q
  1. ;
  1. GETSENSITIVEPAT(PATIENTLIST,DFN,SDDUZ,NUM) ;
  1. N SENSITIVE,MESLOOP,MESCNT
  1. D SENSITIVE^SDES2UTIL(.SENSITIVE,DFN,SDDUZ)
  1. S PATIENTLIST("Patient",NUM,"SensitivePatientRestrictedRecord")=$S($G(SENSITIVE(1)):1,1:0)
  1. S PATIENTLIST("Patient",NUM,"SensitivePatientType")=$G(SENSITIVE(1))
  1. S MESCNT=0
  1. S MESLOOP=1 F S MESLOOP=$O(SENSITIVE(MESLOOP)) Q:'MESLOOP D
  1. .S MESCNT=MESCNT+1
  1. .S PATIENTLIST("Patient",NUM,"SensitiveRecordMessage",MESCNT,"Text")=$G(SENSITIVE(MESLOOP))
  1. I '$D(PATIENTLIST("Patient",NUM,"SensitiveRecordMessage")) S PATIENTLIST("Patient",NUM,"SensitiveRecordMessage",1)=""
  1. Q
  1. ;
  1. GETFLAGS(PATIENTLIST,DFN,NUM) ;
  1. N NATLOCALFLAGS,FLAGS,FLAGCOUNT,NARRATIVECOUNT
  1. D GETFLAGS^SDESPATFLAGS(.NATLOCALFLAGS,DFN)
  1. D DECODE^XLFJSON("NATLOCALFLAGS","FLAGS")
  1. S FLAGCOUNT=0
  1. F S FLAGCOUNT=$O(FLAGS("Flag",FLAGCOUNT)) Q:'FLAGCOUNT D
  1. .S PATIENTLIST("Patient",NUM,"Flag",FLAGCOUNT,"ApprovedBy")=$G(FLAGS("Flag",FLAGCOUNT,"ApprovedBy"))
  1. .S PATIENTLIST("Patient",NUM,"Flag",FLAGCOUNT,"AssignedDate")=$G(FLAGS("Flag",FLAGCOUNT,"AssignedDate"))
  1. .S PATIENTLIST("Patient",NUM,"Flag",FLAGCOUNT,"Category")=$G(FLAGS("Flag",FLAGCOUNT,"Category"))
  1. .S PATIENTLIST("Patient",NUM,"Flag",FLAGCOUNT,"FlagName")=$G(FLAGS("Flag",FLAGCOUNT,"Name"))
  1. .S PATIENTLIST("Patient",NUM,"Flag",FLAGCOUNT,"OriginatingSiteID")=$G(FLAGS("Flag",FLAGCOUNT,"OriginatingSiteID"))
  1. .S PATIENTLIST("Patient",NUM,"Flag",FLAGCOUNT,"OriginatingSiteName")=$G(FLAGS("Flag",FLAGCOUNT,"OriginatingSiteName"))
  1. .S PATIENTLIST("Patient",NUM,"Flag",FLAGCOUNT,"OwnerSiteID")=$G(FLAGS("Flag",FLAGCOUNT,"OwnerSiteID"))
  1. .S PATIENTLIST("Patient",NUM,"Flag",FLAGCOUNT,"OwnerSiteName")=$G(FLAGS("Flag",FLAGCOUNT,"OwnerSiteName"))
  1. .S PATIENTLIST("Patient",NUM,"Flag",FLAGCOUNT,"ReviewDate")=$G(FLAGS("Flag",FLAGCOUNT,"ReviewDate"))
  1. .S PATIENTLIST("Patient",NUM,"Flag",FLAGCOUNT,"Type")=$G(FLAGS("Flag",FLAGCOUNT,"Type"))
  1. .S NARRATIVECOUNT=0
  1. .F S NARRATIVECOUNT=$O(FLAGS("Flag",FLAGCOUNT,"Narrative",NARRATIVECOUNT)) Q:'NARRATIVECOUNT D
  1. ..S PATIENTLIST("Patient",NUM,"Flag",FLAGCOUNT,"Narrative",NARRATIVECOUNT)=$G(FLAGS("Flag",FLAGCOUNT,"Narrative",NARRATIVECOUNT))
  1. Q
  1. ;
  1. GETLASTDEMOUPDAT(PATIENTLIST,DFN,NUM) ; last patient demographic update
  1. N PREREGIEN,DEMODIFF
  1. ;
  1. S PREREGIEN=0,PREREGIEN=$O(^DGS(41.41,"B",DFN,"A"),-1)
  1. S DEMODIFF=$$FMDIFF^XLFDT(DT,$$GET1^DIQ(41.41,PREREGIEN_",",1,"I"))
  1. S PATIENTLIST("Patient",NUM,"DemographicsUpdated")=$P($$FMTISO^SDAMUTDT($$GET1^DIQ(41.41,PREREGIEN_",",1,"I")),"T")
  1. S PATIENTLIST("Patient",NUM,"DemographicsNeedUpdate")=$S(DEMODIFF>179:1,DEMODIFF<180:0)
  1. Q
  1. ;
  1. GETELIGIBILITY(PATIENTLIST,DFN,NUM) ; top level primary code + secondary eligibilities
  1. N ELIGIBILITYIEN,COUNT
  1. ;
  1. S COUNT=1
  1. S PATIENTLIST("Patient",NUM,"Eligibility",COUNT,"PrimaryEligibilityCode")=$$GET1^DIQ(2,DFN_",",.361,"E")
  1. S PATIENTLIST("Patient",NUM,"Eligibility",COUNT,"PrimaryEligibilityCodeType")=$$GET1^DIQ(8,$$GET1^DIQ(2,DFN_",",.361,"I"),4,"E")
  1. ;
  1. S ELIGIBILITYIEN=0
  1. F S ELIGIBILITYIEN=$O(^DPT(DFN,"E","B",ELIGIBILITYIEN)) Q:ELIGIBILITYIEN="B"!(ELIGIBILITYIEN="") D
  1. .I $$GET1^DIQ(2.0361,ELIGIBILITYIEN_","_DFN_",",.01,"I")=$$GET1^DIQ(2,DFN_",",.361,"I") Q
  1. .S COUNT=COUNT+1
  1. .S PATIENTLIST("Patient",NUM,"Eligibility",COUNT,"SecondaryEligibilityCode")=$$GET1^DIQ(2.0361,ELIGIBILITYIEN_","_DFN_",",.01,"E")
  1. .S PATIENTLIST("Patient",NUM,"Eligibility",COUNT,"SecondaryEligibilityCodeType")=$$GET1^DIQ(8,ELIGIBILITYIEN,4,"E")
  1. Q
  1. ;
  1. GETCONDITIONS(PATIENTLIST,DFN,NUM) ; service connected conditions
  1. N CONDITIONIEN,COUNT
  1. ;
  1. S CONDITIONIEN=0,COUNT=0
  1. F S CONDITIONIEN=$O(^DPT(DFN,.373,CONDITIONIEN)) Q:'CONDITIONIEN D
  1. .S COUNT=COUNT+1
  1. .S PATIENTLIST("Patient",NUM,"ServiceConnectedCondition",COUNT,"Condition")=$$GET1^DIQ(2.05,CONDITIONIEN_","_DFN_",",.01,"E")
  1. Q
  1. ;
  1. GETDISABILITIES(PATIENTLIST,DFN,NUM) ; rated disabilities
  1. N AECODE,AFFECTED,COUNT,RATEDARRAY
  1. ;
  1. D RDIS^DGRPDB(DFN,.RATEDARRAY) ; ICR #4807
  1. I '$D(RATEDARRAY) D Q
  1. . S PATIENTLIST("Patient",NUM,"RatedDisabilities")=""
  1. ;
  1. S COUNT=0
  1. F S COUNT=$O(RATEDARRAY(COUNT)) Q:'COUNT D
  1. . S PATIENTLIST("Patient",NUM,"RatedDisabilities",COUNT,"RatedDisability")=$$GET1^DIQ(31,$P(RATEDARRAY(COUNT),"^")_",",.01,"E") ; ICR #733
  1. . S PATIENTLIST("Patient",NUM,"RatedDisabilities",COUNT,"DisabilityPercent")=$P(RATEDARRAY(COUNT),"^",2)
  1. . S PATIENTLIST("Patient",NUM,"RatedDisabilities",COUNT,"ServiceConnected")=$S($P(RATEDARRAY(COUNT),"^",3)=1:"YES",1:"NO")
  1. . S AECODE=$P(RATEDARRAY(COUNT),"^",4)
  1. . S AFFECTED=$S(AECODE="BL":"BOTH LOWER",AECODE="BU":"BOTH UPPER",AECODE="RL":"RIGHT LOWER",AECODE="RU":"RIGHT UPPER",AECODE="LL":"LEFT LOWER",AECODE="LU":"LEFT UPPER",1:"")
  1. . S PATIENTLIST("Patient",NUM,"RatedDisabilities",COUNT,"ExtremityAffected")=AFFECTED
  1. . S PATIENTLIST("Patient",NUM,"RatedDisabilities",COUNT,"OriginalEffectiveDate")=$$FMTISO^SDAMUTDT($P(RATEDARRAY(COUNT),"^",5))
  1. . S PATIENTLIST("Patient",NUM,"RatedDisabilities",COUNT,"CurrentEffectiveDate")=$$FMTISO^SDAMUTDT($P(RATEDARRAY(COUNT),"^",6))
  1. Q
  1. ;
  1. GETICN(DFN) ; patient ICN
  1. N ICN
  1. ;
  1. S ICN=$$GETICN^MPIF001(DFN)
  1. I ICN["-1",$$GET1^DIQ(8989.3,1,.01,"E")["TEST" Q $$GET1^DIQ(2,DFN,991.1)
  1. Q ICN
  1. ;
  1. VALIDATE(ERRORS,NUMOFRECORDS,SEARCHSTRING) ;
  1. I $G(NUMOFRECORDS)="" S NUMOFRECORDS=10 Q
  1. I $G(NUMOFRECORDS)>50!($G(NUMOFRECORDS)<1) D ERRLOG^SDESJSON(.ERRORS,382)
  1. ;
  1. I SEARCHSTRING'="",SEARCHSTRING'[",",$L(SEARCHSTRING)<3 S PATIENTLIST("Patient",1)="" D ERRLOG^SDESJSON(.ERRORS,473)
  1. Q
  1. ;
  1. TRAILINGSPACES(NAME) ;
  1. N FIRSTNAME,LASTNAME
  1. ;
  1. S FIRSTNAME=$P(NAME,",")
  1. S LASTNAME=$P(NAME,",",2)
  1. I $E(LASTNAME)=" " D
  1. .S LASTNAME=$E(LASTNAME,2,$L(LASTNAME))
  1. .S NAME=FIRSTNAME_","_LASTNAME
  1. Q NAME
  1. ;
  1. BUILDJSON(JSONRETURN,RETURN) ;
  1. N JSONERROR
  1. D ENCODE^XLFJSON("RETURN","JSONRETURN","JSONERR")
  1. Q
  1. ;