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

SDES2BLOCKANDMOV.m

Go to the documentation of this file.
SDES2BLOCKANDMOV ;ALB/BLB,TJB,BLB,BWF,MCB - BLOCK AND MOVE ;January 31, 2025
 ;;5.3;Scheduling;**875,880,889,895,897,898,899**;Aug 13, 1993;Build 2
 ;;Per VHA Directive 6402, this routine should not be modified
 ;
 Q
 ;
BLOCKANDMOVE(JSON,SDCONTEXT,BLOCKANDMOVE) ;
 N BLOCKMOVERETURN,ERRORS,APPOINTMENT,JSONCANCEL,JSONCANCLINAVAIL,ORIGINALCLINIC,JSONAPPOINTMENT,APPTRETURN,CANCELAVAIL,OVERBOOK,TARGETDATE,SLOT,TIMECLINICOPENS,TARGETSLOT,ORIGSLOTS,ORIGINATINGSLOTS,IENS44
 ;
 D POPULATE(.BLOCKANDMOVE,.APPTIEN,.TARGETCLINIC,.TARGETDATE,.ORIGINALCLINIC,.CANCELAVAIL,.SLOT,.TARGETSLOT,.OVERBOOK,.ORIGSLOTS,.ORIGINATINGSLOTS,.TIMECLINICOPENS,.IENS44,.ERRORS)
 I $D(ERRORS) D BUILDJSON^SDES2JSON(.JSON,.ERRORS) Q
 D VALIDATE(.ERRORS,.SDCONTEXT,$G(APPTIEN),$G(TARGETCLINIC),$G(CANCELAVAIL("REMARKS")),TARGETDATE,OVERBOOK,.APPOINTMENT,.CANCELAVAIL,ORIGINALCLINIC,.TARGETSLOT,.ORIGINATINGSLOTS,TIMECLINICOPENS,IENS44)
 I $D(ERRORS) D BUILDJSON^SDES2JSON(.JSON,.ERRORS) Q
 ;
 D CANCEL^SDES2CANCLNAVAIL(.JSONCANCLINAVAIL,.SDCONTEXT,.CANCELAVAIL)
 ;
 D BUILDAPPTARRAY(.APPOINTMENT,APPTIEN,TARGETDATE,TARGETCLINIC,OVERBOOK,ORIGINALCLINIC,IENS44)
 D CREATE^SDES2CREATEAPPT(.JSONAPPOINTMENT,.SDCONTEXT,.APPOINTMENT)
 D DECODE^XLFJSON("JSONAPPOINTMENT","APPTRETURN")
 ;
 S BLOCKMOVERETURN("BlockAndMoveAppointment","NewAppointmentIEN")=$G(APPTRETURN("Appointment","IEN"))
 D BUILDJSON^SDES2JSON(.JSON,.BLOCKMOVERETURN)
 Q
 ;
