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

SDESPATRPC.m

Go to the documentation of this file.
  1. SDESPATRPC ;ALB/TAW,RJT,ANU,MGD,DJS,RRM - PATIENT RPCS ;Aug 11, 2022
  1. ;;5.3;Scheduling;**792,804,805,807,809,814,816,820,823,824**;Aug 13, 1993;Build 3
  1. ;
  1. ; Reference to ^IBA(355.33 in ICR #6891
  1. ; Reference to $$GETS^DIQ,$$GET1^DIQ in ICR #2056
  1. ; Reference to #354 in ICR #5296
  1. ;
  1. Q
  1. ;
  1. INSURINDICATORS(RETURN,DFNS) ;
  1. Q:$D(DFNS)=0
  1. N INDICATORS,SDINDEX,HASDFNERRORS,PTDFN,SDINDEX,SDCNT
  1. S SDINDEX="",SDCNT=0
  1. F S SDINDEX=$O(DFNS(SDINDEX)) Q:(SDINDEX="")!(SDCNT>100) D
  1. .S SDCNT=SDCNT+1
  1. .S PTDFN=DFNS(SDINDEX)
  1. .S INDICATORS("NeedInsuranceVerification",SDINDEX,"DFN")=PTDFN
  1. .S INDICATORS("NeedInsuranceVerification",SDINDEX,"ICN")=$$GETPATICN^SDESINPUTVALUTL(PTDFN)
  1. .I $G(SDCNT)>100 D
  1. ..S INDICATORS("NeedInsuranceVerification",SDINDEX,"Errors")="Max number of records allowed is 100"
  1. .Q:SDCNT>100
  1. .N DFNERRORS
  1. .S HASDFNERRORS=$$VALIDATEDFN(.DFNERRORS,PTDFN)
  1. .I $G(HASDFNERRORS) D
  1. ..S INDICATORS("NeedInsuranceVerification",SDINDEX,"Errors")="DFN Error"
  1. ..S INDICATORS("NeedInsuranceVerification",SDINDEX,"YesNo")=""
  1. .I '$G(HASDFNERRORS) D
  1. ..N FLG
  1. ..D NEEDVERIFY(.FLG,PTDFN,180,90)
  1. ..S INDICATORS("NeedInsuranceVerification",SDINDEX,"YesNo")=FLG
  1. D BUILDJSON(.RETURN,.INDICATORS)
  1. Q
  1. ;
  1. VALIDATEDFN(ERRORS,PDFN) ;
  1. N ERRORFLAG
  1. I $G(PDFN)="" S ERRORFLAG=1 D ERRLOG^SDESJSON(.ERRORS,1)
  1. I $G(PDFN)'="",'$D(^DPT(PDFN,0)) S ERRORFLAG=1 D ERRLOG^SDESJSON(.ERRORS,2)
  1. Q $D(ERRORFLAG)
  1. ;
  1. BUILDJSON(JSONRETURN,INPUT) ;
  1. N JSONERROR
  1. S JSONERROR=""
  1. D ENCODE^XLFJSON("INPUT","JSONRETURN","JSONERROR")
  1. Q
  1. ;
  1. INSURVERIFYREQ(RETURN,DFN,SDEAS) ;
  1. N POP,SDPAT,FLG
  1. S (FLG,POP)=0
  1. S DFN=$G(DFN)
  1. I DFN="" S POP=1 D ERRLOG^SDESJSON(.SDPAT,1)
  1. I DFN'="",'$D(^DPT(DFN,0)) S POP=1 D ERRLOG^SDESJSON(.SDPAT,2)
  1. S SDEAS=$G(SDEAS,"")
  1. I $L(SDEAS) S SDEAS=$$EASVALIDATE^SDESUTIL(SDEAS)
  1. I $G(SDEAS)=-1 S POP=1 D ERRLOG^SDESJSON(.SDPAT,142)
  1. I '$G(POP) D NEEDVERIFY(.FLG,DFN,180,90) S SDPAT("NeedInsuranceVerification","YesNo")=FLG
  1. D BUILDER
  1. Q
  1. NEEDVERIFY(NEEDVERIFY,DFN,LASTVERFWINDOW,NOCOVWINDOW) ;
  1. ; LASTVERFWINDOW - How many days in the past to look for a Last Verified Date
  1. ; NOCOVWINDOW - How many days in the past to look for a No Coverage Date
  1. ;
  1. ; Return
  1. ; 1 = Verification needed (Default)
  1. ; 0 = Has active insurance or verification started
  1. N IENS,SDMSG,PATDATA,BILLPATDATA,NOCOVDT,COVBYHI,SUBIEN,XDT,TMPDT,INDEXEND,IBAIEN,IBADATA
  1. N FEDONLY,FEDPOLICY
  1. S NEEDVERIFY=1
  1. ;
  1. ;SD*5.3*816
  1. ;
  1. S IBAIEN=""
  1. S FEDONLY="Y"
  1. F S IBAIEN=$O(^IBA(355.33,"C",DFN,IBAIEN)) Q:IBAIEN=""!(FEDONLY="N") D
  1. .S FEDPOLICY=""
  1. .S FEDPOLICY=$$GET1^DIQ(355.33,IBAIEN,20.01,"E")
  1. .S FEDPOLICY=$G(FEDPOLICY,"")
  1. .S FEDPOLICY=$$UP^XLFSTR(FEDPOLICY)
  1. .Q:((FEDPOLICY["MEDICAID")!(FEDPOLICY["MEDICARE")!(FEDPOLICY["TRICARE")!(FEDPOLICY["CHAMPVA"))
  1. .S FEDONLY="N"
  1. ;
  1. S SUBIEN=0
  1. F S SUBIEN=$O(^DPT(DFN,.312,SUBIEN)) Q:SUBIEN=""!('SUBIEN)!(FEDONLY="N") D
  1. .S IENS=SUBIEN_","_DFN_","
  1. .K PATDATA
  1. .D GETS^DIQ(2.312,IENS,".01;3","IE","PATDATA","SDMSG")
  1. .;Check the Insurance Expiration Data is active
  1. .S TMPDT=PATDATA(2.312,IENS,3,"I")
  1. .S TMPDT=$G(TMPDT)
  1. .I +TMPDT,(+TMPDT'>DT) Q ;term date of today is inactive coverage
  1. .S FEDPOLICY=""
  1. .S FEDPOLICY=PATDATA(2.312,IENS,.01,"E")
  1. .S FEDPOLICY=$G(FEDPOLICY,"")
  1. .S FEDPOLICY=$$UP^XLFSTR(FEDPOLICY)
  1. .Q:((FEDPOLICY["MEDICAID")!(FEDPOLICY["MEDICARE")!(FEDPOLICY["TRICARE")!(FEDPOLICY["CHAMPVA"))
  1. .S FEDONLY="N"
  1. ;
  1. I $G(FEDONLY)="Y" S LASTVERFWINDOW=365
  1. ;
  1. ;Check the Insurance Verification Processor file
  1. ; The assumption is that once verification is complete all
  1. ; references to the patient are removed.
  1. S IBAIEN=""
  1. S INDEXEND=$$FMADD^XLFDT(DT,-LASTVERFWINDOW)
  1. F S IBAIEN=$O(^IBA(355.33,"C",DFN,IBAIEN)) Q:IBAIEN="" D
  1. . K IBADATA
  1. . Q:$$GET1^DIQ(355.33,IBAIEN,.01,"I")<INDEXEND
  1. . I $$GET1^DIQ(355.33,IBAIEN,.04,"I")="E" S NEEDVERIFY=0 ;Entered - verification has started
  1. I $G(NEEDVERIFY)=0 Q ;Verification not needed
  1. ;
  1. ;Check the Insurance Types (sub file .321) of the Patient File (#2)
  1. S SUBIEN=0
  1. F S SUBIEN=$O(^DPT(DFN,.312,SUBIEN)) Q:SUBIEN=""!(NEEDVERIFY=0)!('SUBIEN) D
  1. .S IENS=SUBIEN_","_DFN_","
  1. .K PATDATA
  1. .D GETS^DIQ(2.312,IENS,"1.03;3","I","PATDATA","SDMSG")
  1. .;Check the Insurance Expiration Data is active
  1. .S TMPDT=PATDATA(2.312,IENS,3,"I")
  1. .S TMPDT=$G(TMPDT)
  1. .I +TMPDT,(+TMPDT'>DT) Q ;term date of today is inactive coverage
  1. .;Check the Date Last Verified
  1. .S TMPDT=$P(PATDATA(2.312,IENS,1.03,"I"),".")
  1. .S TMPDT=$G(TMPDT)
  1. .I TMPDT D
  1. ..S XDT=$$FMADD^XLFDT(DT,-LASTVERFWINDOW)
  1. ..S XDT=$G(XDT)
  1. ..I XDT<TMPDT S NEEDVERIFY=0
  1. I $G(NEEDVERIFY)=0 Q ;Verification not needed
  1. ;
  1. ;If no insurance or unknown on file then check the Covered by Health Insurance date
  1. D GETS^DIQ(2,DFN,".3192","I","PATDATA","SDMSG")
  1. S COVBYHI=PATDATA(2,DFN_",",.3192,"I")
  1. S COVBYHI=$G(COVBYHI)
  1. I COVBYHI="N"!(COVBYHI="U") D
  1. .D GETS^DIQ(354,DFN,"60","I","BILLPATDATA","SDMSG")
  1. .S NOCOVDT=$G(BILLPATDATA(354,DFN_",",60,"I"))
  1. .S NOCOVDT=$G(NOCOVDT)
  1. .I NOCOVDT D
  1. ..S XDT=$$FMADD^XLFDT(DT,-NOCOVWINDOW)
  1. ..I $G(XDT)<NOCOVDT S NEEDVERIFY=0
  1. Q
  1. ;
  1. BUILDER ;Convert data to JSON
  1. N JSONERR
  1. S JSONERR=""
  1. D ENCODE^SDESJSON(.SDPAT,.RETURN,.JSONERR)
  1. Q