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

SDES2APPTUTIL.m

Go to the documentation of this file.
SDES2APPTUTIL ;ALB/BLB,TJB/ANU/BLB/LAB,BLB,LAB,BWF,JAS,JAS - SDES2 CREATE APPOINTMENT UTILITIES ;MAY 7, 2025
 ;;5.3;Scheduling;**866,871,875,877,878,880,881,890,893,905,907**;Aug 13, 1993;Build 5
 ;;Per VHA Directive 6402, this routine should not be modified
 ;---------------------------------------------------------------
 Q
 ;
APPTREQ(SDCONTEXT,APPOINTMENT,APPTIEN,APPTMSG) ; called only on create of appointment
 N STARTDATETIME,CLINICIEN,REQUESTIEN,REQUESTTYPE,SDUSER
 S REQUESTIEN=$P($G(APPOINTMENT("REQUEST TYPE")),"|",2)
 S REQUESTTYPE=$P($G(APPOINTMENT("REQUEST TYPE")),"|")
 ;
 S STARTDATETIME=$G(APPOINTMENT("START DATE TIME")),CLINICIEN=$G(APPOINTMENT("CLINIC IEN"))
 D ADDPIDHISTORY^SDESCREATEAPPREQ($P($G(APPOINTMENT("REQUEST TYPE")),"|",2),$G(APPOINTMENT("PATIENT INDICATED DATE")))
 ;
 D BUILDAPPTDATA^SDESEDITAPPTREQ(REQUESTIEN,STARTDATETIME,CLINICIEN,$G(APPOINTMENT("SERVICE CONNECTED PERCENTAGE")),$G(APPOINTMENT("SERVICE CONNECTED")),$G(APPOINTMENT("APPOINTMENT TYPE")),$G(SDCONTEXT("ACHERON AUDIT ID")),DUZ,.APPTMSG)
 I $G(APPOINTMENT("MRTC PARENT")),$G(APPOINTMENT("MRTC")) D
 .D MRTCCHILD($G(APPOINTMENT("PATIENT INDICATED DATE")),REQUESTIEN,APPTIEN,$G(APPOINTMENT("MRTC PARENT")))
 Q
 ;
RECALL(RECALLRETURN,SDCONTEXT,RECALL,REQUESTIEN) ;
 S RECALL("RECALL IEN")=REQUESTIEN
 S RECALL("DELETE REASON")=7
 D DISPRECALL^SDES2DISPRECALL(.RECALLRETURN,.SDCONTEXT,.RECALL)
 Q
 ;
CONSULT(APPOINTMENT,APPTIEN44,USERID) ;
 N FDA,REQUESTIEN,PROVIDERIEN,NOTE,STARTDATETIME,RESOURCEIEN,DFN,CLINICIEN,NETSTARTDT,GMRCDUZ
 ;
 S REQUESTIEN=$P($G(APPOINTMENT("REQUEST TYPE")),"|",2)
 S PROVIDERIEN=$G(APPOINTMENT("PROVIDER IEN"))
 S NOTE=$G(APPOINTMENT("NOTE"))
 S STARTDATETIME=$G(APPOINTMENT("START DATE TIME"))
 S NETSTARTDT=$$FMTONET^SDECDATE(STARTDATETIME)
 S RESOURCEIEN=$G(APPOINTMENT("RESOURCE IEN"))
 S DFN=$G(APPOINTMENT("DFN"))
 S CLINICIEN=$G(APPOINTMENT("CLINIC IEN"))
 D REQSET(REQUESTIEN,USERID,"SCHEDULED","",$TR($E(NOTE,1,150),"^"," "),STARTDATETIME,CLINICIEN,DFN)
 ;
 S FDA(44.003,APPTIEN44_","_STARTDATETIME_","_CLINICIEN_",",688)=REQUESTIEN
 D UPDATE^DIE("","FDA") K FDA
 ;
 D UPDATECONSULTPID(REQUESTIEN,$G(APPOINTMENT("PATIENT INDICATED DATE")),DFN,.USERID)
 Q
 ;
