| [613] | 1 | SDAMUTDT ;BPOIFO/JFW-Scheduling Encapsulation Utilities ; 5/17/04 1:00pm
 | 
|---|
 | 2 |  ;;5.3;Scheduling;**266**;13 Aug 1993
 | 
|---|
 | 3 |  ;
 | 
|---|
 | 4 |  ;*****************************************************************
 | 
|---|
 | 5 |  ;              CHANGE LOG
 | 
|---|
 | 6 |  ;
 | 
|---|
 | 7 |  ;  DATE      PATCH       DESCRIPTION
 | 
|---|
 | 8 |  ;--------  ----------    -----------------------------------------
 | 
|---|
 | 9 |  ;1/24/06   SD*5.3*413    ROUTINE COMPLETED
 | 
|---|
 | 10 |  ;
 | 
|---|
 | 11 |  ;*****************************************************************
 | 
|---|
 | 12 |  ;
 | 
|---|
 | 13 | FMTGMT(SDFMDT) ;convert internal fileman format to extended GMT
 | 
|---|
 | 14 |  ;initialize variables
 | 
|---|
 | 15 |  ;*****************************************************************
 | 
|---|
 | 16 |  ;INPUT  SDFMDT - Fileman date/time
 | 
|---|
 | 17 |  ;OUTPUT -1 error occurred in translation
 | 
|---|
 | 18 |  ;       GMT date/time in ISO 8601 extended format (No Errors)
 | 
|---|
 | 19 |  ;*****************************************************************
 | 
|---|
 | 20 |  N SDDTM,SDGMT,SDTIME,SDOFFSET
 | 
|---|
 | 21 |  S SDDTM=$$FMTHL7^XLFDT(SDFMDT)
 | 
|---|
 | 22 |  Q:SDDTM<0 -1
 | 
|---|
 | 23 |  ;extract out date and convert to ISO 8601 extended format
 | 
|---|
 | 24 |  S SDGMT=$E(SDDTM,1,4)_"-"_$E(SDDTM,5,6)_"-"_$E(SDDTM,7,8)
 | 
|---|
 | 25 |  ;if time is included, extract and convert to ISO 8601 external format
 | 
|---|
 | 26 |  I $L(SDDTM)>8 D
 | 
|---|
 | 27 |  .S SDTIME=$E(+SDDTM,9,99),SDOFFSET=$$TZ^XLFDT()
 | 
|---|
 | 28 |  .;determine if seconds are included in time
 | 
|---|
 | 29 |  .I $L(SDTIME)<5 D
 | 
|---|
 | 30 |  ..;no seconds included in date/time
 | 
|---|
 | 31 |  ..S SDGMT=SDGMT_"T"_$E(SDDTM,9,10)_":"_$E(SDDTM,11,99)
 | 
|---|
 | 32 |  .;seconds included in date/time
 | 
|---|
 | 33 |  .E  S SDGMT=SDGMT_"T"_$E(SDTIME,1,2)_":"_$E(SDTIME,3,4)_":"_$E(SDTIME,5,6)_SDOFFSET
 | 
|---|
 | 34 |  Q SDGMT
 | 
|---|
 | 35 |  ;
 | 
|---|
 | 36 | GMTTFM(SDGMTDT) ;convert ISO 8601 extended GMT date/time to fileman format
 | 
|---|
 | 37 |  ;initialize variables
 | 
|---|
 | 38 |  ;*****************************************************************
 | 
|---|
 | 39 |  ;INPUT  SDGMTDT - ISO 8601 extended GMT date/time
 | 
|---|
 | 40 |  ;OUTPUT -1 error occurred in translation
 | 
|---|
 | 41 |  ;       FM date/time (No Errors)
 | 
|---|
 | 42 |  ;*****************************************************************
 | 
|---|
 | 43 |  N SDFM,SDTIME,SDOFFSET,SDFMDTM,X,Y,%DT
 | 
