|
Drivers Daily Log (DDL) Data File
Specification
Modification History:
30 Nov 2000 - changed vehicle numbers record - frb.
01 Dec 2000 - changed miles driving record - frb.
23 Apr 2001 - changed rules records - frb.
20 Jul 2001 - added print record, driver record, and days out record - frb.
22 Jul 2001 - added logs turned in for audit record - frb.
This specification can be used freely by any software developer
who desires to import DDL data records into any software program. The most
anticipated use will be by log auditing systems that would like to import driver
duty status records in digital form as generated and stored by users of DDL. Perhaps
an industry standard data format can be formulated based on this or similar
specification.
Drivers Daily Log (DDL) stores data records as ASCII character codes in a
file containing data records for a single vehicle driver for one month. The file
name identifies the month and year of data stored. Example: 'Oct2000.LogData'
contains the data for the month October and year 2000. Experience has shown
that a month's worth of DDL data records creates a file of 30,000 bytes or less.
This sized file can be conveniently sent electronically, as attachments
to internet email or similar.
Records are delimited by trailing Carriage Return and Line Feed (ASCII 0x0d
and 0x0a) (CR/LF) character codes, and are of variable length with no
limit on record length.
The first fixed length record in the file identifies the driver by name and
by assigned alpha-numeric identification text string. DDL stores data files in
folders by drivers name. DDL further provides for 'groups of drivers' as
necessary for possible audit type work.
The following characters are illegal in a DDL data record field: "
' / | \ `
DDL uses ' ' (blank), '/' and ''' as data field delimiters.
Example of records DDL generates and stores: The fields are described below
examples.
Data example is extracted from the log files of an actual (busy over the road)
user of DDL.
0100/'JSMITH'/'John
Smith'/...................................................
20001005 00:00 02 X /VEHICLE NUMBERS/'869'/'T-83'/''/''/
20001005 00:00 14 X JSMITH
20001005 00:00 05 X ABC Trucking Inc.
20001005 00:00 06 X 123 Chestnut St, Sioux City, IA 51108
20001005 00:00 08 X 123 Chestnut St, Sioux City, IA 51108
20001005 00:00 07 X None
20001005 00:00 04 X /MILES DRIVING/565290/0/0/0/0/0/0/565685/395/0/
20001005 00:00 03 X 395
20001005 00:00 20 X 26 27 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
48 49 /DEFECTS/''//TRACTOR/'869'//TRAILER/'T83'/
20001005 08:00 18 X Being Loaded- Carlisle, PA
20001005 08:00 09 X LC 9564
20001005 08:00 19 X Start of LC 9564/ODOMETER/565290.0/'PA'/'9564'/'869'/''/1/0/
20001005 08:00 23 X /REVENUE/'Net
Revenue'/3/950.00/72.0000/''/'9564'/'869'/'PA'/565290.0/''/''/''/
20001005 08:00 23 X /REVENUE/'Trip
Advance'/5/947.90/28.8000/''/'9564'/'869'/'PA'/565290.0/''/''/''/
20001005 08:00 23 X
/REVENUE/'Maintenance'/5/950.00/13.6800/''/'9564'/'869'/'PA'/565290.0/''/''/''/
20001005 08:00 23 X
/REVENUE/'Flexible'/5/950.00/13.6800/''/'9564'/'869'/'PA'/565290.0/''/''/''/
20001005 08:45 01 N Securing Load- Carlisle, PA
20001005 09:00 01 D
20001005 09:15 01 N Fueling & Pre-Trip Inspection- Carlisle, PA
20001005 09:15 21 X /FUEL/'Carlisle-PA-AmBest
'/'9564'/565313.0/83.590/137.00/''/'00'/'PA'/'869'/1/
20001005 09:30 01 O Coffee Break- Carlisle, PA
20001005 11:30 01 D
20001005 12:30 19 X Entered Maryland/ODOMETER/565366.0/'MD'/'9564'/'869'/''/1/0/
20001005 12:45 01 O Being Loaded- Williamsport, MD
20001005 12:45 09 X LC 9563
20001005 14:00 01 N Securing Load- Williamsport, MD
20001005 14:00 23 X /REVENUE/'Net
Revenue'/3/375.00/72.0000/''/'9563'/'869'/'MD'/565382.0/''/''/''/
20001005 14:00 23 X /REVENUE/'Trip
Advance'/5/347.23/28.8000/''/'9563'/'869'/'MD'/565382.0/''/''/''/
20001005 14:00 23 X
/REVENUE/'Maintenance'/5/375.00/13.6800/''/'9563'/'869'/'MD'/565382.0/''/''/''/
20001005 14:00 23 X
/REVENUE/'Flexible'/5/375.00/13.6800/''/'9563'/'869'/'MD'/565382.0/''/''/''/
20001005 14:15 01 D
20001005 16:00 19 X Entered West
Virginia/ODOMETER/565486.0/'WV'/'9564'/'869'/''/1/0/
20001005 16:45 01 O Coffee Break- Mount Morris, PA
20001005 16:45 19 X Entered
Pennsylvania/ODOMETER/565530.0/'PA'/'9564'/'869'/''/1/0/
20001005 18:30 01 D
20001005 19:45 19 X Entered West
Virginia/ODOMETER/565585.0/'WV'/'9564'/'869'/''/1/0/
20001005 20:00 19 X Entered Ohio/ODOMETER/565598.0/'OH'/'9564'/'869'/''/1/0/
20001005 20:30 01 O Meal Break- Old Washington, OH
20001005 22:00 01 D
20001005 23:00 01 S Parral, OH
Data Fields:
Date:
A fixed length (8 character) data field that identifies the year, month, and day
of the record.
Example: 20001005 = year 2000, month 10 (October), and day 5.
Separator: 1 blank character.
Time:
The time assigned to the data record in military format - hours and minutes
where 00:00 is midnight and 12:00 is noon and 23:59 is one minute before
midnight.
Example: 19:45 = 7:45 PM
Separator: 1 blank character.
DataType:
Two numeric characters which define the different data types that DLL uses:
DDL uses the following definitions as of 28 Nov 2000. Others might be added as
needed.
CHANGE_OF_DUTY_STATUS = 1, // The primary duty status changed to
VEHICLE_NUMBERS = 2,
TOTAL_MILES_VEHICLE_TODAY = 3,
TOTAL_MILES_DRIVING_TODAY = 4,
NAME_OF_CARRIER = 5,
MAIN_OFFICE_ADDRESS = 6,
NAME_OF_CO_DRIVER = 7,
HOME_TERMINAL_ADDRESS = 8,
MANIFEST_NUMBER = 9,
HAZARDOUS_LOAD = 10,
COMMENT = 11,
DATA_RECORD_VIOLATION_PRESENT = 12,
DATA_RECORD_VIOLATION_FUTURE = 13,
DRIVER_ID_NUMBER = 14,
BRAKE_CHECK = 15, // v1.33 - 13 Nov 1999 - Canada
LOAD_CHECK = 16, // v2.00 - 18 Dec 1999
//
// Rules changed 'on the fly'. (OBSOLETE as of 23 Apr 2001 - see new records
below)
//
RULES_SWITCH_ON_THE_FLY = 17, // v2.00 - USA to CANADA or CANADA to USA
COMMENT_WITH_TICK = 18, // v2.00 - 13 Feb 2000
//
// A general odometer/state/trip/spare record
//
ODOMETER_RECORD = 19, //v2.00 - 20 Feb 2000
//
// DDVIR1 data record - drivers daily vehicle inspection report
//
DDVIR1_RECORD = 20, //v2.00 - 27 Feb 2000
//
// Fuel record
//
FUEL_RECORD = 21, // v2.02 - 14 Apr 2000
//
// Expense record
//
EXPENSE_RECORD = 22, // v2.02 - 14 Apr 2000
//
// Revenue record
//
REVENUE_RECORD = 23 // v2.05 - 26 May 2000
//
// New improved rules switch - v2.32 - 23 Apr 2001
//
RULES_RECORD = 24 // on the fly, and default
// DutyStatus
// 'F' - users rule switch 'on the fly'
// 'W' - default brought fwd from prev month
// 'R' - user changed default rule.
//
// Record to keep track of printed log days.
//
PRINT_RECORD = 25,
//
// Drivers Info Record - 18 May 2001.
// Used for new data file header replacement - TBD.
//
DRIVER_RECORD = 26,
//
// Days Out i.e. not at home record - 04 Jul 2001.
// Used for per-diem calculations.
//
DAYS_OUT_RECORD = 27,
//
// Audit feature - a record that records the log sheets turned in
// by a driver - first and last days inclusive.
// Used to detect 'missing logs' for violation report.
//
LOGS_AUDIT_RECORD = 28
Separator: 1 blank character.
DutyStatus:
'X' not needed or not used for DataType.
if DataType = CHANGE_OF_DUTY_STATUS (1)
'O' = OFF_DUTY.
'S' = SLEEPER_BERTH.
'D' = DRIVING.
'N' = ON_DUTY_NOT_DRIVING.
//
// Obsolete as of 23 Apr 2001 - see new definitions below
if DataType = RULES_SWITCH_ON_THE_FLY (17)
'C' = CHANGE_RULES_TO_CANADA:
'U' = CHANGE_RULES_TO_USA:
'I' = CHANGE_RULES_TO_USA_INTRASTATE:
'P' = CHANGE_RULES_TO_CANADA_INTRAPROVINCE:
if DataType = RULES_RECORD (24)
// DutyStatus
'F' - users rule switch 'on the fly'
'W' - default brought fwd from prev month
'R' - user changed default rule.
Separator:1 blank character.
MemoField:
A variable length (no limit) field which ends in the CR/LF which defines
the end of the whole data record.
If DataType = CHANGE_OF_DUTY_STATUS (1) this describes duty status
changed location (city and state/province).
If DataType = RULES_SWITCH_ON_THE_FLY (17) this describes border crossing
where rules changed (city and state/province).
Other DataTypes require other information and may require SubFields
SubFields (to MemoField):
SubFields are generally defined as data between '/' separators.
Examples:
/'Carlise PA'/ A text string subfield.
/869.0/ A numeric string subfield.
SubFields are required for DataTypes:
VEHICLE_NUMBERS
Example: 20001005 00:00 02 X /VEHICLE NUMBERS/'869'/'T-83'/''/''/
VehicleNumbers1;
VehicleNumbers2;
VehicleNumbers3;
VehicleNumbers4;
TOTAL_MILES_VEHICLE_TODAY
Example: 20001005 00:00 03 X 395
VehicleMiles;
TOTAL_MILES_DRIVING_TODAY
Example: 20001005 00:00 04 X /MILES DRIVING/565290/0/0/0/0/0/0/565685/395/0/
DDL allows for the following combinations of data in this
record.
1. Miles Driving alone i.e. no odometer readings.
2. Miles Driving combined with odometer readings for start
and end of log day.
3. No. 2 with start and stop 'splits' during log day.
DDL further derives miles driving from ODOMETER_RECORD
records if user elects.
Odometer Start of
Day; Optional
Odometer End first split; Optional
Odometer Start second split; Optional
Odometer End second split; Optional
Odometer Start third split; Optional
Odometer End third split; Optional
Odometer Start last split; Optional
Odometer End of Day;
Optional
Miles Driving Log Day;
Direct input, or derived from 'splits', or derived from ODOMETER_RECORD records.
bUseOdometerRecords
Displays and uses ODOMETER_RECORDS if any for Miles Driving Log Day.
ODOMETER_RECORD
Example: 20001005 16:45 19 X Entered
Pennsylvania/ODOMETER/565530.0/'PA'/'9564'/'869'/''/1/0/
Memo
Odometer Signature "/ODOMETER/".
OdometerReading
StateOrProvince;
TripNumber;
TruckId;
Custom; // Custom field
nMilesOrKilometers
// 0 undefined
// 1 Miles
// 2 Kilometers
bDoNOTUsePreviousOdometerRecord;
DDVIR1_RECORD - Drivers Daily Vehicle Inspection Report
This SubField needs to redesigned to more meaningful format. Currently it
indicates the DDL internal 'ids' of the safety times that have 'checks' as
entered by the user. 22 Safety items are provided in the DDL DDVIR. DDL's
DDVIR is the minimum required by FMCSR 396.11 - Driver Vehicle Inspection
Reports
20001005 00:00 20 X 26 27 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
48 49 /DEFECTS/''//TRACTOR/'869'//TRAILER/'T83'/
Defects Signature "/DEFECTS/"
Defects;
Tractor Signature "/TRACTOR/"
TractorId;
Trailer Signature "/TRAILER/"
TrailerIds;
FUEL_RECORD
Example: 20001005 09:15 21 X /FUEL/'Carlisle-PA-AmBest'/'9564'/565313.0/83.590/137.00/''/'00'/'PA'/'869'/1/
Fuel Signature "/FUEL/"
TruckStop;
TripNumber;
HubReading and HubReadingPrevious;
// Check for a 'forced hub reading
and format
// /121000.0P120000.0/
UnitsFuel;
CostTotal;
FuelComment;
bKilometersFuelRecord and bLitersFuelRecord);
StateOrProvinceFuel;
TruckIdFuel;
bFuelTaxable;
EXPENSE_RECORD
Example: 20001005 14:00 22 X
/EXPENSE/'Tolls'/3/375.00/72.0000/''/'9563'/'869'/'MD'/565382.0/''/1/''/
Expense Signature "/EXPENSE/";
ExpenseCatagory; //
User defined.
Amount;
Notes;
TripNumber;
TruckId;
StateOrProvince;
OdometerReading;
Custom; // Custom field
bReimbursable;
// For settlement sheet
Spare2; // Future
REVENUE_RECORD
Example: 20001005 14:00 23 X /REVENUE/'Net
Revenue'/3/375.00/72.0000/''/'9563'/'869'/'MD'/565382.0/''/''/''/
Revenue Signature "/REVENUE/";
RevenueCatagory;
// User defined.
RevenueType;
REVENUE_TYPE_NOT_DEFINED = 0,
REVENUE_TYPE_FIXED_AMOUNT = 1, //
Load/Unload pay, Tarp pay
REVENUE_TYPE_RATE_PER_MILE = 2, //
Requires miles as input
REVENUE_TYPE_PERCENT_GROSS = 3, //
Requires gross freight charge
REVENUE_TYPE_ADVANCE = 4, // Not a
revenue per se but needed.
REVENUE_TYPE_ADVANCE_PERCENT_GROSS =
5 // Advance as a percent of gross
MilesOrGross;sBuffer += s;
Factor; // Used for percent revenue types.
Notes;
TripNumber;
TruckId;
StateOrProvince;
OdometerReading;
Custom; // Custom field
Spare1; // Future
Spare2; // Future
RULES_RECORD
new 23 Apr 2001 replaces RULES_SWITCH_ON_THE_FLY
'DutyStatus' fields:
'F' - users rule switch 'on the fly'
'W' - default brought fwd from prev month
'R' - user changed default rule.
Example: 20001005 14:00 24 F /USA/10.0/0.0/15.0/70.0/8.0/0/
20001005 14:00 24 F
/AK/15.0/0.0/20.0/80.0/8.0/
20001005 14:00 24 F
/CAN/13.0/0.0/15.0/60.0/7.0/70.0/8.0/120.0/14.0/0/
USA and States AK, CA, FL, TX, WA
Signature;
//"/USA/" Identifies the rule
Hours Driving Rule; // The number hours for driving hours
rule
Hours Adverse Rule; // Additional hours for adverse
conditions if activated
// 0.0 if adverse rule is not activated
// usually 2.0 hours - AK is unlimited
Hours On Duty Rule; // The number hours for on duty hours
rule
Hours for Hours of Service Rule; // Usually 60 or
70
Days for Hours of Service Rule; // Always
either 6 or 7 days
Rule Specific; // USA is flag for
resetting HOS hours with 24 hours off duty
// AK is flag for resetting HOS hours with 24 hours off duty
// CA is flag to indicate 'Agricultural' rule - 112hrs/8days
CAN and Provinces AB, SK, YT, NT
Signature;
//"/CAN/" Identifies the rule also "/AB/"
"/SK/" "/YT/" "/NT"
Hours Driving Rule; // The number hours for driving hours
rule
Hours Adverse Rule; // Additional hours for adverse
conditions if activated
// 0.0 if adverse rule is not activated
// 2.0 hours if activated
Hours On Duty Rule; // The number hours for on duty hours
rule
Hours for Hours of 7 Day Rule; // Always 60 or 70
hours
Days for Hours of 7 Day Rule; // either 7
if activated or 0 if not activated
Hours for Hours of 8 Day Rule; // Always 70 or 80
hours
Days for Hours of 8 Day Rule; // either 8
if activated or 0 if not activated
Hours for Hours of 14 Day Rule; // Always 120 hours
Days for Hours of 14 Day Rule; // either 14 if
activated or 0 if not activated
Rule Specific; // Indicates
120hr/14day rule 'interpretation of 24 hours off duty
// requirement. 0,1,2,3
Some notes on the 120 Hour 14 Day rule:
There are different interpretations of a requirement
on this rule that states:
"A driver using the 120Hr/14Day rule may
not, during the period of 14 days, accumulate more than 75 hours of on-duty time
without taking a minimum of 24 consecutive hours of off-duty time."
DDL implements four interpretations on this rule:
0. "24 hrs Off Duty after some hrs worked
but before 75 hrs worked."
This interpretation requires that some hours of work
is required to be accumulated before taking the 24+ Hours Off duty but before 75
hours of work is accumulated. Example: work 8 hours and take 24+ hours off duty
and then work the remainder of the 120 hours in 14 days.
1. "24hrs Off Duty required between 50 to
70hrs worked - Quebec"
This is the most stringent and requires that the 24+
hours Off Duty must fall between 50 and 70 accumulated hours of work. DDL
interprets that the 24 hours Off Duty must start when accumulated hours worked
falls between 50 and 70 hours. Quebec and some other provinces use this
interpretation. Check with your DOT inspector for guidance.
2. "Any 24 hrs Off Duty before 75 hrs
worked."
This interpretation requires that any 24+ hours off
duty before the 75 hours of work accumulated is sufficient. This covers the case
where a driver has 24 or more hours Off Duty at the start of a 14 day
‘window’, i.e. before the first hour is worked during the 14 day
‘window’.
3. "Require 24 hrs Off Duty before each 75
hrs worked."
This interpretation requires a period of
24+ consecutive hours off-duty must be taken before the driver reaches EACH 75th
hour of on-duty time. Stated another way: A driver may not accumulate more than
75 hours of on-duty time without taking 24+ hours of off duty time. This
interpretation is used in Western Canada.
PRINT_RECORD Record to keep track of printed log
days.
Example: 20010601 00:00 25 X /PRINT/'20020612 12:55'/1/0/
Print Record Signature "/PRINT/";
Date and Time last printed;
Print Count; // Number
times log sheet has been printed.
Changed since last print; // If log sheet has
been changed since printed.
DRIVER_RECORD
First Record in each log file to identify vehicle driver.
Example: 20010601 00:00 26 X /DRIVER/'I. M. Sample Driver'/'99998'/
Driver Record Signature "/DRIVER/";
Driver Name;
Driver ID;
DAYS_OUT_RECORD
A Record to record leave/arrive home for 'days out' calculations.
Example: 20010601 00:00 27 X /DAYS OUT/1/'Leave on Trip'/
Days Out Record Signature "/DAYS OUT/";
Leave or Arrive Code;
// 1 = Leave Home 2 = Arrive Home
Notes;
LOGS_AUDIT_RECORD A Record to record logs turned in for audit.
Example:20000725 00:00 28 X /LOGS AUDIT/'20000704 00:00'/'20000725 00:00'/'Test
Note'/
Logs Audit Record Signature "/LOGS AUDIT/";
Date First Log;
Date Last Log;
Notes;
|