REQSET(REQUESTIEN,USERID,ACTION,CANCELLEDBY,NOTE,STARTDATETIME,CLINICIEN,DFN) ;
 N %DT,X,SD,TMPYCLNC
 ;
 I $$GET1^DIQ(123,REQUESTIEN_",",8,"E")="DISCONTINUED"!($$GET1^DIQ(123,REQUESTIEN_",",8,"E")="COMPLETE") Q
 ;
 I ACTION="SCHEDULED" D
 .D EDITCS^SDCNSLT(STARTDATETIME,NOTE,CLINICIEN_U_$$GET1^DIQ(44,CLINICIEN,.01,"E"),REQUESTIEN)
 ;
 I ACTION="CANCELLED" D
 .D SDECCAN^SDCNSLT(REQUESTIEN,$$GET1^DIQ(123,REQUESTIEN,.02,"I"),STARTDATETIME,CLINICIEN,CANCELLEDBY,$$GET44APPTIEN^SDES2NOSHOW(CLINICIEN,STARTDATETIME,DFN),NOTE)
 Q
 ;
UPDATECONSULTPID(CONSULTIEN,PID,DFN,USERIEN) ;
 N CONSULTPIDIEN,CONSULTFDA,CONSULTSUBFDA,TOPLEVELIEN
 ;
 I '$D(^SDEC(409.87,"B",CONSULTIEN)) D
 .S CONSULTFDA(409.87,"+1,",.01)=CONSULTIEN
 .S CONSULTFDA(409.87,"+1,",.02)=DFN
 .D UPDATE^DIE("","CONSULTFDA","TOPLEVELIEN") K CONSULTFDA
 .;
 .S CONSULTSUBFDA(409.871,"+1,"_TOPLEVELIEN(1)_",",.01)=$$NOW^XLFDT
 .S CONSULTSUBFDA(409.871,"+1,"_TOPLEVELIEN(1)_",",1)=PID
 .S CONSULTSUBFDA(409.871,"+1,"_TOPLEVELIEN(1)_",",2)=$S($G(USERIEN):USERIEN,1:DUZ)
 .D UPDATE^DIE("","CONSULTSUBFDA") K CONSULTSUBFDA
 ;
 ; file consult pid history subfile only
 S CONSULTPIDIEN=$O(^SDEC(409.87,"B",CONSULTIEN,0))
 I $D(^SDEC(409.87,"B",CONSULTIEN)) D
 .I $$CONSPIDCHECK^SDEC07(CONSULTIEN,PID) D
 ..S CONSULTSUBFDA(409.871,"+1,"_CONSULTPIDIEN_",",.01)=$$NOW^XLFDT
 ..S CONSULTSUBFDA(409.871,"+1,"_CONSULTPIDIEN_",",1)=PID
 ..S CONSULTSUBFDA(409.871,"+1,"_CONSULTPIDIEN_",",2)=$S($G(USERIEN):USERIEN,1:DUZ)
 ..D UPDATE^DIE("","CONSULTSUBFDA") K CONSULTSUBFDA
 Q
 ;
CONSPIDCHECK(SDRIEN1,SDDDT) ;
 N CHIEN,CHSIEN,OLDPID
 S CHIEN=$O(^SDEC(409.87,"B",SDRIEN1,0))
 S CHSIEN=$O(^SDEC(409.87,CHIEN,1,9999999),-1)
 S OLDPID=$$GET1^DIQ(409.871,CHSIEN_","_CHIEN_",",1,"I")
 I OLDPID'=$G(SDDDT) Q 1
 Q 0
 ;
ENCOUNTERS(APPOINTMENT,ENCOUNTER) ;
 I $$NOW^XLFDT>$G(APPOINTMENT("START DATE TIME")),$$NEW^SDPCE($G(APPOINTMENT("START DATE TIME"))) D
 .S ENCOUNTER=$$GETAPT^SDVSIT2($G(APPOINTMENT("DFN")),$G(APPOINTMENT("START DATE TIME")),$G(APPOINTMENT("CLINIC IEN")))
 Q
 ;
MAKE(DFN,STARTDATETIME,CLINICIEN) ;
 D MAKE^SDAMEVT(DFN,STARTDATETIME,CLINICIEN,$$SCIEN^SDECU2(DFN,CLINICIEN,STARTDATETIME),2)
 Q
 ;