|---|
 | 44 |  ;get offset for VistA Instance
 | 
|---|
 | 45 |  S SDOFFSET=$$TZ^XLFDT()
 | 
|---|
 | 46 |  ;pattern match date(/time) for correctness
 | 
|---|
 | 47 |  Q:((SDGMTDT["T")&'(SDGMTDT?4N1"-"2N1"-"2N1"T"2N1":"2N.E)) -1
 | 
|---|
 | 48 |  Q:((SDGMTDT'["T")&'(SDGMTDT?4N1"-"2N1"-"2N)) -1
 | 
|---|
 | 49 |  ;extract out date, removing punctuation
 | 
|---|
 | 50 |  S SDFM=$E(SDGMTDT,1,4)_$E(SDGMTDT,6,7)_$E(SDGMTDT,9,10)
 | 
|---|
 | 51 |  ;set parameters to validate date/time
 | 
|---|
 | 52 |  S %DT="TXS"
 | 
|---|
 | 53 |  ;extract out time if entered, removing all punctuation except for TZ offset
 | 
|---|
 | 54 |  I SDGMTDT>10 D
 | 
|---|
 | 55 |  .S SDTIME=$P($E(SDGMTDT,12,99),$E(SDOFFSET,1,1))
 | 
|---|
 | 56 |  .;exclude time if 0's else FMTE returns previous date with .24
 | 
|---|
 | 57 |  .Q:((SDTIME["00:00")!(SDTIME["00:00:00"))
 | 
|---|
 | 58 |  .;determine if seconds are included in time
 | 
|---|
 | 59 |  .I $L(SDTIME)<6 D
 | 
|---|
 | 60 |  ..;no seconds include in date/time
 | 
|---|
 | 61 |  ..S SDFM=SDFM_$E(SDGMTDT,12,13)_$E(SDGMTDT,15,99)
 | 
|---|
 | 62 |  .;seconds included in date/time
 | 
|---|
 | 63 |  .E  S SDFM=SDFM_$E(SDTIME,1,2)_$E(SDTIME,4,5)_$E(SDTIME,7,8)_"-"_SDOFFSET
 | 
|---|
 | 64 |  ;convert date(/time) from HL7 format back to Fileman
 | 
|---|
 | 65 |  S SDFMDTM=$$HL7TFM^XLFDT(SDFM)
 | 
|---|
 | 66 |  Q:SDFMDTM<0 SDFMDTM ;error occurred in conversion
 | 
|---|
 | 67 |  ;check validity of date (including leap year check)
 | 
|---|
 | 68 |  S X=$$FMTE^XLFDT(SDFMDTM)
 | 
|---|
 | 69 |  D ^%DT
 | 
|---|
 | 70 |  Q:Y<0 -1 ;date(/time) not valid
 | 
|---|
 | 71 |  Q SDFMDTM
 | 
|---|
 | 72 |  ;
 | 
|---|
 | 73 | SDAPIERR() ; SDAPI Error Messages.
 | 
|---|
 | 74 |  ;*****************************************************************
 | 
|---|
 | 75 |  ;INPUT  N/A
 | 
|---|
 | 76 |  ;OUTPUT Extrinsic call returns error message
 | 
|---|
 | 77 |  ;*****************************************************************
 | 
|---|
 | 78 |  N SDERR S SDERR=$O(^TMP($J,"SDAMA301",""))
 | 
|---|
 | 79 |  I SDERR="" Q ""
 | 
|---|
 | 80 |  I +SDERR=101 Q "Error 101: The Appointment Database is not currently available.  Please try again later."
 | 
|---|
 | 81 |  I +SDERR=115 Q "Error 115: Appointment request contains invalid values.  Please contact National Help Desk."
 | 
|---|
 | 82 |  Q "Error 117: An error has occurred, check the RSA Error Log."
 | 
|---|
 | 83 |  ;
 | 
|---|