VALIDATE(ERRORS,SDCONTEXT,APPTIEN,TARGETCLINIC,REMARKS,TARGETDATE,OVERBOOK,APPOINTMENT,CANCELAVAIL,ORIGINALCLINIC,TARGETSLOT,ORIGINATINGSLOTS,TIMECLINICOPENS,IENS44) ;
 N VAL,FDA
 ;
 D VALCONTEXT^SDES2VALCONTEXT(.ERRORS,.SDCONTEXT)
 D VALFILEIEN^SDES2VALUTIL(,.ERRORS,44,$G(TARGETCLINIC),1,,18,19)
 I $D(ERRORS) Q
 ;
 I $$GET1^DIQ(44,TARGETCLINIC,1918.5,"I")'="Y",$D(^HOLIDAY($P(TARGETDATE,"."),0)) D ERRLOG^SDES2JSON(.ERRORS,465)
 I $$GET1^DIQ(44,TARGETCLINIC,2500,"I")="Y",'$D(^SC(TARGETCLINIC,"SDPRIV",$S($G(SDCONTEXT("USER DUZ")):SDCONTEXT("USER DUZ"),1:DUZ),0)) D ERRLOG^SDES2JSON(.ERRORS,343)
 I $$GET1^DIQ(409.84,APPTIEN,.12,"I")!($$GET1^DIQ(409.84,APPTIEN,.03,"I"))!($$GET1^DIQ(409.84,APPTIEN,.14,"I"))!($$GET1^DIQ(409.84,APPTIEN,.101,"I")) D ERRLOG^SDES2JSON(.ERRORS,463)
 I $$GET1^DIQ(44.003,$$GET44RECORDIENS^SDESCANAPPT2(ORIGINALCLINIC,$$GET1^DIQ(409.84,APPTIEN,.01,"I"),$$GET1^DIQ(409.84,APPTIEN,.05,"I")),9,"E")="OVERBOOK" D ERRLOG^SDES2JSON(.ERRORS,469)
 ;
 I '$L($$GET1^DIQ(44.005,$P(TARGETDATE,".")_","_TARGETCLINIC_",",1,"I")) D ERRLOG^SDES2JSON(.ERRORS,466) Q
 I $P($$GET1^DIQ(409.84,APPTIEN,.01,"I"),".")'=$P($$GET1^DIQ(409.84,APPTIEN,.02,"I"),".") D ERRLOG^SDES2JSON(.ERRORS,462) Q
 I $D(ERRORS) Q
 ;
 D VALIDATEORIGSLOT(.ERRORS,.ORIGINATINGSLOTS,ORIGINALCLINIC,APPTIEN,$$GET1^DIQ(409.84,APPTIEN,.02,"I"))
 D VALAPPTLENGTHS(.ERRORS,ORIGINALCLINIC,TARGETCLINIC,APPTIEN,TARGETDATE,.TARGETSLOT)
 I $D(ERRORS) Q
 ;
 D VALIDATE^SDES2CANCLNAVAIL(.ERRORS,.SDCONTEXT,.CANCELAVAIL,ORIGINALCLINIC,"P",REMARKS)
 S CANCELAVAIL("START DATE TIME")=$$FMTISO^SDAMUTDT($$GET1^DIQ(409.84,APPTIEN,.01,"I"),ORIGINALCLINIC)
 S CANCELAVAIL("END DATE TIME")=$$FMTISO^SDAMUTDT($$GET1^DIQ(409.84,APPTIEN,.02,"I"),ORIGINALCLINIC)
 I $D(ERRORS) Q
 ;
 D BUILDAPPTARRAY(.APPOINTMENT,APPTIEN,TARGETDATE,TARGETCLINIC,OVERBOOK,ORIGINALCLINIC,IENS44)
 S FDA(409.85,$P($$GET1^DIQ(409.84,APPTIEN,.22,"I"),";")_",",23)="O" D FILE^DIE(,"FDA") K FDA
 D VALIDATE^SDES2CREATEAPPT(.ERRORS,.SDCONTEXT,.APPOINTMENT,.VAL,1)
 S FDA(409.85,$P($$GET1^DIQ(409.84,APPTIEN,.22,"I"),";")_",",23)="C" D FILE^DIE(,"FDA") K FDA
 Q
 ;
