eFJ Schema Description ====================== Overview -------- An electronic Flight Journal (eFJ) file is a text file within which your flying records are stored using an intuitive, journal-like, schema. As an example, a couple of days of flying by a Captain looks like this: :: 2024-02-04 G-EZBY:A319 BRS/GLA 0702/0818 n:18 m GLA/BHX 0848/1037 # Diversion due weather BHX/BRS 1300/1341 2024-02-05 G-UZHI:A320 BRS/FNC 0708/1045 n:6 FNC/BRS 1127/1451 m Top Level Structure ------------------- Blank lines and lines starting with ``#`` are ignored to allow spacing and full line comments as desired. Otherwise, each line must be one of a: * Date * Duty * Aircraft * Crew * Sector To minimise typing, context carries forwards — Dates and Aircraft apply to all Duties and Sectors until replaced, and there are short forms for Dates and Sectors where information is inferred from previous entries. A lot of information is only specified in more uncommon cases; the aim is to make the recording of common things easy and the recording of less common things possible. Date ---- A Date is either an iso format date: :: 2024-01-23 or a short form consisting of one or more + characters: :: ++ In the latter case, the date is moved on one day for each ``+``, so the example expands to ``2024-01-25`` — a full date must have been specified before this short form is used. Duty ---- Recording of duties is optional. It allows for tracking of FTL cumulative totals, but is not mandated by FCL.050. A duty consists of two UTC times, the beginning and end of the duty, each consisting of four digits, separated by a forward slash, followed by zero or more flags, followed by an optional comment preceded by a ``#`` character. For example: :: 0500/1100 r:30 # ESBY The only flag currently specified is ``r``. On its own, it means do not include the duty time in cumulative FTL duty limit calculations. If followed by a colon and an integer, as shown above, the integer is the number of minutes to not include. In the above example, the duty would contribute 5 hours 30 minutes to cumulative duty calculations. The main reason for this flag is an FTL clause regarding early standby duties that do not result in a call out; any time spent on such a standby that occurs in the period 22:00 to 08:00 local time in the crew member's acclimatised timezone only counts half towards cumulative duty totals. It is not possible to infer the correct timezone from the available data, so a manual correction is required. It can also be used to correct for High Contactable time on duty if you wish to record these as they do not count towards cumulative duty at all. Aircraft -------- Registration, type and class, separated by colons: :: G-ABCD:A320:mc Registration and type may be any combination of letters, numbers or hyphens. Class can be ``mc`` (multi-crew), ``spse`` (single pilot, single engine) or ``spme`` (single pilot, multi-engine). The class can be omitted: :: G-ABCD:A320 In this case, the parser will use the value of the class that was last associated with the type. If a class has *not* previously been associated with the type, the class will be the empty string. In general this means that the class will be recorded on the first occasion that a new aircraft type is flown, and thereafter the second form will be used. If a class is flown both as single pilot and multi-crew at different times, the first form can be used to toggle between them. Crew ---- A list of crew in the form **role : name**, separated by commas, with the entire group enclosed in curly braces. Only the role ``CP`` has meaning to the parser -- other roles such as ``FO``, ``PU`` and ``FA`` may have meaning to report generating software that utilises this parser. Multiple entries can have the same role. For example: :: { CP:Bloggs Joe, PU:Jones, FA:McDonald, FA: Smith } An empty set of braces can be used if you want to prevent previous crews being carried forward: :: { } Sector ------ Origin and destination airport (without spaces — use an underscore if necessary), separated by a forward slash, followed by two UTC times, each consisting of four digits, again separated by a forward slash, followed by zero of more flags, then an optional comment preceded by a ``#`` character. For example: :: BRS/BFS 1000/1100 p1s # Bird strike Except for the first sector being processed, the origin and/or destination airport may be omitted. If the origin is omitted, the value of the previous destination is used, and vice versa. For example: :: BRS/BFS 1000/1100 p1s # Bird strike / 1200/1300 p2 is equivalent to: :: BRS/BFS 1000/1100 p1s # Bird strike BFS/BRS 1200/1300 p2 Night flag ~~~~~~~~~~~ An ``n`` flag indicates that the whole flight took place at night. If only part of the flight took place at night, add a colon followed by an integer, where the integer is the number of minutes to consider as night flying, e.g. ``n:30`` would mean 30 minutes of the flight were night flying and the rest was day. If only part of a flight took place at night, it is difficult to infer whether the landing was during the day or night part. Use an ``ln`` flag to indicate that it was at night, otherwise it is assumed to have been during the day. For example: :: BRS/SSH 1600/2000 n:120 ln / 2100/0100 n Role flags ~~~~~~~~~~ The possible role flags are ``p1s``, ``p2``, ``put``, ``p0`` and ``ins``. Each of these may optionally be followed by a colon and an integer to specify the number of minutes of the flight that were operated in that role. A role flag without a colon or integer is equivalent to one with the colon and an integer representing the entire duration of the flight, e.g. for a 60 minute flight, ``p1s`` is equivalent to ``p1s:60``. The ``p0`` flag is included to indicate "other flying" such as observer or spo -- an additional flag can be used to indicate the nature of the flying, and this will be included in the extra_flags field of the sector to enable specialised processing. Any minutes not assigned as ``p1s``, ``p2``, ``put`` and/or ``p0``, are assumed to be operated as p1, so Captains just need to omit these flags. The ``ins`` flag is for recording that you were operating as an instructor. Examples: :: BRS/CDG 1600/1700 # operating as p1 throughout the flight BRS/CDG 1600/1700 p1s # operating as p1s throughout the flight BRS/CDG 1600/1700 p2:30 p1s:30 # operating as p1s for half the flight BRS/CDG 1600/1700 ins # operating as instructor BRS/CDG 1600/1700 p0 spo # operating as systems panel operator Flight rule flag ~~~~~~~~~~~~~~~~ Use a ``v`` flag to record that the flight was operated under visual flight rules. If omitted, flight under instrument flight rules is assumed. :: BRS/BRS 1000/1100 v If only part of the flight was operated under visual flight rules, add a colon and the integer value of VFR minutes. For example if you cancelled IFR after 30 minutes, the above sector would be written: :: BRS/BRS 1000/1100 v:30 Landing overrides ~~~~~~~~~~~~~~~~~ The landing override flags are ``m`` for pilot monitoring (i.e. do not log the landing as not pilot flying), ``ld`` for a day landing and ``ln`` for a night landing. To specify multiple landings use a colon followed by an integer, i.e. ``ld:3`` means three day landings. ``ld`` is equivalent to ``ld:1`` and ``ln`` is equivalent to ``ln:1``. Both flags may be specified. ``ld:2 ln`` means two day landings and one night landing. If the ``m`` flag is present no landing will be logged, regardless of any ``ld`` or ``ln`` flags that may be present. Otherwise, if none of the flags are used, a single day landing is assumed if a flight took place entirely in daytime and a single night landing is assumed if a flight took place entirely at night. If only part of the flight took place at night, a day landing is assumed. Thus an ``ln`` flag must be used if part of a flight took place at night and the landing was a night landing. No check is made for reasonableness, and no account is taken of pilot role. Examples: :: EMA/EMA 1000/1100 # 1 day landing assumed EMA/EMA 1000/1100 m # PM: No landing to be recorded EMA/EMA 1000/1100 p2 # 1 day landing assumed EMA/EMA 1000/1100 p2 m # No landing recorded (usually need m with p2) EMA/EMA 2200/2300 n # 1 night landing assumed EMA/FNC 0600/0900 n:60 # 1 day landing assumed FNC/EMA 1800/2100 n:120 ln # 1 night landing (ln must be specified) EMA/EMA 1000/1100 put ld:5 # 5 training circuits EMA/EMA 2100/2300 n:60 ld:5 ln:4 # 5 day circuits then 4 night circuits EMA/EMA 1000/1300 ins ld:10 # 10 day landings as instructor FNC/EMA 1800/2100 n:120 ln m # No landing to be recorded (m overrides ln) Unknown flags ~~~~~~~~~~~~~ Any flags that are not processed by the parser can be found in the ``extra flags`` field of the Sector object. This is to allow flags that may be meaningful to a tool using the parser but not to the parser itself to be passed on.