GETRESOURCE(ERRORS,APPOINTMENT,CLINICIEN) ;
 N RESOURCE,MATCH
 ;
 I '$G(APPOINTMENT("RESOURCE IEN")) D
 .S RESOURCE=0,MATCH=0
 .F  S RESOURCE=$O(^SDEC(409.831,"ALOC",CLINICIEN,RESOURCE)) Q:RESOURCE'>0!(MATCH>0)  D
 ..I $$GET1^DIQ(409.831,RESOURCE_",",.012,"E")'="CLINIC" Q
 ..S APPOINTMENT("RESOURCE IEN")=RESOURCE,MATCH=1
 ;
 I $$GET1^DIQ(409.831,$G(APPOINTMENT("RESOURCE IEN")),.04,"I")'=$G(CLINICIEN) D ERRLOG^SDESJSON(.ERRORS,366) Q
 Q
 ;
GETPROVIDER(APPOINTMENT,CLINICIEN,PROVIDER,REQUESTTYPE,REQUESTIEN) ;
 N DEFAULTPROVIEN,PROVIDERIEN
 ;
 I $L($G(PROVIDER)) Q
 ;
 I REQUESTTYPE="R" D  Q
 .S APPOINTMENT("PROVIDER IEN")=$$GET1^DIQ(403.54,$$GET1^DIQ(403.5,REQUESTIEN,4,"I"),.01,"I")
 ;
 S PROVIDERIEN=0,DEFAULTPROVIEN=""
 F  S PROVIDERIEN=$O(^SC(CLINICIEN,"PR",PROVIDERIEN)) Q:'PROVIDERIEN!($G(DEFAULTPROVIEN))  D
 .I $$GET1^DIQ(44.1,PROVIDERIEN_","_CLINICIEN_",",.02,"I") S DEFAULTPROVIEN=$$GET1^DIQ(44.1,PROVIDERIEN_","_CLINICIEN_",",.01,"I")
 S APPOINTMENT("PROVIDER IEN")=DEFAULTPROVIEN
 ;
 Q
 ;
MRTCCHILD(PID,REQUESTIEN,APPTIEN,PARENT) ;
 N REQUEST
 S REQUEST("MRTC","PATIENT INDICATED DATE")=$G(APPOINTMENT("PATIENT INDICATED DATE"))
 S REQUEST("MRTC","CHILD REQUEST")=REQUESTIEN
 S REQUEST("MRTC","MRTC APPOINTMENT")=$G(APPTIEN)
 D BUILDMRTCLINKS^SDESEDITAPPTREQ(.REQUEST,$G(APPOINTMENT("MRTC PARENT")))
 D BUILDMRTCPID^SDESEDITAPPTREQ(.REQUEST,$G(APPOINTMENT("MRTC PARENT")))
 Q
 ;
CLEANCMMTS(COMMENTS) ;
 S COMMENTS=$$CTRL^XMXUTIL1(COMMENTS)
 S COMMENTS=$TR(COMMENTS,"^"," ")
 D FORMATCMMTS(.COMMENTS)
 Q COMMENTS
 ;
FORMATCMMTS(COMMENTS) ;
 N CHARNUM,END,LEADING,TRAILING
 Q:'$L(COMMENTS)
 S (LEADING,TRAILING)=1,END=0
 F CHARNUM=1:1:$L(COMMENTS) Q:END  D
 . I $E(COMMENTS,1)'=" " S LEADING=0
 . I $E(COMMENTS,1)=" " S COMMENTS=$E(COMMENTS,2,$L(COMMENTS))
 . I $E(COMMENTS,$L(COMMENTS))'=" " S TRAILING=0
 . I $E(COMMENTS,$L(COMMENTS))=" " S COMMENTS=$E(COMMENTS,1,($L(COMMENTS)-1))
 . I 'LEADING,'TRAILING S END=1
 Q
 ; 