VALIDATEORIGSLOT(ERRORS,ORIGINATINGSLOTS,CLINICIEN,APPTIEN,ENDTIME) ;
 N SLOTS,SLOTNUM,NUMBEROFAPPTS,COUNT,SUBIEN,DATETIME,DONE
 ;
 I '$D(ORIGINATINGSLOTS("ClinAvail",1,"SlotsAvail")) D ERRLOG^SDES2JSON(.ERRORS,52,"No availability defined for the originating clinic at the original appointment time. Cannot block and move.") Q
 S SLOTNUM=0,DONE=0
 F  S SLOTNUM=$O(ORIGINATINGSLOTS("ClinAvail",SLOTNUM)) Q:'SLOTNUM!($D(ERRORS))!(DONE)  D
 .I $$ISOTFM^SDAMUTDT($G(ORIGINATINGSLOTS("ClinAvail",SLOTNUM,"EndTime")),CLINICIEN)>$$GET1^DIQ(409.84,APPTIEN,.02,"I") S DONE=1 Q
 .I $G(ORIGINATINGSLOTS("ClinAvail",SLOTNUM,"SlotsAvail"))'=0 D ERRLOG^SDES2JSON(.ERRORS,468) Q
 .S DATETIME=$$ISOTFM^SDAMUTDT($G(ORIGINATINGSLOTS("ClinAvail",SLOTNUM,"BeginTime")),CLINICIEN)
 .;
 .S COUNT=0,SUBIEN=0
 .F  S SUBIEN=$O(^SC(CLINICIEN,"S",DATETIME,1,SUBIEN)) Q:'SUBIEN  D
 ..I $$GET1^DIQ(44.003,SUBIEN_","_DATETIME_","_CLINICIEN_",",310)="CANCELLED" Q
 ..S COUNT=COUNT+1
 ..I SLOTNUM=1,COUNT=1 Q
 ..D ERRLOG^SDES2JSON(.ERRORS,468)
 Q
 ;
