Production rule - Weekdays



EBNF source
weekdays = "(1)" ("(2)" "TS.day" ("(3)" "TS.startTime(4)" | "TS.startEvent(5)" "TS.startTimeRelativeEvent(6)") "-" ("(7)" "TS.endTime(8)" | "TS.endEvent(5)" "TS.endTimeRelativeEvent(6)") {"(9)" ("(3)" "TS.startTime(4)" | "TS.startEvent(5)" "TS.startTimeRelativeEvent(6)") "-" ("(7)" "TS.endTime(8)" | "TS.endEvent(5)" "TS.endTimeRelativeEvent(6)")} | "TS.day" ("(3)" "TS.startTime(4)" | "TS.startEvent(5)" "TS.startTimeRelativeEvent(6)") "-" "TS.dayTil" ("(7)" "TS.endTime(8)" | "TS.endEvent(5)" "TS.endTimeRelativeEvent(6)")) {"(10)" ("(2)" "TS.day" ("(3)" "TS.startTime(4)" | "TS.startEvent(5)" "TS.startTimeRelativeEvent(6)") "-" ("(7)" "TS.endTime(8)" | "TS.endEvent(5)" "TS.endTimeRelativeEvent(6)") {"(9)" ("(3)" "TS.startTime(4)" | "TS.startEvent(5)" "TS.startTimeRelativeEvent(6)") "-" ("(7)" "TS.endTime(8)" | "TS.endEvent(5)" "TS.endTimeRelativeEvent(6)")} | "TS.day" ("(3)" "TS.startTime(4)" | "TS.startEvent(5)" "TS.startTimeRelativeEvent(6)") "-" "TS.dayTil" ("(7)" "TS.endTime(8)" | "TS.endEvent(5)" "TS.endTimeRelativeEvent(6)"))} "(11)" ["(12)" except "TS.startDate(13)" {" " "TS.startDate(13)"}].
 
remarks = ["ParentElement.annotation.Note (14)" "."].


ReferenceData item (from coding template)Rule
(1)

If there are multiple Timesheet (i.e. multiple time periods included in the schedule), then the following algorithm is proposed:

  • first, order by TS.day
  • then, for each group of consecutive Timesheet that have the same TS.day value order by TS.startTime or TS.startEvent (whichever is present). Note: see the recommendations provided in rule (7) of the Production rule - Daily with regard to ordering Timesheets by startTime and startEvent)
  • then, for each Timesheet apply the rules described in the following lines of this table.
(2)

Use this branch when:

  • TS.dayTil does not have a value, or
  • TS.dayTil has the value of the next week day after TS.day and TS.endTime has the value '00:00' (the convention for end of day was applied in the coding).

Otherwise use the alternate branch.

(3)

If TS.startTime has a value then use this path. Otherwise, if TS.startEvent has a value, then use the alternate path.

(4)start time

Format the data contained in TS.startTime according to NOTAM syntax for this item: hhmm.

(5)start event

Decode this value as follows: 'SR' → "SR", 'SS' → "SS"

(6)rel. startIf TS.startTimeRelativeEvent has a value, then decode by replacing '-' by 'minus' and '+' by 'plus', followed by the number of minutes in mm format.
(7)

If TS.endTime has a value then use this path. Otherwise, if TS.endEvent has a value, then use the alternate path.

(8)end time

Format the data contained in TS.endTime according to NOTAM syntax for this item: hhmm.

If TS.endTime is '00:00', then the value “2359” shall be used as hhmm group in the NOTAM (the convention for end of day was applied in the coding).

(9)(10)

If there are multiple Timesheet to process, if the following conditions are met for the next Timesheet (following the ordering specified in rule (1) above):

  • both Timesheets have identical values for day and no value for dayTil (for example, "MON 09:00-11:00" is followed by "MON 15:00-17:00")
  • both Timesheets have identical values for day, the current Timesheet has no value for dayTil and the next Timesheet has as value for dayTil the next week day and endTime equal to '00:00' (the convention for end of day was applied in the coding, for example "MON 09:00-11:00" is followed by "MON 15:00- TUE 00:00", which in the NOTAM will need to appear as "MON 0900-1100 1500-2359")

then, use the return branch (9) and process only the time/event values of the next Timesheet, Otherwise, return through branch (10) and process the next Timesheet in full.

(11)

The algorithm proposed above could still result into consecutive week days in item D that have the same time periods. That's because the ordering/grouping of the Timesheet is done only by similar day/dayTil. For example, this could result into the following: "D) MON 0700-0900 1300-1400 TUE 0700-0900 1300-1400 WED 0700-0900 1300-1400 THU 0600-1500". Based on the current NOTAM practice, the first three week day/time groups should be collapsed into a single week-day range, because they have the same times: "D) MON-WED 0700-0900 1300-1400 THU 0600-1500". 

This streamlining of the resulting schedule text could be done at the end of the text generation process or directly in the production rule, with a more sophisticated algorithm. The resolution of this issue is left for the implementers.

(12)

If there are any timesheets containing TS.excluded elements with the value 'YES', denoting a schedule with exceptions, select all of them and use this path, otherwise go through the bypass path.

(13)excluded date

Use all the Timesheet that have TS.excluded='YES' at once and apply the following algorithm:

  • order these Timesheet by the calendar order of TS.startDate;
  • format each TS.startDate to show the month abbreviation followed by two digits (MMM DD), eg. "except AUG 23", according to item D NOTAM syntax. Add space (" ") between the consecutive values;
  • if two consecutive values have the same MMM value, then eliminate the repeated MMM value: for example, "except AUG 23 AUG 30" needs to be replaced with "except AUG 23 30"
(14)schedule noteAnnotations of parent object that have  propertyName='timeInterval' and purpose='REMARK'. shall be translated into free text according to the decoding rules for annotations. The resulting text shall be appended at the end of item E.