eFJ Format Description
Overview
An electronic Flight Journal (eFJ) is a simple text file within which your flying records are stored in an intuitive non-tabular form. If you ponder for a moment how you might efficiently record your flying records in a pocket diary, you will likely come up with a paper based version of the scheme. It is a useful, human readable, format in and of itself, plus, using this parser, it is easy to generate other formats, including FCL.050 compliant logbooks — I have provided a tool (with an online version for those who prefer) that includes the ability to do just this.
Since an eFJ is just a text file, it can be maintained with any of the myriad text editors that are available on each and every platform. There is zero probability that the file will become unusable in the future as a result of a tech company losing interest in maintaining a particular bit of software.
A minimal entry for 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
This should hopefully be pretty self-explanatory, with the exception of the
n:18
flag, which means that 18 minutes of the flight occurred in regulatory
night time, and the m
which means that the Captain was operating as Pilot
Monitoring and should not therefore log the landing.
It is straightforward to enter this data manually, and there is assistance for
this in the form of short forms, such as that the next day in a sequence can be
represented by a +
, and functionality of the above mentioned tool, that
includes expansion of these short forms and night flying calculations. For
easyJet pilots there is also a tool (again
with an online version) that can extract the
majority of this data from a downloaded AIMS roster.
Top Level Structure
Blank lines and lines starting with #
are ignored to allow spacing and
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 and type separated by a colon:
G-ABCD:A320
These may be any combination of letters, numbers or hyphens.
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
and/or put
, 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 none of these flags are used and the entire flight was operated under a
p2
flag, no landing will be logged.
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. If an ld
flag is used when the flight
took place entirely at night, one day landing will still be recorded.
To specify that you were not involved in the landing, use either ld:0
,
ln:0
or m
as you see fit.
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 # P2: No landing to be recorded
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
EMA/FNC 1000/1300 ld:0 # Zero landings for some reason
Aircraft class overrides
Whether a flight is single-pilot, single-engine; single-pilot, multi-engine; or
multi-crew will usually be inferred from the type of aircraft being flown. In
very rare cases, this might need to be over-ridden on a sector by sector basis,
in which case the flags spse
, spme
or mc
respectively can be used.
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.