POPULATE(BLOCKANDMOVE,APPTIEN,TARGETCLINIC,TARGETDATE,ORIGINALCLINIC,CANCELAVAIL,SLOT,TARGETSLOT,OVERBOOK,ORIGSLOTS,ORIGINATINGSLOTS,TIMECLINICOPENS,IENS44,ERRORS) ;
 ;
 S APPTIEN=$G(BLOCKANDMOVE("APPOINTMENT IEN"))
 D VALFILEIEN^SDES2VALUTIL(,.ERRORS,409.84,$G(APPTIEN),1,,14,15)
 I $D(ERRORS) Q
 ;
 S TARGETCLINIC=$G(BLOCKANDMOVE("TARGET CLINIC"))
 S ORIGINALCLINIC=$$GET1^DIQ(409.831,$$GET1^DIQ(409.84,$G(APPTIEN),.07,"I"),.04,"I")
 S TARGETDATE=$$VALISODTTM^SDES2VALISODTTM(.ERRORS,$G(BLOCKANDMOVE("TARGET DATE TIME")),TARGETCLINIC,1,25,26)
 S TIMECLINICOPENS=$S($$GET1^DIQ(44,TARGETCLINIC,1914,"I"):$$GET1^DIQ(44,TARGETCLINIC,1914,"I"),1:8)
 S OVERBOOK=""
 S IENS44=$$GET44RECORDIENS^SDESCANAPPT2(ORIGINALCLINIC,$$GET1^DIQ(409.84,APPTIEN,.01,"I"),$$GET1^DIQ(409.84,APPTIEN,.05,"I"))
 ;
 D GETCLAVAILABLTY^SDESCLINICAVAIL(.SLOT,TARGETCLINIC,$$FMTISO^SDAMUTDT(TARGETDATE,TARGETCLINIC),$$FMTISO^SDAMUTDT(TARGETDATE,TARGETCLINIC))
 D DECODE^XLFJSON("SLOT","TARGETSLOT")
 I '$G(TARGETSLOT("ClinAvail",1,"SlotsAvail")),"abcdefghijklmnopqrstuvwxyz"'[$G(TARGETSLOT("ClinAvail",1,"SlotsAvail")) S OVERBOOK="O"
 ;
 D GETCLAVAILABLTY^SDESCLINICAVAIL(.ORIGSLOTS,ORIGINALCLINIC,$$FMTISO^SDAMUTDT($$GET1^DIQ(409.84,APPTIEN,.01,"I"),ORIGINALCLINIC),$$FMTISO^SDAMUTDT($$GET1^DIQ(409.84,APPTIEN,.02,"I"),ORIGINALCLINIC))
 D DECODE^XLFJSON("ORIGSLOTS","ORIGINATINGSLOTS")
 ;
 S CANCELAVAIL("CLINIC IEN")=ORIGINALCLINIC
 S CANCELAVAIL("START DATE TIME")=$$FMTISO^SDAMUTDT($$GET1^DIQ(409.84,APPTIEN,.01,"I"),ORIGINALCLINIC)
 S CANCELAVAIL("END DATE TIME")=$$FMTISO^SDAMUTDT($$GET1^DIQ(409.84,APPTIEN,.02,"I"),ORIGINALCLINIC)
 S CANCELAVAIL("FULL PARTIAL FLAG")="P"
 S CANCELAVAIL("REMARKS")="BLOCK AND MOVE"
 Q
 ;
BUILDAPPTARRAY(APPOINTMENT,APPTIEN,TARGETDATE,TARGETCLINIC,OVERBOOK,ORIGINALCLINIC,IENS44) ;
 N ORIGINALAPPT,PATIENS,RESIEN,CLINIEN,DFN,ARRAY298,ARRAY44003,NOTEIDX
 ;
 D GETS^DIQ(409.84,APPTIEN,"*","ZI","ORIGINALAPPT")
 S DFN=$G(ORIGINALAPPT(409.84,APPTIEN_",",.05,"I"))
 S PATIENS=$G(ORIGINALAPPT(409.84,APPTIEN_",",.01,"I"))_","_DFN_","
 D GETS^DIQ(2.98,PATIENS,"**","IE","ARRAY298","ERR")
 S RESIEN=$G(ORIGINALAPPT(409.84,APPTIEN_",",.07,"I"))
 S CLINIEN=$$GET1^DIQ(409.831,RESIEN_",",.04,"I")
 D GETS^DIQ(44.003,IENS44,"**","IE","ARRAY44003","SDMSG")
 ;
 S APPOINTMENT("START DATE TIME")=$$FMTISO^SDAMUTDT(TARGETDATE,TARGETCLINIC)
 S APPOINTMENT("END DATE TIME")=$$FMTISO^SDAMUTDT($$FMADD^XLFDT(TARGETDATE,,,$$GET1^DIQ(409.84,APPTIEN,.18,"I")),TARGETCLINIC)
 S APPOINTMENT("DFN")=$G(ORIGINALAPPT(409.84,APPTIEN_",",.05,"I"))
 S APPOINTMENT("RESOURCE IEN")=$$GETRES^SDESINPUTVALUTL(TARGETCLINIC,1)
 S APPOINTMENT("WALKIN")="N"
 S APPOINTMENT("PATIENT INDICATED DATE")=$$FMTISO^SDAMUTDT($G(ORIGINALAPPT(409.84,APPTIEN_",",.2,"I")))
 S APPOINTMENT("EXTERNAL ID")=$G(ORIGINALAPPT(409.84,APPTIEN_",",.21,"I"))
 S APPOINTMENT("REQUEST TYPE")=$E($$GET1^DIQ(409.84,APPTIEN,.22,"E"),1,1)_"|"_$P($G(ORIGINALAPPT(409.84,APPTIEN_",",.22,"I")),";",1)
 S APPOINTMENT("PROVIDER IEN")=$S(TARGETCLINIC=ORIGINALCLINIC:$G(ORIGINALAPPT(409.84,APPTIEN_",",.16,"I")),1:"")
 S APPOINTMENT("CLINIC IEN")=TARGETCLINIC
 S NOTEIDX=0
 S APPOINTMENT("NOTE")=""
 F  S NOTEIDX=$O(ORIGINALAPPT(409.84,APPTIEN_",",1,NOTEIDX)) Q:+NOTEIDX=0  D
 .S APPOINTMENT("NOTE")=APPOINTMENT("NOTE")_ORIGINALAPPT(409.84,APPTIEN_",",1,NOTEIDX,0)
 S APPOINTMENT("APPOINTMENT TYPE")=""
 S APPOINTMENT("APPOINTMENT TYPE NAME")=$$GET1^DIQ(409.1,$G(ORIGINALAPPT(409.84,APPTIEN_",",.06,"I")),.01,"E")
 S APPOINTMENT("PATIENT STATUS")=$G(ORIGINALAPPT(409.84,APPTIEN_",",.23,"I"))
 S APPOINTMENT("APPOINTMENT LENGTH")=$G(ORIGINALAPPT(409.84,APPTIEN_",",.18,"I"))
 S APPOINTMENT("SERVICE CONNECTED")="" ;looking do not see why this is being sent, doesn't update in appointment
 S APPOINTMENT("SERVICE CONNECTED PERCENTAGE")="" ; doesn't update in appointment
 I $$GET1^DIQ(409.85,$P($G(ORIGINALAPPT(409.84,APPTIEN_",",.22,"I")),";"),43.8) D
 .S APPOINTMENT("MRTC")="TRUE"
 .S APPOINTMENT("MRTC PARENT")=$$GET1^DIQ(409.85,$P($G(ORIGINALAPPT(409.84,APPTIEN_",",.22,"I")),";"),43.8)
 S APPOINTMENT("APPOINTMENT REASON")=$G(ARRAY44003(44.003,IENS44,3,"I"))
 S APPOINTMENT("PATIENT ELIGIBILITY")=$G(ARRAY44003(44.003,IENS44,30,"I"))
 S APPOINTMENT("OVERBOOK")=OVERBOOK
 S APPOINTMENT("LAB DATE TIME")=$$FMTISO^SDAMUTDT($G(ARRAY298(2.98,PATIENS,5,"I")),CLINIEN)
 S APPOINTMENT("XRAY DATE TIME")=$$FMTISO^SDAMUTDT($G(ARRAY298(2.98,PATIENS,6,"I")),CLINIEN)
 S APPOINTMENT("EKG DATE TIME")=$$FMTISO^SDAMUTDT($G(ARRAY298(2.98,PATIENS,7,"I")),CLINIEN)
 S APPOINTMENT("PURPOSE")=$G(ARRAY298(2.98,PATIENS,9,"E"))
 S APPOINTMENT("COLLATERAL")=$G(ARRAY298(2.98,PATIENS,13,"E"))
 S APPOINTMENT("SCHEDULE REQUEST TYPE")=$G(ARRAY298(2.98,PATIENS,25,"I"))
 S APPOINTMENT("NEXT AVAILABLE APPOINTMENT")=$G(ARRAY298(2.98,PATIENS,26,"I"))
 S APPOINTMENT("FOLLOWUP")=$G(ARRAY298(2.98,PATIENS,28,"E"))
 Q
VALAPPTLENGTHS(ERRORS,ORIGINALCLINIC,TARGETCLINIC,APPTIEN,TARGETDATETIME,AVAILSLOTS) ;
 N ORIGCLINVARLEN,TRGTCLINVARLEN,APPTLENGTH,TRGTCLINAPTLEN,APPTSTART
 S ORIGCLINVARLEN=$S($$GET1^DIQ(44,ORIGINALCLINIC,1913,"I")="V":1,1:0)
 S TRGTCLINVARLEN=$S($$GET1^DIQ(44,TARGETCLINIC,1913,"I")="V":1,1:0)
 S TRGTCLINAPTLEN=$$GET1^DIQ(44,TARGETCLINIC,1912,"I")
 S APPTLENGTH=$$GET1^DIQ(409.84,APPTIEN,.18,"I")
 I ORIGCLINVARLEN,TRGTCLINVARLEN!('ORIGCLINVARLEN&TRGTCLINVARLEN) D  Q
 .I APPTLENGTH#TRGTCLINAPTLEN'=0 D ERRLOG^SDES2JSON(.ERRORS,52,"Block and move appointment will not fit in the target clinic's schedule.") Q
 I APPTLENGTH'=TRGTCLINAPTLEN D ERRLOG^SDES2JSON(.ERRORS,507)
 Q