STOREREQUESTCOMM(REQUESTIEN) ;
 N SUBIEN,PATIENTCOMMENTS
 ;
 I $D(^SDEC(409.85,REQUESTIEN,"PATCOM",0)) D
 .S SUBIEN=0
 .F  S SUBIEN=$O(^SDEC(409.85,REQUESTIEN,"PATCOM",SUBIEN)) Q:'SUBIEN  D
 ..S PATIENTCOMMENTS(SUBIEN)=$$GET1^DIQ(409.855,SUBIEN_","_REQUESTIEN_",",.01,"E")
 D WP^DIE(409.84,APPTIEN_",",4,"","PATIENTCOMMENTS")
 Q
 ;
STORENOTE(APPTIEN,NOTE,APPTNOTES) ;
 I $L(NOTE) D
 .D WP^SDECUTL(.APPTNOTES,NOTE)
 .D WP^DIE(409.84,APPTIEN_",",1,"","APPTNOTES")
 Q
 ;
REQUESTTYPE(ERRORS,APPOINTMENTS,REQUESTTYPE,REQUESTIEN,DFN) ;
 I '$L($G(APPOINTMENT("REQUEST TYPE"))) D ERRLOG^SDESJSON(.ERRORS,60) Q
 ;
 I REQUESTTYPE'="A",REQUESTTYPE'="R",REQUESTTYPE'="C" D ERRLOG^SDESJSON(.ERRORS,61) Q
 ;
 I '$G(REQUESTIEN) D ERRLOG^SDESJSON(.ERRORS,61) Q
 ;
 I REQUESTTYPE="R",'$D(^SD(403.5,REQUESTIEN,0)) D ERRLOG^SDESJSON(.ERRORS,61) Q
 I REQUESTTYPE="C",'$D(^GMR(123,REQUESTIEN,0)) D ERRLOG^SDESJSON(.ERRORS,61) Q
 I REQUESTTYPE="A",'$D(^SDEC(409.85,REQUESTIEN,0)) D ERRLOG^SDESJSON(.ERRORS,61) Q
 ;
 I REQUESTTYPE="A",$$GET1^DIQ(409.85,$G(REQUESTIEN),23,"I")="C" D ERRLOG^SDESJSON(.ERRORS,433) Q
 ;
 I REQUESTTYPE="C" D
 .I $$GET1^DIQ(123,REQUESTIEN_",",8,"E")'="PENDING",$$GET1^DIQ(123,+REQUESTIEN_",",8,"E")'="ACTIVE" D ERRLOG^SDESJSON(.ERRORS,433) Q
 ;
 I REQUESTTYPE="A" D
 .I DFN'=$$GET1^DIQ(409.85,REQUESTIEN,.01,"I") D ERRLOG^SDESJSON(.ERRORS,447) Q
 I REQUESTTYPE="R" D
 .I DFN'=$$GET1^DIQ(403.5,REQUESTIEN,.01,"I") D ERRLOG^SDESJSON(.ERRORS,447) Q
 I REQUESTTYPE="C" D
 .I DFN'=$$GET1^DIQ(123,REQUESTIEN,.02,"I") D ERRLOG^SDESJSON(.ERRORS,447)
 Q
 ;
GETAPPTTYPE(ERRORS,APPOINTMENT,TYPE,TYPENAME) ;
 I '$G(TYPE),'$L($G(TYPENAME)) D ERRLOG^SDESJSON(.ERRORS,306) Q
 ;
 I $G(TYPE),$D(^SD(409.1,TYPE,0)) Q
 ;
 I $L($G(TYPENAME)),$D(^SD(409.1,"B",TYPENAME)) S APPOINTMENT("APPOINTMENT TYPE")=$$FIND1^DIC(409.1,"","X",TYPENAME,"B") Q
 ;
 D ERRLOG^SDESJSON(.ERRORS,180)
 Q
 ;
APPTIN44EXISTS(DFN,CLINIC,DATE) ;
 N SUBIEN,FOUND
 ;
 S SUBIEN=0,FOUND=0
 F  S SUBIEN=$O(^SC(CLINIC,"S",DATE,1,SUBIEN)) Q:'SUBIEN!($G(FOUND)=1)  D
 .I $$GET1^DIQ(44.003,SUBIEN_","_DATE_","_CLINIC_",",310)="CANCELLED" Q  ;cancelled
 .I $$GET1^DIQ(44.003,SUBIEN_","_DATE_","_CLINIC_",",.01,"I")=DFN S FOUND=1 Q  ; record exists
 I $G(FOUND) Q 1
 Q 0
 ;
