SDES2VALISODTTM ;ALB/BWF - SDES2 VALIDATE ISO DATE/TIMES ;JUL 28, 2023
 ;;5.3;Scheduling;**853,866**;Aug 13, 1993;Build 22
 ;;Per VHA Directive 6402, this routine should not be modified
 ;
 Q
 ;
 ; extrinsic function to validate a date using specific error codes from 409.93
 ; returns Fileman date if valid or "" if invalid
 ; DATE - Date/time in ISO Format (required)
 ; CLINIC - clinic IEN to apply clinic timezone offset (optional)
 ; REQUIRED - 1 for required - This tells the validator if this field should be required (optional - defaults to not required)
 ; MISSINGERRORID - The custom error ID for a "Missing" date. If not passed, will default to '45 - Missing date' (optional)
 ; INVALIDERRORID - The custom error ID for an "Invalid" date. If not passed, will default to '46 - Invalid date' (optional)
 ; DELERRID - Deletion error ID, when process is trying to delete a required field with '@'
 ; MISSERRTEXT - Error text to add to the returned 'MISSING' error
 ; INVALERRTEXT - Error text to add to the returned 'INVALID' error
 ; DELERRTEXT - Error text to add to the returned 'DELETE' error
 ;
VALISODTTM(ERRORS,DATETIME,CLINIC,REQUIRED,MISSINGERRID,INVALIDERRID,DELERRID,MISSERRTEXT,INVALERRTEXT,DELERRTEXT) ;
 N FMSDATE,MISSINGID,INVALIDID
 S MISSINGID=$S($G(MISSINGERRID):MISSINGERRID,$P($G(DATETIME),"T",2)'="":496,1:45)
 S INVALIDID=$S($G(INVALIDERRID):INVALIDERRID,$P($G(DATETIME),"T",2)'="":497,1:46)
 I '$G(REQUIRED),$G(DATETIME)="" Q ""
 I $G(REQUIRED),$G(DATETIME)="" D ERRLOG^SDES2JSON(.ERRORS,MISSINGID,$G(MISSERRTEXT)) Q ""
 I $G(REQUIRED),$G(DATETIME)="@" D  Q ""
 .I $G(DELERRID) D ERRLOG^SDES2JSON(.ERRORS,DELERRID,$G(DELERRTEXT)) Q
 .D ERRLOG^SDES2JSON(.ERRORS,229,$G(DELERRTEXT))
 S FMSDATE=$$ISOTFM^SDAMUTDT($G(DATETIME),$G(CLINIC))
 I FMSDATE<1 D ERRLOG^SDES2JSON(.ERRORS,INVALIDID,$G(INVALERRTEXT)) Q ""
 Q FMSDATE
 ;
 ; extrinsic function to validate a date/time range
 ; STARTDTTM (REQUIRED) - Start date or date/time in ISO format
 ; ENDDTTM   (REQUIRED) - End date or date/time in ISO format
 ; REQUIRED  (OPTIONAL) - 1 if the date range is required,
 ;                       if required start date/time and end date/time must be passed in or an error will be returned
 ; CLINIC    (OPTIONAL) - Clinic IEN to apply clinic timezone offset
 ;
VALISODATERANGE(ERRORS,STARTDTTM,ENDDTTM,REQUIRED,CLINIC) ;
 N FMSDATE,MISSINGID,INVALIDID,FMSTART,FMEND,ERRORFLAG
 I '$G(REQUIRED),('$L($G(STARTDTTM))!('$L($G(ENDDTTM)))) Q ""
 I $G(REQUIRED),'$L($G(STARTDTTM)) S ERRORFLAG=1 D ERRLOG^SDES2JSON(.ERRORS,498)
 I $G(REQUIRED),'$L($G(ENDDTTM)) S ERRORFLAG=1 D ERRLOG^SDES2JSON(.ERRORS,501)
 I $G(ERRORFLAG) Q ""
 S FMSTART=$$ISOTFM^SDAMUTDT(STARTDTTM,$G(CLINIC))
 I FMSTART<1 S ERRORFLAG=1 D ERRLOG^SDES2JSON(.ERRORS,499)
 S FMEND=$$ISOTFM^SDAMUTDT(ENDDTTM,$G(CLINIC))
 I FMEND<1 S ERRORFLAG=1 D ERRLOG^SDES2JSON(.ERRORS,502)
 I $G(ERRORFLAG) Q ""
 I FMEND<FMSTART D ERRLOG^SDES2JSON(.ERRORS,503) Q ""
 Q FMSTART_U_FMEND
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HSDES2VALISODTTM   2998     printed  Sep 23, 2025@20:31:36                                                                                                                                                                                             Page 2
SDES2VALISODTTM ;ALB/BWF - SDES2 VALIDATE ISO DATE/TIMES ;JUL 28, 2023
 +1       ;;5.3;Scheduling;**853,866**;Aug 13, 1993;Build 22
 +2       ;;Per VHA Directive 6402, this routine should not be modified
 +3       ;
 +4        QUIT 
 +5       ;
 +6       ; extrinsic function to validate a date using specific error codes from 409.93
 +7       ; returns Fileman date if valid or "" if invalid
 +8       ; DATE - Date/time in ISO Format (required)
 +9       ; CLINIC - clinic IEN to apply clinic timezone offset (optional)
 +10      ; REQUIRED - 1 for required - This tells the validator if this field should be required (optional - defaults to not required)
 +11      ; MISSINGERRORID - The custom error ID for a "Missing" date. If not passed, will default to '45 - Missing date' (optional)
 +12      ; INVALIDERRORID - The custom error ID for an "Invalid" date. If not passed, will default to '46 - Invalid date' (optional)
 +13      ; DELERRID - Deletion error ID, when process is trying to delete a required field with '@'
 +14      ; MISSERRTEXT - Error text to add to the returned 'MISSING' error
 +15      ; INVALERRTEXT - Error text to add to the returned 'INVALID' error
 +16      ; DELERRTEXT - Error text to add to the returned 'DELETE' error
 +17      ;
VALISODTTM(ERRORS,DATETIME,CLINIC,REQUIRED,MISSINGERRID,INVALIDERRID,DELERRID,MISSERRTEXT,INVALERRTEXT,DELERRTEXT) ;
 +1        NEW FMSDATE,MISSINGID,INVALIDID
 +2        SET MISSINGID=$SELECT($GET(MISSINGERRID):MISSINGERRID,$PIECE($GET(DATETIME),"T",2)'="":496,1:45)
 +3        SET INVALIDID=$SELECT($GET(INVALIDERRID):INVALIDERRID,$PIECE($GET(DATETIME),"T",2)'="":497,1:46)
 +4        IF '$GET(REQUIRED)
               IF $GET(DATETIME)=""
                   QUIT ""
 +5        IF $GET(REQUIRED)
               IF $GET(DATETIME)=""
                   DO ERRLOG^SDES2JSON(.ERRORS,MISSINGID,$GET(MISSERRTEXT))
                   QUIT ""
 +6        IF $GET(REQUIRED)
               IF $GET(DATETIME)="@"
                   Begin DoDot:1
 +7                    IF $GET(DELERRID)
                           DO ERRLOG^SDES2JSON(.ERRORS,DELERRID,$GET(DELERRTEXT))
                           QUIT 
 +8                    DO ERRLOG^SDES2JSON(.ERRORS,229,$GET(DELERRTEXT))
                   End DoDot:1
                   QUIT ""
 +9        SET FMSDATE=$$ISOTFM^SDAMUTDT($GET(DATETIME),$GET(CLINIC))
 +10       IF FMSDATE<1
               DO ERRLOG^SDES2JSON(.ERRORS,INVALIDID,$GET(INVALERRTEXT))
               QUIT ""
 +11       QUIT FMSDATE
 +12      ;
 +13      ; extrinsic function to validate a date/time range
 +14      ; STARTDTTM (REQUIRED) - Start date or date/time in ISO format
 +15      ; ENDDTTM   (REQUIRED) - End date or date/time in ISO format
 +16      ; REQUIRED  (OPTIONAL) - 1 if the date range is required,
 +17      ;                       if required start date/time and end date/time must be passed in or an error will be returned
 +18      ; CLINIC    (OPTIONAL) - Clinic IEN to apply clinic timezone offset
 +19      ;
VALISODATERANGE(ERRORS,STARTDTTM,ENDDTTM,REQUIRED,CLINIC) ;
 +1        NEW FMSDATE,MISSINGID,INVALIDID,FMSTART,FMEND,ERRORFLAG
 +2        IF '$GET(REQUIRED)
               IF ('$LENGTH($GET(STARTDTTM))!('$LENGTH($GET(ENDDTTM))))
                   QUIT ""
 +3        IF $GET(REQUIRED)
               IF '$LENGTH($GET(STARTDTTM))
                   SET ERRORFLAG=1
                   DO ERRLOG^SDES2JSON(.ERRORS,498)
 +4        IF $GET(REQUIRED)
               IF '$LENGTH($GET(ENDDTTM))
                   SET ERRORFLAG=1
                   DO ERRLOG^SDES2JSON(.ERRORS,501)
 +5        IF $GET(ERRORFLAG)
               QUIT ""
 +6        SET FMSTART=$$ISOTFM^SDAMUTDT(STARTDTTM,$GET(CLINIC))
 +7        IF FMSTART<1
               SET ERRORFLAG=1
               DO ERRLOG^SDES2JSON(.ERRORS,499)
 +8        SET FMEND=$$ISOTFM^SDAMUTDT(ENDDTTM,$GET(CLINIC))
 +9        IF FMEND<1
               SET ERRORFLAG=1
               DO ERRLOG^SDES2JSON(.ERRORS,502)
 +10       IF $GET(ERRORFLAG)
               QUIT ""
 +11       IF FMEND<FMSTART
               DO ERRLOG^SDES2JSON(.ERRORS,503)
               QUIT ""
 +12       QUIT FMSTART_U_FMEND