APPTINDIFFTZ(DFN,DATETIME,CLINICIEN) ;
 N EXISTINGAPPTCLIN,EXISTINGDATETIME,APPTIEN,FOUND
 ;
 S FOUND=0,APPTIEN=0
 F  S APPTIEN=$O(^SDEC(409.84,"CPAT",DFN,APPTIEN)) Q:'APPTIEN!($G(FOUND)=1)  D
 .I $$GET1^DIQ(409.84,APPTIEN,.12,"I") Q
 .S EXISTINGAPPTCLIN=$$GET1^DIQ(409.831,$$GET1^DIQ(409.84,APPTIEN,.07,"I"),.04,"I")
 .S EXISTINGDATETIME=$$FMTISO^SDAMUTDT($$GET1^DIQ(409.84,APPTIEN,.01,"I"),EXISTINGAPPTCLIN)
 .I $$ISOTFM^SDAMUTDT(EXISTINGDATETIME,CLINICIEN)=DATETIME S FOUND=1
 Q FOUND
 ;
DELETECANRECORD(DFN,DATETIME,CLINICIEN) ;
 N SUBIEN,FOUND,FDA,FDAERR
 ;
 S SUBIEN=0,FOUND=0
 F  S SUBIEN=$O(^SC(CLINICIEN,"S",DATETIME,1,SUBIEN)) Q:'SUBIEN!(FOUND=1)  D
 .I $$GET1^DIQ(44.003,SUBIEN_","_DATETIME_","_CLINICIEN_",",.01,"I")=DFN D
 ..I $$GET1^DIQ(44.003,SUBIEN_","_DATETIME_","_CLINICIEN_",",310)'="CANCELLED" D
 ...S FOUND=1
 ...S FDA(2.98,DATETIME_","_DFN_",",.01)="@"
 ...D FILE^DIE(,"FDA","FDAERR") K FDA
 ;
DELETERECORD(ARRAYDELETE) ;
 N DELETEFDA,FILENUMBER,IENS,ERR
 ;
 S FILENUMBER=0
 F  S FILENUMBER=$O(ARRAYDELETE(FILENUMBER)) Q:'FILENUMBER  D
 .S IENS=ARRAYDELETE(FILENUMBER)
 .S DELETEFDA(FILENUMBER,IENS,.01)="@"
 .D FILE^DIE(,"DELETEFDA","ERR") K DELETEFDA
 Q
 ;
ORDERCHECKLOCK(ERRORS,REQTYPE,DFN) ;
 N FOUND,REQUESTIEN,ORDERID
 ;
 S FOUND=0
 S REQUESTIEN=$P($G(REQTYPE),"|",2)
 S REQTYPE=$$GET1^DIQ(409.85,REQUESTIEN,4,"I")
 I REQTYPE="RTC" D
 .S ORDERID=$$GET1^DIQ(409.85,REQUESTIEN,46,"I")
 .I '+$G(ORDERID) Q
 .I $D(^XTMP("ORLK-"_ORDERID)) D ERRLOG^SDESJSON(.ERRORS,188) S FOUND=1
 Q FOUND
 ;
GETPID(APPOINTMENT,PID,REQUESTTYPE,REQUESTIEN) ;
 I $L($G(PID)) Q
 ;
 I REQUESTTYPE="A" S PID=$$GET1^DIQ(409.85,REQUESTIEN,22,"I")
 I REQUESTTYPE="R" S PID=$$GET1^DIQ(403.5,REQUESTIEN,5,"I")
 ;
 I REQUESTTYPE="C",$$GET1^DIQ(123,REQUESTIEN,17,"I")'="" S PID=$$GET1^DIQ(123,REQUESTIEN,17,"I")
 I REQUESTTYPE="C",PID="" S PID=$$GET1^DIQ(123,REQUESTIEN,.01,"I")
 ;
 S APPOINTMENT("PATIENT INDICATED DATE")=$G(PID)
 Q
 ;