<?xml version='1.0' encoding='UTF-8' standalone='no' ?>
<!DOCTYPE ReportDefinition SYSTEM "reports.dtd" >

<!-- 
  =======================================================================================
  Project: OpenGTS - Open GPS Tracking System
  URL    : http://www.opengts.org
  File   : report.xml
  =======================================================================================
  Note: 
  - The format of this XML file is subject to change.
  - This file is parsed by class "org.opengts.war.tools.ReportFactory".
  - The following tags can contain displayable text:
      MenuDescrption, Title, Subtitle, Column, ReportType
    The text described these tags can be localized by formatting the text as in the following example:
      <Title i18n="Reports.sampleTitle">This is a sample title</Title>
    Where "Report.sampleTitle" is the localization lookup key used to find the text value for 
    current Locale in the file "LocalStrings_XX.properties".   The text "This is a sample title"
    above is the default text value used if no Locale value is found.  The location where the
    "LocalStrings_XX.properties" file should be located is defined by the "i18nPackage" attribute
    on the 'ReportDefinition' tag.
  =======================================================================================
  Change History:
   2008/03/28  Martin D. Flynn
      - Changed "Limit" tag "SelectionLimit"
      - Added new constraint tag "ReportLimit".
   2009/01/01  Martin D. Flynn
      - Added degree 'heading' format options.
      - Initialized for 'gts' enterprise version
   2009/05/01  Martin D. Flynn
      - Included additional report definitions
   2009/11/01  Martin D. Flynn
      - Added "cssFile" attribute to "DefaultLayout" and "LayoutStyle" tags.
      - Added "Properties" tag (used for 'ifTrue'/'ifFalse' column inclusion)
      - Added "Options" tag to Report definitions.
   2009/06/17  Martin D. Flynn
      - Added Fleet Detail reports
   2010/07/17  Martin D. Flynn
      - Fixed i18n issue with strings "ReportsXML.fuelSummary.title", "ReportsXML.fuelSummary.subtitle", etc.
   2010/09/09  Martin D. Flynn
      - Added optional Antx daily reports
   2011/03/08  Martin D. Flynn
      - Added Geozone 'visit' count to Geozone report (see "columnGeozoneVisitCount")
   2011/06/16  Martin D. Flynn
      - Added TripReport "tripStartStopOnly" property
   2013/11/27  Martin D. Flynn
      - Added EventIdle report
  =======================================================================================
 -->

<ReportDefinition i18nPackage="org.opengts.war.report">
   <!-- Properties: "ReportDefinition." -->

   <!-- Report Properties =====================================================================
    === Currently these property definitions are only used for Column inclusion/exclusion
    === within specific reports.  "ifTrue" and "ifFalse" are new attributes on the "Column" tag
    === for a report.  To conditionally include a column, an 'ifTrue="propertyKey"' attribute
    === can be specified, in the case of 'ifTrue', if the property specified below is 'true', 
    === the column will be included, otherwise it will be omittted.  Conversly for 'ifFalse',if
    === the property is false, it will be included, otherwise it will be omitted.
    === These properties can be overridden in a runtime configuration file (ie. '.conf' file) 
    === by specifying "ReportDefinition." before the property name.  For example to override
    === the "columnLatLon" property, you could add the following definition to one of the loaded 
    === runtime config files: IE.
    ===    ReportDefinition.columnIndexMapLink=true
    ===    ReportDefinition.columnLatLon=false
    ===    ReportDefinition.TripReport.showFuelTotal=true
    ===    ReportDefinition.DeviceFaultCodes.columnServiceDist0=false
    === Important Note:
    ===  - These properties may only be overridden in the runtime config (".conf") files!
    ===    They cannot be overridden using Domain defined "Include" properties.
    -->
   <Properties>
      <!-- column properties -->
      <Property key="columnIndexMapLink"                     >false</Property>
      <Property key="columnDeviceIDAdmin"                    >false</Property>
      <Property key="columnPushpin"                          >false</Property>
      <Property key="columnLatLon"                           >true</Property>
      <Property key="columnBattery"                          >true</Property>
      <Property key="columnInputState8"                      >true</Property>
      <Property key="columnInputState16"                     >false</Property>
      <Property key="columnSpeedLimit"                       >false</Property>
      <Property key="columnOdometer"                         >true</Property>
      <Property key="columnReportDistance"                   >false</Property>
      <Property key="columnFuelUsage"                        >false</Property>
      <Property key="columnFuelEconomy"                      >false</Property>
      <Property key="columnGeozoneDesc"                      >false</Property>
      <Property key="columnDevicePhone"                      >false</Property>
      <Property key="columnDriverMessage"                    >false</Property>
      <Property key="columnAttachURL"                        >false</Property>
      <Property key="columnFaultCodes"                       >true</Property>
      <Property key="columnServiceDist0"                     >true</Property>
      <Property key="columnServiceDist1"                     >false</Property>
      <Property key="columnServiceNotes"                     >true</Property>
      <Property key="columnSampleCollection"                 >false</Property>
      <Property key="columnTripWorkDistance"                 >false</Property>
      <Property key="columnTripWorkElapsed"                  >false</Property>
      <Property key="columnOdomDelta"                        >false</Property>
      <Property key="columnCreateDateTime"                   >false</Property>
      <!-- option properties -->
      <Property key="optionTripStartType_default"            >false</Property>
      <Property key="optionTripStartType_ignition"           >true</Property>
      <Property key="optionTripStartType_startstop"          >true</Property>
      <Property key="optionTripStartType_motion"             >true</Property>
      <Property key="optionSummary_waymark0"                 >true</Property>
      <Property key="optionSummary_waymark1"                 >false</Property>
      <!--- GeozoneReport: specific properties -->
      <Property key="columnGeozoneVisitCount"                >true</Property>
      <Property key="columnGeozoneCorridorID"                >false</Property>
      <Property key="columnGeozoneFuelDelta"                 >false</Property>
      <Property key="columnGeozoneOdomDelta"                 >false</Property>
      <!--- FleetMotion: specific properties -->
      <Property key="FleetMotion.tabulateByWorkHours"        >false</Property>
      <Property key="FleetMotion.WorkHours.sun"              >06:00-18:00</Property>
      <Property key="FleetMotion.WorkHours.mon"              >06:00-18:00</Property>
      <Property key="FleetMotion.WorkHours.tue"              >06:00-18:00</Property>
      <Property key="FleetMotion.WorkHours.wed"              >06:00-18:00</Property>
      <Property key="FleetMotion.WorkHours.thu"              >06:00-18:00</Property>
      <Property key="FleetMotion.WorkHours.fri"              >06:00-18:00</Property>
      <Property key="FleetMotion.WorkHours.sat"              ></Property>
      <!--- MotionSummary: specific properties -->
      <Property key="MotionSummary.tabulateByWorkHours"      >false</Property>
      <Property key="MotionSummary.WorkHours.sun"            >06:00-18:00</Property>
      <Property key="MotionSummary.WorkHours.mon"            >06:00-18:00</Property>
      <Property key="MotionSummary.WorkHours.tue"            >06:00-18:00</Property>
      <Property key="MotionSummary.WorkHours.wed"            >06:00-18:00</Property>
      <Property key="MotionSummary.WorkHours.thu"            >06:00-18:00</Property>
      <Property key="MotionSummary.WorkHours.fri"            >06:00-18:00</Property>
      <Property key="MotionSummary.WorkHours.sat"            ></Property>
      <!--- TripReport specific properties -->
      <Property key="TripReport.SelectionLimit"              >9002</Property>
      <Property key="TripReport.ReportLimit"                 >6002</Property>
      <Property key="TripReport.showIdleElapsed"             >false</Property>
      <Property key="TripReport.showFuelTotal"               >false</Property>
      <Property key="TripReport.showFuelTrip"                >true</Property>
      <Property key="TripReport.showFuelTripCost"            >false</Property>
      <Property key="TripReport.showFuelEconomy"             >true</Property>
      <Property key="TripReport.estimateFuelTotal"           >false</Property>
      <Property key="TripReport.kilometersPerLiter"          >0.0</Property>  <!-- 20mpg: mpg * 0.425 = 8.5 km/L -->
      <Property key="TripReport.tripStartStopOnly"           >false</Property>
      <Property key="TripReport.showSpeedingDuration"        >false</Property>
      <Property key="TripReport.speedingThresholdKPH"        >0.0</Property>  <!-- device=DeviceLimit, anylimit=AnyLimit -->
      <Property key="TripReport.minimumSpeedingDuration"     >0</Property>
      <Property key="TripReport.tripStopLookAheadSeconds"    >0</Property>    <!-- EXPERIMENTAL - leave as '0' -->
      <Property key="TripReport.showFuelEconomyType"         >false</Property> 
      <Property key="TripReport.showFuelRemain"              >false</Property> 
      <Property key="TripReport.showFuelRefill"              >false</Property> 
      <Property key="TripReport.showDriver"                  >false</Property>
      <!-- Event Detail OBD specific properties -->
      <Property key="EventDetailOBD.statusDesc"              >true</Property>
      <Property key="EventDetailOBD.geoPoint"                >true</Property>
      <Property key="EventDetailOBD.address"                 >true</Property>
      <Property key="EventDetailOBD.geozoneDesc"             >true</Property>
      <Property key="EventDetailOBD.speedH"                  >true</Property>
      <Property key="EventDetailOBD.speedLimit"              >false</Property>
      <Property key="EventDetailOBD.altitude"                >true</Property>
      <Property key="EventDetailOBD.odometer"                >true</Property>
      <Property key="EventDetailOBD.fuelLevel"               >true</Property>
      <Property key="EventDetailOBD.fuelEconomy"             >true</Property>
      <Property key="EventDetailOBD.fuelTotal"               >true</Property>
      <Property key="EventDetailOBD.fuelIdle"                >true</Property>
      <Property key="EventDetailOBD.fuelPressure"            >true</Property>
      <Property key="EventDetailOBD.fuelRate"                >true</Property>
      <Property key="EventDetailOBD.engineRpm"               >true</Property>
      <Property key="EventDetailOBD.engineHours"             >true</Property>
      <Property key="EventDetailOBD.engineLoad"              >true</Property>
      <Property key="EventDetailOBD.idleHours"               >true</Property>
      <Property key="EventDetailOBD.transOilTemp"            >true</Property>
      <Property key="EventDetailOBD.oilCoolerInTemp"         >true</Property>
      <Property key="EventDetailOBD.oilCoolerOutTemp"        >true</Property>
      <Property key="EventDetailOBD.coolantLevel"            >true</Property>
      <Property key="EventDetailOBD.coolantTemp"             >true</Property>
      <Property key="EventDetailOBD.engineTemp"              >true</Property>
      <Property key="EventDetailOBD.brakeGForce"             >true</Property>
      <Property key="EventDetailOBD.brakePressure"           >true</Property>
      <Property key="EventDetailOBD.brakePos"                >true</Property>
      <Property key="EventDetailOBD.oilLevel"                >true</Property>
      <Property key="EventDetailOBD.oilPressure"             >true</Property>
      <Property key="EventDetailOBD.ptoEngaged"              >true</Property>
      <Property key="EventDetailOBD.ptoHours"                >true</Property>
      <Property key="EventDetailOBD.vBatteryVolts"           >true</Property>
      <Property key="EventDetailOBD.throttlePos"             >true</Property>
      <Property key="EventDetailOBD.intakeTemp"              >true</Property>
      <Property key="EventDetailOBD.airPressure"             >true</Property>
      <Property key="EventDetailOBD.airFilterPressure"       >true</Property>
      <Property key="EventDetailOBD.turboPressure"           >true</Property>
      <Property key="EventDetailOBD.malfunctionLamp"         >true</Property>
      <Property key="EventDetailOBD.faultCode"               >true</Property>
      <Property key="EventDetailOBD.faultCodes"              >true</Property>
      <!-- DeviceFaultCodes specific properties -->
      <Property key="DeviceFaultCodes.columnServiceDist0"    >true</Property>
      <Property key="DeviceFaultCodes.columnServiceDist1"    >false</Property>
      <Property key="DeviceFaultCodes.columnServiceNotes"    >true</Property>
      <!-- DistanceTraveled specific properties -->
      <Property key="DistanceTraveled.startOdometer"         >true</Property>
      <Property key="DistanceTraveled.stopOdometer"          >true</Property>
      <Property key="DistanceTraveled.odomDelta"             >true</Property>
      <Property key="DistanceTraveled.plannedDistance"       >false</Property>
      <Property key="DistanceTraveled.startFuel"             >false</Property>
      <Property key="DistanceTraveled.stopFuel"              >false</Property>
      <Property key="DistanceTraveled.fuelDelta"             >false</Property>
      <!-- DigitalIOReport's specific properties -->
      <Property key="DigitalIOReport.odometerDelta"          >false</Property>
      <!-- FuelSummaryReport's specific properties -->
      <Property key="FuelSummaryReport.showFuelEconomyType"  >false</Property>
      <!-- EventThermo's specific properties -->
      <Property key="EventThermo.columnThermo1"              >true</Property>
      <Property key="EventThermo.columnThermo2"              >true</Property>
      <Property key="EventThermo.columnThermo3"              >true</Property>
      <Property key="EventThermo.columnThermo4"              >false</Property>
      <Property key="EventThermo.columnThermo5"              >false</Property>
      <Property key="EventThermo.columnThermo6"              >false</Property>
      <Property key="EventThermo.columnThermo7"              >false</Property>
      <Property key="EventThermo.columnThermo8"              >false</Property>
      <!-- EngineThermo's specific properties -->
      <Property key="EngineThermo.columnCoolantTemp"         >true</Property>
      <Property key="EngineThermo.columnEngineTemp"          >true</Property>
      <Property key="EngineThermo.columnBatteryTemp"         >true</Property>
      <Property key="EngineThermo.columnOilTemp"             >false</Property>
      <Property key="EngineThermo.columnTransOilTemp"        >false</Property>
      <Property key="EngineThermo.columnOilCoolerInTemp"     >false</Property>
      <Property key="EngineThermo.columnOilCoolerOutTemp"    >false</Property>
      <Property key="EngineThermo.columnIntakeTemp"          >false</Property>
      <Property key="EngineThermo.columnAmbientTemp"         >false</Property>
      <Property key="EngineThermo.columnCabinTemp"           >false</Property>
      <Property key="EngineThermo.columnThermo1"             >false</Property>
      <Property key="EngineThermo.columnThermo2"             >false</Property>
      <Property key="EngineThermo.columnThermo3"             >false</Property>
      <Property key="EngineThermo.columnThermo4"             >false</Property>
      <Property key="EngineThermo.columnThermo5"             >false</Property>
      <Property key="EngineThermo.columnThermo6"             >false</Property>
      <Property key="EngineThermo.columnThermo7"             >false</Property>
      <Property key="EngineThermo.columnThermo8"             >false</Property>
      <!-- VehicleDriverBehavior specific properties -->
      <Property key="VehicleDriverBehavior.startOdometer"    >true</Property>
      <Property key="VehicleDriverBehavior.stopOdometer"     >true</Property>
      <Property key="VehicleDriverBehavior.odomDelta"        >true</Property>
      <Property key="VehicleDriverBehavior.statusCount_F11A" >true</Property>  <!-- STATUS_MOTION_EXCESS_SPEED -->
      <Property key="VehicleDriverBehavior.statusCount_F11B" >true</Property>  <!-- STATUS_MOTION_OVER_SPEED_2 -->
      <Property key="VehicleDriverBehavior.statusCount_F160" >false</Property> <!-- STATUS_SPEEDING_BEGIN -->
      <Property key="VehicleDriverBehavior.statusCount_F161" >false</Property> <!-- STATUS_SPEEDING_LIMIT_1 -->
      <Property key="VehicleDriverBehavior.statusCount_F162" >false</Property> <!-- STATUS_SPEEDING_LIMIT_2 -->
      <Property key="VehicleDriverBehavior.statusCount_F163" >false</Property> <!-- STATUS_SPEEDING_LIMIT_3 -->
      <Property key="VehicleDriverBehavior.statusCount_F126" >true</Property>  <!-- STATUS_MOTION_DECELERATION -->
      <Property key="VehicleDriverBehavior.statusCount_F930" >true</Property>  <!-- STATUS_EXCESS_BRAKING -->
      <Property key="VehicleDriverBehavior.statusCount_F931" >false</Property> <!-- STATUS_EXCESS_BRAKING_2 -->
      <Property key="VehicleDriverBehavior.statusCount_F932" >false</Property> <!-- STATUS_EXCESS_BRAKING_3 -->
      <Property key="VehicleDriverBehavior.statusCount_F123" >true</Property>  <!-- STATUS_MOTION_ACCELERATION -->
      <Property key="VehicleDriverBehavior.statusCount_F960" >true</Property>  <!-- STATUS_EXCESS_ACCEL -->
      <Property key="VehicleDriverBehavior.statusCount_F961" >false</Property> <!-- STATUS_EXCESS_ACCEL_2 -->
      <Property key="VehicleDriverBehavior.statusCount_F962" >false</Property> <!-- STATUS_EXCESS_ACCEL_3 -->
      <Property key="VehicleDriverBehavior.statusCount_F937" >false</Property> <!-- STATUS_EXCESS_CORNERING -->
      <Property key="VehicleDriverBehavior.statusCount_F938" >false</Property> <!-- STATUS_EXCESS_CORNERING_2 -->
      <Property key="VehicleDriverBehavior.statusCount_F939" >false</Property> <!-- STATUS_EXCESS_CORNERING_3 -->
      <Property key="VehicleDriverBehavior.statusCount_F92E" >false</Property> <!-- STATUS_HARSH_BEHAVIOR -->
      <Property key="VehicleDriverBehavior.statusCount_F116" >true</Property>  <!-- STATUS_MOTION_IDLE -->
      <Property key="VehicleDriverBehavior.statusCount_F118" >false</Property> <!-- STATUS_MOTION_EXCESS_IDLE -->
      <!-- AccountLoginReport specific properties -->
      <Property key="AccountLoginReport.smsCount"            >false</Property> 
   </Properties>

   <!-- Global Style Sheet ==================================================================== -->
   <DefaultStyle cssFile="RptGlobalStyle.css"/>
   <!-- the style may be included directly here as well:
   <DefaultStyle><![CDATA[
    <style>
        /* add style here */
    </style>
    <link rel="stylesheet" type="text/css" href="css/RptGlobalStyle.css"/>
   ]]></DefaultStyle>
   -->

   <!-- ======================================================================================= -->
   <!-- Report Layout configuration =========================================================== -->
   <!-- (must be a subclass of "org.opengts.war.report.ReportLayout") -->

   <!-- EventData based reports -->
   <ReportLayout 
        class="org.opengts.war.report.event.EventDataLayout"
        >
      <!-- 
       === This report layout supports the following columns
       ===   Name                   Example output
       ===   index                  - # record number
       ===   deviceId               - "dev32"
       ===   deviceDesc             - "Linehaul #1"
       ===   deviceName             - "LH-1"
       ===   deviceUniqueID         - "tk_123456789012345"
       ===   deviceModemID          - "123456789012345"
       ===   deviceBatteryLevel     - "89%"
       ===   deviceBatteryVolts     - "4.56"
       ===   deviceVehicleID        - "1X3458299384792"
       ===   devicePhoneNumber      - "<a href='tel:19165551212'>1-916-555-1212</a>"
       ===   deviceCreateDateTime   - "2007/03/08 23:31:47"
       ===   date                   - "2007/03/08"
       ===   time                   - "23:31:47"
       ===   dateTime               - "2007/03/08 23:31:47"
       ===   timestamp              - "1173350990"
       ===   createDate             - "2007/03/08"
       ===   createTime             - "23:31:47"
       ===   createDateTime         - "2007/03/08 23:31:47"
       ===   createTimestamp        - "1173350990"
       ===   createMillis           - "1173350990123"
       ===   createMillis:frac      - "123"
       ===   createMillis:sec       - "1173350990"
       ===   createAge              - "123"
       ===   groupId                - "sac"
       ===   statusCode             - "0xF011"
       ===   statusCode:dec         - "61457"
       ===   statusDesc             - "InMotion"
       ===   gpsAge                 - "7"
       ===   latitude               - "49.1234" or "49.07'24"N or "49.07.40N"
       ===   latitude:dms           - "49.07'24"W"
       ===   latitude:dm            - "49.07.40"W"
       ===   latitude:3             - "49.123"
       ===   latitude:4             - "49.1234"
       ===   latitude:5             - "49.12345"
       ===   longitude              - "-110.1234" or "110.07'24"W" or "110.07.40W"
       ===   longitude:dms          - "110.07'24"W"
       ===   longitude:dm           - "110.07.40"W"
       ===   longitude:3            - "-110.123"
       ===   longitude:4            - "-110.1234"
       ===   longitude:5            - "-110.12345"
       ===   geoPoint               - "49.1234/-110.1234" or "49.07'24"N/110.07'24"W" or "49.07.40N/110.07.40W"
       ===   geoPoint:dms           - "49.07'24"N/110.07'24"W"
       ===   geoPoint:dm            - "49.07.40N/110.07.40W"
       ===   geoPoint:3             - "49.123/-110.123"
       ===   geoPoint:4             - "49.1234/-110.1234"
       ===   geoPoint:5             - "49.12345/-110.12345"
       ===   accuracy               - "20"
       ===   cellLatitude           - "49.1234" or "49.07'24"N or "49.07.40N"
       ===   cellLongitude          - "-110.1234" or "110.07'24"W" or "110.07.40W"
       ===   cellGeoPoint           - "49.1234/-110.1234" or "49.07'24"N/110.07'24"W" or "49.07.40N/110.07.40W"
       ===   cellAccuracy           - "20"
       ===   bestLatitude           - "49.1234" or "49.07'24"N or "49.07.40N"
       ===   bestLongitude          - "-110.1234" or "110.07'24"W" or "110.07.40W"
       ===   bestGeoPoint           - "49.1234/-110.1234" or "49.07'24"N/110.07'24"W" or "49.07.40N/110.07.40W"
       ===   bestAccuracy           - "20"
       ===   altitude               - "324.5"       (units specified on column header)
       ===   altitude:1             - "324.4"       (units specified on column header)
       ===   satellites             - "6"         
       ===   speedLimit             - "65"          (units specified on column header)
       ===   overSpeedLimit         - "7"           (units specified on column header)
       ===   speed                  - "47"          (units specified on column header)
       ===   speed:1                - "47.1"        (units specified on column header)
       ===   speed:2                - "47.13"       (units specified on column header)
       ===   speedH                 - "47 NW"       (units specified on column header)
       ===   speedH:1               - "47.1 NW"     (units specified on column header)
       ===   speedH:2               - "47.13 NW"    (units specified on column header)
       ===   speedU                 - "47mph NE"
       ===   speedU:1               - "47.1mph NE"
       ===   speedU:2               - "47.13mph NE"
       ===   heading                - "NE"
       ===   heading:0              - "325"
       ===   heading:1              - "325.2"
       ===   distance               - "4587"        (units specified on column header)
       ===   distance:0             - "4587"        (units specified on column header)
       ===   distance:1             - "4587.2"      (units specified on column header)
       ===   odometer               - "34297"       (units specified on column header)
       ===   odometer:0             - "34297"       (units specified on column header)
       ===   odometer:1             - "34297.2"     (units specified on column header)
       ===   reportDistance         - "345"         (units specified on column header)
       ===   reportDistance:0       - "345"         (units specified on column header)
       ===   reportDistance:1       - "345.2"       (units specified on column header)
       ===   stopDateTime           - "2007/03/08 23:31:47"    *** MAY NOT BE IMPLEMENTED
       ===   stopElapsed:0          - "12:34:56"    (HH:MM:SS) *** MAY NOT BE IMPLEMENTED
       ===   stopElapsed:1          - "12:34"       (HH:MM)    *** MAY NOT BE IMPLEMENTED
       ===   stopElapsed:2          - "12.56"       (HHH.hh)   *** MAY NOT BE IMPLEMENTED
       ===   stopElapsed:3          - "12.6"        (HHH.h)    *** MAY NOT BE IMPLEMENTED
       ===   battery                - "24%"
       ===   batteryVolts           - "3.65"
       ===   batteryPercent         - "24%"
       ===   batteryTemp            - "24.5"
       ===   inputState             - "10010000"    (8-bit binary input state)
       ===   inputState:16          - "0001000010010000" (16-bit binary input state)
       ===   inputBit:0             - "On"          (arg is bit index)
       ===   outputState            - "10010000"    (binary output state)
       ===   outputBit:0            - "On"          (arg is bit index)
       ===   seatbeltState          - "0001"        (binary seatbelt state)
       ===   seatbeltBit:0          - "On"          (arg is bit index)
       ===   doorState              - "0001"        (binary door state)
       ===   doorBit:0              - "On"          (arg is bit index)
       ===   lightsState            - "0001"        (binary lights state)
       ===   lightsBit:0            - "On"          (arg is bit index)
       ===   analog0                - "12.4"
       ===   analog1                - "12.4"
       ===   analog2                - "12.4"
       ===   analog3                - "12.4"
       ===   pulseCount             - "82834.0"
       ===   frequencyHz            - "1257082834.0"
       ===   frequencyKHz           - "1257082.834"
       ===   frequencyMHz           - "1257.082834"
       ===   frequencyGHz           - "1.257082834"
       ===   address                - "1234 Somewhere Lane, Anytown, CA" 
       ===   city                   - "Anytown" 
       ===   state                  - "CA" 
       ===   country                - "US" 
       ===   subdivision            - "US/CA" 
       ===   geozoneId              - "home" 
       ===   geozoneDesc            - "Home Base" 
       ===   entityId               - "00000123"
       ===   entityDesc             - "Trailer 123"
       ===   driverId               - "john"
       ===   driverDesc             - "Jon Smith"
       ===   driverStatus:desc      - "Off Duty"
       ===   driverStatus:num       - "1"
       ===   driverMessage          - "Hello World"
       ===   messageDateTime        - "2007/03/08 23:31:47" (Garmin FMI support only)
       ===   messageTimestamp       - "1173350990"          (Garmin FMI support only)
       ===   messageId              - "1"                   (Garmin FMI support only)
       ===   messageStatus          - "1"                   (Garmin FMI support only)
       ===   messageStatusDesc      - "Read"                (Garmin FMI support only)
       ===   jobNumber              - "12345"
       ===   rfidTag                - "abcdfe"
       ===   sampleIndex            - "47"
       ===   sampleId               - "123-456"
       ===   barometer              - "15.5"
       ===   ambientTemp            - "32.5"
       ===   thermo#:0              - "14F"         ('#' may be 1..4)
       ===   thermo#:1              - "-2.3C"       ('#' may be 1..4)
       ===   fuelLevel              - "87%"
       ===   fuelLevelVolume        - "7.5"         (units specified on column header)
       ===   fuelLevel2             - "23%"
       ===   fuelLevelVolume2       - "7.5"         (units specified on column header)
       ===   fuelEconomy            - "6.4"         (units specified on column header)
       ===   fuelEconomyType        - "Event Economy"
       ===   fuelEconomyType:abbr   - "Event"
       ===   fuelTotal              - "1032.4"      (units specified on column header)
       ===   fuelRemain             - "27.3"        (units specified on column header)
       ===   fuelRefill             - "27.3"        (units specified on column header)
       ===   fuelTrip               - "97.4"        (units specified on column header)
       ===   fuelIdle               - "232.4"       (units specified on column header)
       ===   fuelEngineOn           - "10.6"        (units specified on column header)
       ===   fuelPressure           - "23.4"        (units specified on column header)
       ===   fuelRate               - "3.2"         (units specified on column header)
       ===   faultCode              - "128/123/1"
       ===   faultCodes             - "P0123,P0321,P1234"
       ===   lastFaultCodes         - "P0123,P0321,P1234"
       ===   malfunctionLamp        - "Off"          (MIL)
       ===   airbagLamp             - "Off"
       ===   absLamp                - "Off"
       ===   brakeLamp              - "On"
       ===   oilLevel               - "98%"
       ===   oilPressure            - "13.9"
       ===   oilTemp                - "56..7"
       ===   engineRpm              - "1352"
       ===   engineHours            - "5647.8"
       ===   engineOnHours          - "3.4"
       ===   engineLoad             - "78.5%"
       ===   idleHours              - "2387.2"
       ===   transOilTemp           - "65.3"
       ===   oilCoolerInTemp        - "65.3"
       ===   oilCoolerOutTemp       - "65.3"
       ===   coolantLevel           - "97.3%"
       ===   coolantTemp            - "96.4"
       ===   engineTemp             - "96.4"
       ===   acceleration           - "10.2"        (meters/sec/sec)
       ===   accelXYZ               - "0.050,-0.200,-1.100" (G-force, M/S/S)
       ===   accelMagnitude         - "-1.700"      (G-force, M/S/S)
       ===   brakeGForce            - "1.3"         (G-force)
       ===   brakeForce             - "1.3"         (km/hr/sec)
       ===   brakePressure          - "23.4"
       ===   brakePos               - "10%"
       ===   ptoEngaged             - "true"
       ===   ptoHours               - "1234.4"
       ===   ptoDistance            - "123456"
       ===   workHours              - "1234.4"
       ===   workDistance           - "123456"
       ===   serviceDistance        - "123456"
       ===   vBatteryVolts          - "13.6"
       ===   throttlePos            - "80%"
       ===   intakeTemp             - "96.4"
       ===   airPressure            - "22.4"
       ===   airFilterPressure      - "22.4"
       ===   massAirFlow            - "3.5"         (units specified on column header)
       ===   turboPressure          - "22.4"
       ===   tirePressure           - "32,29,29,30"
       ===   tireTemp               - "40,40,40,40"
       ===   tirePressTemp          - "32/40,29/42,33/47"
       ===   tankLevel              - "13%"
       ===   checkinDateTime        - "2007/03/08 23:31:47"
       ===   checkinAge             - "2d 04h 37m"
       ===   lastBatteryPercent     - "45.6%"
       ===   fuelCapacity           - "20.0"
       ===   etaDateTime            - "2007/03/08 23:31:47"
       ===   etaTimestamp           - "1173350990"
       ===   etaUniqueID            - "123"
       ===   etaDistance            - "4587"        (units specified on column header)
       ===   etaDistance:0          - "4587"        (units specified on column header)
       ===   etaDistance:1          - "4587.2"      (units specified on column header)
       ===   etaDistance:2          - "4587.23"     (units specified on column header)
       ===   etaLatitude            - "49.1234" or "49.07'24"N or "49.07.40N"
       ===   etaLatitude:dms        - "49.07'24"W"
       ===   etaLatitude:dm         - "49.07.40"W"
       ===   etaLatitude:3          - "49.123"
       ===   etaLatitude:4          - "49.1234"
       ===   etaLatitude:5          - "49.12345"
       ===   etaLongitude           - "-110.1234" or "110.07'24"W" or "110.07.40W"
       ===   etaLongitude:dms       - "110.07'24"W"
       ===   etaLongitude:dm        - "110.07.40"W"
       ===   etaLongitude:3         - "-110.123"
       ===   etaLongitude:4         - "-110.1234"
       ===   etaLongitude:5         - "-110.12345"
       ===   etaGeoPoint            - "49.1234/-110.1234" or "49.07'24"N/110.07'24"W" or "49.07.40N/110.07.40W"
       ===   etaGeoPoint:dms        - "49.07'24"N/110.07'24"W"
       ===   etaGeoPoint:dm         - "49.07.40N/110.07.40W"
       ===   etaGeoPoint:3          - "49.123/-110.123"
       ===   etaGeoPoint:4          - "49.1234/-110.1234"
       ===   etaGeoPoint:5          - "49.12345/-110.12345"
       ===   stopUniqueID           - "123"
       ===   stopStatus             - "103"
       ===   stopStatusDesc         - "Active"
       ===   stopIndex              - "1"
       ===   tripStartDateTime      - "2007/03/08 23:31:47"
       ===   tripStopDateTime       - "2007/03/08 23:31:47"
       ===   tripDistance:0         - "4587"     (units specified on column header)
       ===   tripIdleHours          - "12:34:46"
       ===   tripMaxSpeed           - "47"          (units specified on column header)
       ===   tripMaxRPM             - "1352"
       ===   tripStartLatitude:4    - "49.1234"
       ===   tripStartLongitude:4   - "-140.1234"
       ===   tripElapsed:0          - "12:34:56"    (HH:MM:SS) 
       ===   tripElapsed:1          - "12:34"       (HH:MM) 
       ===   tripElapsed:2          - "12.56"       (HHH.hh)  
       ===   tripElapsed:3          - "12.6"        (HHH.h)  
       ===   attachURL              - "./Attach.jpeg?d=DEVICE&ts=TIMESTAMP&sc=CODE"
       ===   attachProp:varName     - "Value"
       ===   dataSource             - "gprs"
       ===   rawData                - "imei=1234567890&rmc=$GPRMC,..."
       -->

      <!-- Date/Time format (Note: case is import!)
       === yyyy - year
       ===   MM - month
       ===   dd - day
       ===   HH - hour
       ===   mm - minute
       ===   ss - second
       === (these will default to the format provided in 'private.xml' if not defined here)
       -->
      <!-- <DateFormat>yyyy/MM/dd</DateFormat> --> <!-- see "java.text.SimpleDateFormat" -->
      <!-- <TimeFormat>HH:mm:ss</TimeFormat>   --> <!-- see "java.text.SimpleDateFormat" -->

      <!-- layout css style -->
      <LayoutStyle cssFile="RptEventDataLayout.css"/>
      <!--
      <LayoutStyle><![CDATA[
        <link rel="stylesheet" type="text/css" href="css/RptEventDataLayout.css"/>
      ]]></LayoutStyle>
      -->

   </ReportLayout>

   <!-- FieldLayout: Generic field based reports -->
   <ReportLayout 
        class="org.opengts.war.report.field.FieldLayout"
        >
      <!-- 
       === Notes:
       ===   - Not every field will contain a value for every report.  Only those fields
       ===     which have been populated by the report itself will contain values.
       ===
       === This report layout supports the following columns
       ===   index                  - # record number
       ===   displayName            - "Acme"
       ===   accountId              - "acme"
       ===   accountDesc            - "Acme Incorporated"
       ===   userId                 - "smith"
       ===   userDesc               - "John Smith"
       ===   deviceId               - "dev32"
       ===   deviceDesc             - "Linehaul #1"
       ===   deviceName             - "LH-1"
       ===   deviceActive           - "Yes"
       ===   deviceBatteryLevel     - "97%"
       ===   deviceBatteryVolts     - "4.56"
       ===   deviceVehicleVolts     - "13.78"
       ===   deviceVehicleID        - "1X3458299384792"
       ===   devicePhoneNumber      - "<a href='tel:19165551212'>1-916-555-1212</a>"
       ===   deviceFuelCost         - "2.59"
       ===   vehicleId              - "J123456789012345"    (ie. VIN)
       ===   vehicleMake            - "Ford"
       ===   vehicleModel           - "F150"
       ===   licensePlate           - "123ABC"
       ===   equipmentType          - "Truck"
       ===   uniqueId               - "gts_123456789012345"
       ===   groupId                - "sac"
       ===   date                   - "2007/03/08"
       ===   time                   - "23:31:47"
       ===   dateTime               - "2007/03/08 23:31:47"
       ===   timestamp              - "1173350990"
       ===   statusCode             - "0xF011"
       ===   statusDesc             - "InMotion"
       ===   pushpin                - "http://localhost/track/images/blue_pushpin.png"
       ===   entityId               - "00000123"
       ===   entityDesc             - "Jon Smith"
       ===   driverId               - "smith"
       ===   driverDesc             - "John Smith"
       ===   driverNickname         - "Johnny"
       ===   driverBirthdate        - "1960/01/01"
       ===   driverBadge            - "X12345"
       ===   driverLicense          - "X123456789"
       ===   driverLicenseType      - "CDL"
       ===   driverLicenseExp       - "2011/03/01"
       ===   driverLicenseExp:days  - "35 days"
       ===   driverStatus:desc      - "Off Duty"
       ===   driverStatus:num       - "1"
       ===   driverDeviceID         - "t1234"
       ===   driverDeviceDesc       - "Truck 1234"
       ===   latitude               - "49.1234" or "49.07'24"N or "49.07.40N"
       ===   latitude:dms           - "49.07'24"W"
       ===   latitude:dm            - "49.07.40"W"
       ===   latitude:3             - "49.123"
       ===   latitude:4             - "49.1234"
       ===   latitude:5             - "49.12345"
       ===   longitude              - "-110.1234" or "110.07'24"W" or "110.07.40W"
       ===   longitude:dms          - "110.07'24"W"
       ===   longitude:dm           - "110.07.40"W"
       ===   longitude:3            - "-110.123"
       ===   longitude:4            - "-110.1234"
       ===   longitude:5            - "-110.12345"
       ===   geoPoint               - "49.1234/-110.1234" or "49.07'24"N/110.07'24"W" or "49.07.40N/110.07.40W"
       ===   geoPoint:dms           - "49.07'24"N/110.07'24"W"
       ===   geoPoint:dm            - "49.07.40N/110.07.40W"
       ===   geoPoint:3             - "49.123/-110.123"
       ===   geoPoint:4             - "49.1234/-110.1234"
       ===   geoPoint:5             - "49.12345/-110.12345"
       ===   altitude               - "324"        (units specified on column header)
       ===   altitude:1             - "324.4"      (units specified on column header)
       ===   speedLimit             - "47"         (units specified on column header)
       ===   speed                  - "47"         (units specified on column header)
       ===   speed:1                - "47.1"       (units specified on column header)
       ===   speed:2                - "47.13"      (units specified on column header)
       ===   speedH                 - "47 NW"      (units specified on column header)
       ===   speedH:1               - "47.1 NW"    (units specified on column header)
       ===   speedH:2               - "47.13 NW"   (units specified on column header)
       ===   speedU                 - "47mph NE"
       ===   speedU:1               - "47.1mph NE"
       ===   speedU:2               - "47.13mph NE"
       ===   speedDuration          - "300 sec"
       ===   speedMaximum           = "75.0"
       ===   heading                - "NE"
       ===   heading:0              - "325"
       ===   heading:1              - "325.2"
       ===   distance               - "4587"       (units specified on column header)
       ===   distance:0             - "4587"       (units specified on column header)
       ===   distance:1             - "4587.2"     (units specified on column header)
       ===   distance:2             - "4587.23"    (units specified on column header)
       ===   plannedDistance        - "4587"       (units specified on column header)
       ===   plannedDistance:0      - "4587"       (units specified on column header)
       ===   plannedDistance:1      - "4587.2"     (units specified on column header)
       ===   plannedDistance:2      - "4587.23"    (units specified on column header)
       ===   odometer               - "34297"      (units specified on column header)
       ===   odometer:0             - "34297"      (units specified on column header)
       ===   odometer:1             - "34297.2"    (units specified on column header)
       ===   odometer:2             - "34297.23"   (units specified on column header)
       ===   odomDelta              - "34297"      (units specified on column header)
       ===   odomDelta:0            - "34297"      (units specified on column header)
       ===   odomDelta:1            - "34297.2"    (units specified on column header)
       ===   odomDelta:2            - "34297.23"   (units specified on column header)
       ===   odomDeltaWH            - "34297"      (units specified on column header)
       ===   odomDeltaWH:0          - "34297"      (units specified on column header)
       ===   odomDeltaWH:1          - "34297.2"    (units specified on column header)
       ===   odomDeltaWH:2          - "34297.23"   (units specified on column header)
       ===   address                - "1234 Somewhere Lane, Anytown, CA" 
       ===   notes                  - "General notes" 
       ===   description            - "This is a test" 
       ===   utilization            - "23%" 
       ===   count                  - "45" 
       ===   ipAddress              - "10.0.0.1"
       ===   isDuplex               - "true"
       ===   tcpConnections         - "5"
       ===   udpConnections         - "10"
       ===   connections            - "15"
       ===   bytesRead              - "128"
       ===   bytesWritten           - "128"
       ===   bytesOverhead          - "128"
       ===   bytesTotal             - "256"
       ===   bytesRounded           - "1024"
       ===   eventsReceived         - "2"
       ===   startDateTime          - "2007/03/08 23:31:47" 
       ===   startTimestamp         - "1173350990" 
       ===   startOdometer          - "34297"
       ===   enterOdometer          - "34297"
       ===   stopDateTime           - "2007/03/08 23:31:47" 
       ===   stopTimestamp          - "1173350990" 
       ===   stopGeoPoint           - "49.1234/-110.1234"
       ===   stopGeoPoint:3         - "49.123/-110.123"
       ===   stopGeoPoint:4         - "49.1234/-110.1234"
       ===   stopGeoPoint:5         - "49.12345/-110.12345"
       ===   stopOdometer           - "34297"
       ===   exitOdometer           - "34297"
       ===   startEngineHours       - "12:34:46"   
       ===   enterEngineHours       - "12:34:46"   
       ===   stopEngineHours        - "12:34:46"   
       ===   exitEngineHours        - "12:34:46"   
       ===   engineHoursDelta       - "00:34:56"
       ===   stopCount              - "5"
       ===   enterDateTime          - "2007/03/08 23:31:47" 
       ===   enterTimestamp         - "1173350990" 
       ===   exitDateTime           - "2007/03/08 23:31:47" 
       ===   exitTimestamp          - "1173350990" 
       ===   fuelCapacity           - "20.0"        (units specified on column header)
       ===   fuelLevel              - "62%"        
       ===   fuelTotal              - "1045.3"      (units specified on column header)
       ===   fuelTrip               - "15.3"        (units specified on column header)
       ===   fuelTripWH             - "15.3"        (units specified on column header)
       ===   fuelIdle               - "10.7"        (units specified on column header)
       ===   fuelIdleWH             - "10.7"        (units specified on column header)
       ===   fuelWork               - "87.7"        (units specified on column header)
       ===   fuelPTO                - "14.7"        (units specified on column header)
       ===   fuelRemain             - "27.3"        (units specified on column header)
       ===   fuelRefill             - "27.3"        (units specified on column header)
       ===   fuelEconomy            - "6.3"         (units specified on column header)
       ===   fuelEconomyType        - "Fuel Used"
       ===   fuelEconomyType:abbr   - "Used"
       ===   startFuel              - "1433.5"      (units specified on column header)
       ===   stopFuel               - "1433.5"      (units specified on column header)
       ===   fuelDelta              - "33.0"        (units specified on column header)
       ===   drivingElapse          - "01:23:43" 
       ===   drivingElapseWH        - "01:23:43" 
       ===   stopElapse             - "01:23:43" 
       ===   idleElapse             - "01:23:43" 
       ===   acceleration           - "10.2"        (meters/sec/sec)
       ===   accelMagnitude         - "-1.700"      (G-force, M/S/S)
       ===   incidentTimestamp      - "1173350990"
       ===   incidentDateTime       - "2007/03/08 23:31:47"
       ===   checkinDateTime        - "2007/03/08 23:31:47"
       ===   checkinAge             - "2d 04h 37m"
       ===   lastIPAddress          - "192.168.1.1"
       ===   propertyKey            - "0xF911"
       ===   propertyDesc           - "mot.inmotion"
       ===   propertyValue          - "120"
       ===   diagError              - "true"
       ===   diagKey                - "0xF911"
       ===   diagDesc               - "GPS Expired"
       ===   diagValue              - "lastFix=2008/01/03 12:12:32"
       ===   serviceLastHR0         - "123.0"
       ===   serviceIntervalHR0     - "100.0"
       ===   serviceNextHR0         - "200.0"
       ===   serviceRemainingHR0    - "54.0"
       ===   serviceLastDist0       - "12345.0"
       ===   serviceIntervalDist0   - "2000.0"
       ===   serviceNextDist0       - "13000.0"
       ===   serviceRemainingDist0  - "567.0"
       ===   serviceLastDist1       - "12345.0"
       ===   serviceIntervalDist1   - "2000.0"
       ===   serviceNextDist1       - "13000.0"
       ===   serviceRemainingDist1  - "567.0"
       ===   serviceNotes           - "These are notes"
       ===   faultCodes             - "P0123,P0234,P0345"
       ===   billingCost            - "6.75"
       ===   billingProrated        - "Yes"
       -->

      <!-- Date/Time format (Note: case is import!)
       === yyyy - year
       ===   MM - month
       ===   dd - day
       ===   HH - hour
       ===   mm - minute
       ===   ss - second
       === (these will default to the format provided in 'private.xml' if not defined here)
       -->
      <!-- <DateFormat>yyyy/MM/dd</DateFormat> --> <!-- see "java.text.SimpleDateFormat" -->
      <!-- <TimeFormat>HH:mm:ss</TimeFormat>   --> <!-- see "java.text.SimpleDateFormat" -->

      <!-- FieldLayout css style -->
      <LayoutStyle cssFile="RptFieldLayout.css"/>

   </ReportLayout>

   <!-- OPTIONAL LAYOUT: may not be supported in all releases -->
   <!-- Border Crossing reports -->
   <ReportLayout 
        class="org.opengts.bcross.war.report.BCLayout" 
        optional="true"
        >
      <!-- 'BCLayout' supports the following columns
       ===   index                  - # record number
       ===   deviceId               - "dev32"
       ===   deviceDesc             - "Linehaul #1"
       ===   deviceName             - "LH-1"
       ===   groupId                - "sac"
       ===   enterDateTime          - "2007/03/08 23:31:47"
       ===   enterTimestamp         - "1173350990"
       ===   enterGeoPoint          - "49.1234/-110.1234"
       ===   enterGeoPoint:3        - "49.123/-110.123"
       ===   enterGeoPoint:4        - "49.1234/-110.1234"
       ===   enterGeoPoint:5        - "49.12345/-110.12345"
       ===   enterOdometer          - "34297"   (units specified on column header)
       ===   enterOdometer:0        - "34297"   (units specified on column header)
       ===   enterOdometer:1        - "34297.2" (units specified on column header)
       ===   exitDateTime           - "2007/03/08 23:31:47"
       ===   exitTimestamp          - "1173350990"
       ===   exitGeoPoint           - "49.1234/-110.1234"
       ===   exitGeoPoint:3         - "49.123/-110.123"
       ===   exitGeoPoint:4         - "49.1234/-110.1234"
       ===   exitGeoPoint:5         - "49.12345/-110.12345"
       ===   exitOdometer           - "34297"   (units specified on column header)
       ===   exitOdometer:0         - "34297"   (units specified on column header)
       ===   exitOdometer:1         - "34297.2" (units specified on column header)
       ===   distanceTraveled       - "7"       (units specified on column header)
       ===   distanceTraveled:0     - "7"       (units specified on column header)
       ===   distanceTraveled:1     - "7.2"     (units specified on column header)
       -->

      <!-- Date/Time format (Note: case is import!)
       === yyyy - year
       ===   MM - month
       ===   dd - day
       ===   HH - hour
       ===   mm - minute
       ===   ss - second
       === (these will default to the format provided in 'private.xml' if not defined here)
       -->
      <!-- <DateFormat>yyyy/MM/dd</DateFormat> --> <!-- see "java.text.SimpleDateFormat" -->
      <!-- <TimeFormat>HH:mm:ss</TimeFormat>   --> <!-- see "java.text.SimpleDateFormat" -->

      <!-- layout css style -->
      <LayoutStyle cssFile="RptBCLayout.css"/>

   </ReportLayout>

   <!-- OPTIONAL LAYOUT: may not be supported in all releases -->
   <!-- Antx daily reports -->
   <ReportLayout 
        class="org.opengts.extra.war.report.antx.AntxLayout" 
        optional="true"
        >
      <!-- 'AntxLayout' supports the following columns
       ===   index                  - # record number
       ===   deviceId               - "dev32"
       ===   deviceDesc             - "Linehaul #1"
       ===   deviceName             - "LH-1"
       ===   dateTime               - "2007/03/08 23:31:47"
       ===   timestamp              - "1173350990"
       ===   fieldID                - "10"
       ===   fieldDesc              - "Trans Oil Temp"
       ===   channelID              - "153"
       ===   channelDesc            - "Digital"
       ===   type                   - "Min/Max"
       ===   data0                  - "0.0"
       ===   data1                  - "0.0"
       ===   data2                  - "0.0"
       ===   data3                  - "0.0"
       ===   data4                  - "0.0"
       -->

      <!-- Date/Time format (Note: case is import!)
       === yyyy - year
       ===   MM - month
       ===   dd - day
       ===   HH - hour
       ===   mm - minute
       ===   ss - second
       === (these will default to the format provided in 'private.xml' if not defined here)
       -->
      <!-- <DateFormat>yyyy/MM/dd</DateFormat> --> <!-- see "java.text.SimpleDateFormat" -->
      <!-- <TimeFormat>HH:mm:ss</TimeFormat>   --> <!-- see "java.text.SimpleDateFormat" -->

      <!-- layout css style -->
      <LayoutStyle cssFile="RptAntxLayout.css"/>

   </ReportLayout>

   <!-- ======================================================================================= -->
   <!-- ======================================================================================= -->
   <!-- Report Types ========================================================================== -->

   <!--
    === Notes: 
    ===  - These must match the "REPORT_TYPE_..." names defined in "src/org/opengts/war/report/ReportFactory.java"
    ===  - See "src/org/opengts/war/report/ReportFactory.java" for the default descriptions used for these report groups.
    ===  - the "attr" value determines what type of vehicle/group pulldown selection is displayed.  Currently, "device"
    ===    will displaye the device/vehicle pulldown selection, and "group" will display the deviceGroup selection.
    ===    Any other value will cause the pulldown selection to not display at all.
    -->
   <ReportTypes>
      <ReportType name="device.detail"      isGroup="false" attr="device"/> <!-- i18n="ReportsXML.type.deviceDetail"     >Device Detail Reports:</ReportType>        -->
      <ReportType name="device.summary"     isGroup="false" attr="device"/> <!-- i18n="ReportsXML.type.deviceSummary"    >Device Summary Reports:</ReportType>       -->
      <ReportType name="device.performance" isGroup="false" attr="device"/> <!-- i18n="ReportsXML.type.devicePerformance">Device Performance Reports:</ReportType>   -->
      <ReportType name="driver.performance" isGroup="false" attr="driver"/> <!-- i18n="ReportsXML.type.driverPerformance">Driver Performance Reports:</ReportType>   -->
      <ReportType name="fleet.detail"       isGroup="true"  attr="group" /> <!-- i18n="ReportsXML.type.fleetDetail"      >Fleet Detail Reports:</ReportType>         -->
      <ReportType name="fleet.summary"      isGroup="true"  attr="group" /> <!-- i18n="ReportsXML.type.fleetSummary"     >Fleet Summary Reports:</ReportType>        -->
      <ReportType name="ifta.detail"        isGroup="false" attr="device"/> <!-- i18n="ReportsXML.type.iftaDetail"       >I.F.T.A. Reports:</ReportType>             -->
      <ReportType name="ifta.summary"       isGroup="true"  attr="group" /> <!-- i18n="ReportsXML.type.iftaSummary"      >I.F.T.A. Reports:</ReportType>             -->
      <ReportType name="table.admin"        isGroup="true"  attr="table" /> <!-- i18n="ReportsXML.type.tableAdmin"       >Table Admin Reports:</ReportType>          -->
      <ReportType name="sysadmin.summary"   isGroup="true"  attr="group" /> <!-- i18n="ReportsXML.type.sysadminSummary"  >System Administrator Reports:</ReportType> -->
   </ReportTypes>

   <!-- ======================================================================================= -->
   <!-- ======================================================================================= -->
   <!-- Report Definition ===================================================================== -->
   <!-- (must be a subclass of "org.opengts.war.report.ReportData")
    === 'Title', and 'Subtitle', may contain the following vars (many of these are not necessarily
    === applicable to including in a report title):
    ===    ${navigation}        - Page navigation string
    ===    ${pageTitle}         - Page title
    ===    ${copyright}         - Copyright string
    ===    ${isLoggedIn}        - "true" (account will always be logged-in on the report)
    ===    ${loginCount}        - Number of Account/User login sessions
    ===    ${i18n.Login}        - Localized "Login" string
    ===    ${ipAddress}         - Logged-in user IP Address
    ===    ${timezone}          - (Report) Selected Time Zone
    ===    ${dateRange}         - (Report) Selected date range 
    ===    ${limit}             - (Report) Report record selection limit
    ===    ${version}           - GTS version string
    ===    ${locale}            - Current Locale
    ===    ${accountID}         - Account ID
    ===    ${accountDesc}       - Account description
    ===    ${i18n.Account}      - Account singular "Acount" title
    ===    ${i18n.Accounts}     - Account plural "Acounts" title
    ===    ${deviceID}          - Device ID
    ===    ${deviceDesc}        - Device description
    ===    ${i18n.Device}       - Account singular "Device" title
    ===    ${i18n.Devices}      - Account plural "Devices" title
    ===    ${i18n.Vehicle}      - alias for ${i18n.Device}
    ===    ${i18n.Vehicles}     - alias for ${i18n.Devices}
    ===    ${groupID}           - DeviceGroup ID
    ===    ${groupDesc}         - DeviceGroup description
    ===    ${i18n.Group}        - Account singular "DeviceGroup" title
    ===    ${i18n.Groups}       - Account plural "DeviceGroups" title
    ===    ${userID}            - Logged-in User ID
    ===    ${userDesc}          - Logged-in User description
    ===    ${i18n.User}         - Account singular "User" title
    ===    ${i18n.Users}        - Account plural "Users" title
    ===    ${speedUnits}        - Account 'speed' units (ie. "mph", "kph")
    ===    ${distanceUnits}     - Account 'distance' units (ie. "miles", "km")
    ===    ${altitudeUnits}     - Account 'altitude' units (ie. "feet", "meters")
    ===    ${economyUnits}      - Account 'economy' units (ie. "mpg", "kpl")
    ===    ${pressureUnits}     - Account 'pressure' units (ie. "kPa", "psi")
    ===    ${volumeUnits}       - Account 'volume' units (ie. "Liters", "Gallons")
    ===    ${statusCodeDesc:X}  - Account status-code description for 'X'
    ===
    === Report 'type' must be one of the following:
    ===    device.detail
    ===    fleet.detail
    ===    fleet.summary
    ===    device.performance
    ===    driver.performance
    ===    ifta.detail
    ===    table.admin
    ===    sysadmin.summary
    -->

   <!-- ======================================================================================= -->
   <!-- ======================================================================================= -->
   <!-- device.detail ========================================================================= -->

   <!-- example device detail report showing all events for a given device (and all possible fields) -->
   <Report name="EventDetailAll" type="device.detail" 
        class="org.opengts.war.report.event.EventDetailReport"
        layout="org.opengts.war.report.event.EventDataLayout"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.eventDetailAll.menu">Event Detail (All fields)</MenuDescription>
      <Title i18n="ReportsXML.eventDetailAll.title">Event Detail (All fields)</Title>
      <Subtitle i18n="ReportsXML.eventDetailAll.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"             arg="mapLink" ifTrue="columnIndexMapLink"/>
         <Column name="index"                           ifFalse="columnIndexMapLink"/>
         <Column name="deviceId"        arg="adminEdit" ifTrue="columnDeviceIDAdmin"/>
         <Column name="deviceId"                        ifFalse="columnDeviceIDAdmin"/>
         <Column name="deviceDesc"                      />
         <Column name="timestamp"                       />
         <Column name="date"                            />
         <Column name="time"                            />
         <Column name="statusCode"          arg="color" />
         <Column name="statusDesc"          arg="color" />
         <Column name="pushpin"                         ifTrue="columnPushpin"/>
         <Column name="latitude"            arg="5"     />  <!-- "bestLatitude"  -->
         <Column name="longitude"           arg="5"     />  <!-- "bestLongitude" -->
         <Column name="accuracy"                        />
         <Column name="cellLatitude"        arg="5"     />
         <Column name="cellLongitude"       arg="5"     />
         <Column name="cellAccuracy"                    />
         <Column name="gpsAge"                          />
         <Column name="satellites"                      />
         <!-- Column name="speed"               arg="1" / -->
         <Column name="speedH"                          />
         <!-- Column name="speedU"                      / -->
         <!-- Column name="heading"             arg="0" / -->
         <Column name="speedLimit"          arg="0"     ifTrue="columnSpeedLimit"/>
         <!-- Column name="stopElapsed"         arg="0" / -->
         <Column name="altitude"                        />
         <Column name="odometer"            arg="0"     />
         <Column name="distance"            arg="0"     />
         <Column name="reportDistance"      arg="0"     ifTrue="columnReportDistance"/>
         <Column name="inputState"          arg="8"     ifTrue="columnInputState8"/>
         <Column name="inputState"          arg="16"    ifTrue="columnInputState16"/>
         <Column name="address"                         />
         <Column name="geozoneDesc"                     />
         <Column name="subdivision"                     />
         <Column name="batteryPercent"                  />
         <Column name="batteryVolts"                    />
         <Column name="batteryTemp"                     />
         <!-- J1708/J1939/OBDII fields -->
         <Column name="malfunctionLamp"                 />
         <Column name="airbagLamp"                      />
         <Column name="absLamp"                         />
         <Column name="brakeLamp"                       />
         <Column name="fuelLevel"                       />
         <Column name="fuelLevelVolume"                 />
         <Column name="fuelEconomy"                     />
         <Column name="fuelTotal"                       />
         <Column name="fuelRemain"                      />
         <Column name="fuelIdle"                        />
         <Column name="fuelEngineOn"                    />
         <Column name="fuelPressure"                    />
         <Column name="fuelRate"                        />
         <Column name="engineRpm"                       />
         <Column name="engineHours"         arg="1"     />
         <Column name="engineOnHours"       arg="1"     />
         <Column name="engineLoad"                      />
         <Column name="idleHours"           arg="1"     />
         <Column name="transOilTemp"                    />
         <Column name="oilCoolerInTemp"                 />
         <Column name="oilCoolerOutTemp"                />
         <Column name="coolantLevel"                    />
         <Column name="coolantTemp"                     />
         <Column name="engineTemp"                      />
         <Column name="engineTorque"        arg=""      />
         <Column name="transGear"           arg=""      />
         <Column name="acceleration"        arg="G,2"   />
         <Column name="accelXYZ"            arg="mss"   />
         <Column name="accelMagnitude"      arg="G"     />
         <Column name="brakeGForce"                     />
         <Column name="brakePressure"                   />
         <Column name="brakePos"                        />
         <Column name="oilLevel"                        />
         <Column name="oilPressure"                     />
         <Column name="ptoEngaged"                      />
         <Column name="ptoHours"            arg="1"     />
         <Column name="ptoDistance"         arg="0"     />
         <Column name="workDistance"        arg="0"     />
         <Column name="serviceDistance"     arg="0"     />
         <Column name="vBatteryVolts"                   />
         <Column name="throttlePos"                     />
         <Column name="intakeTemp"                      />
         <Column name="airPressure"                     />
         <Column name="airFilterPressure"               />
         <Column name="massAirFlow"                     />
         <Column name="turboPressure"                   />
         <Column name="driverId"                        />
         <Column name="driverStatus"                    />
         <Column name="rfidTag"                         />
         <Column name="sampleIndex"                     />
         <Column name="sampleId"                        />
         <Column name="attachURL"                       />
         <Column name="createDateTime"                  />
         <!-- Fault codes -->
         <Column name="faultCode"           arg="desc"  />
         <Column name="faultCodes"          arg="desc"  />
         <!-- Analog fields -->
         <Column name="analog0"                         />
         <Column name="analog1"                         />
         <Column name="analog2"                         />
         <Column name="analog3"                         />
         <!-- Misc fields -->
         <Column name="pulseCount"                      />
         <Column name="driverMessage"                   />
         <Column name="jobNumber"                       />
         <Column name="dataSource"                      />
         <Column name="rawData"                         />
         <Column name="devicePhoneNumber"               ifTrue="columnDevicePhone"/>
      </Columns>
      <Constraints>
         <SelectionLimit type="last">4000</SelectionLimit>
         <ReportLimit>4000</ReportLimit>
         <OrderAscending>true</OrderAscending>
      </Constraints>
      <Property key="reportDataFieldEnabled">false</Property>
      <Property key="gpsAgeColorRange">1200:#550000,3600:#BB0000</Property>
   </Report>

   <!-- event detail report showing all events for a given device -->
   <Report name="EventDetail" type="device.detail"
        class="org.opengts.war.report.event.EventDetailReport"
        layout="org.opengts.war.report.event.EventDataLayout"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.eventDetail.menu">Event Detail</MenuDescription>
      <Title i18n="ReportsXML.eventDetail.title">Event Detail</Title>
      <Subtitle i18n="ReportsXML.eventDetail.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"             arg="mapLink" ifTrue="columnIndexMapLink"/>
         <Column name="index"                           ifFalse="columnIndexMapLink"/>
         <Column name="date"                            />
         <Column name="time"                            />
         <Column name="statusDesc"          arg="color" />
         <Column name="pushpin"                         ifTrue="columnPushpin"/>
         <Column name="geoPoint"            arg="5"     ifTrue="columnLatLon"/>
         <Column name="speedH"              arg="1"     />
         <Column name="speedLimit"          arg="0"     ifTrue="columnSpeedLimit"/>
         <Column name="altitude"                        />
         <Column name="odometer"            arg="0"     ifTrue="columnOdometer"/>
         <Column name="reportDistance"      arg="0"     ifTrue="columnReportDistance"/>
         <Column name="fuelTotal"                       ifTrue="columnFuelUsage"/>
         <Column name="address"                         />
         <Column name="geozoneDesc"                     ifTrue="columnGeozoneDesc"/>
         <Column name="driverMessage"                   ifTrue="columnDriverMessage"/>
         <Column name="attachURL"                       ifTrue="columnAttachURL"/>
         <Column name="createDateTime"                  ifTrue="columnCreateDateTime"/>
         <!-- Column name="attachProp" arg="testValue:F1">Test\nNumber</Column -->
      </Columns>
      <Constraints>
         <SelectionLimit type="first">3000</SelectionLimit>
         <ReportLimit>3000</ReportLimit>
         <OrderAscending>true</OrderAscending>
      </Constraints>
      <MapIconSelector ruleFactoryName="GTSRulesEngine,SecureENRE,ENRE">
        <!-- an installed "RuleFactory" implementation is required which can analyze this iconSelector -->
        <![CDATA[ ((mph<4)?"reddot":(speed<15)?"yellow":"heading") ]]>
      </MapIconSelector> 
      <Property key="reportDataFieldEnabled">false</Property>
      <Property key="gpsAgeColorRange">1200:#550000,3600:#BB0000</Property>
      <Property key="creationAgeColorRange"></Property>
   </Report>

   <!-- event detail report showing all events for a given device -->
   <Report name="EventDetailEngine" type="device.detail"
        class="org.opengts.war.report.event.EventDetailReport"
        layout="org.opengts.war.report.event.EventDataLayout"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.eventDetailEngine.menu">Event Detail (Engine)</MenuDescription>
      <Title i18n="ReportsXML.eventDetailEngine.title">Event Detail (Engine)</Title>
      <Subtitle i18n="ReportsXML.eventDetailEngine.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"             arg="mapLink" ifTrue="columnIndexMapLink"/>
         <Column name="index"                           ifFalse="columnIndexMapLink"/>
         <Column name="deviceId"                        />
         <Column name="deviceVehicleID"                 />
         <Column name="deviceLicensePlate"              />
         <Column name="deviceDesc"                      />
         <Column name="dateTime"                        />
         <Column name="statusDesc"          arg="color" />
         <Column name="address"                         />
     <!-- Column name="geoPoint"            arg="5"     ifTrue="columnLatLon"/ -->
         <Column name="engineRpm"                       />
         <Column name="speedH"              arg="1"     />
         <Column name="odometer"            arg="0"     ifTrue="columnOdometer"/>
         <Column name="vBatteryVolts"                   />
         <Column name="coolantTemp"                     />
         <Column name="fuelLevel"                       />
         <Column name="malfunctionLamp"                 />
         <Column name="faultCodes"          arg="desc"  />
         <Column name="driverId"                        />
      </Columns>
      <Constraints>
         <SelectionLimit type="first">15000</SelectionLimit>
         <ReportLimit>15000</ReportLimit>
         <OrderAscending>true</OrderAscending>
      </Constraints>
      <MapIconSelector ruleFactoryName="GTSRulesEngine,SecureENRE,ENRE">
        <!-- an installed "RuleFactory" implementation is required which can analyze this iconSelector -->
        <![CDATA[ ((mph<4)?"reddot":(speed<15)?"yellow":"heading") ]]>
      </MapIconSelector> 
      <Property key="reportDataFieldEnabled">false</Property>
      <Property key="gpsAgeColorRange">1200:#550000,3600:#BB0000</Property>
      <Property key="creationAgeColorRange"></Property>
   </Report>

   <!-- event detail report showing all events for a given device -->
   <Report name="EventDetailEngine2" type="device.detail"
        class="org.opengts.war.report.event.EventDetailReport"
        layout="org.opengts.war.report.event.EventDataLayout"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.eventDetailEngine2.menu">Event Detail (#2)</MenuDescription>
      <Title i18n="ReportsXML.eventDetailEngine2.title">Event Detail (#2)</Title>
      <Subtitle i18n="ReportsXML.eventDetailEngine2.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"             arg="mapLink" ifTrue="columnIndexMapLink"/>
         <Column name="index"                           ifFalse="columnIndexMapLink"/>
         <Column name="deviceId"                        />
         <Column name="deviceDesc"                      />
         <Column name="deviceVehicleID"                 />
         <Column name="dateTime"                        />
         <Column name="statusDesc"          arg="color" />
         <Column name="engineRpm"                       />
         <Column name="speedH"              arg="1"     />
         <Column name="odometer"            arg="0"     ifTrue="columnOdometer"/>
         <Column name="fuelRemain"                      />
         <Column name="coolantTemp"                     />
         <Column name="vBatteryVolts"                   />
         <Column name="faultCodes"          arg="desc"  />
         <Column name="address"                         />
      </Columns>
      <Constraints>
         <SelectionLimit type="first">15000</SelectionLimit>
         <ReportLimit>15000</ReportLimit>
         <OrderAscending>true</OrderAscending>
      </Constraints>
      <Property key="reportDataFieldEnabled">false</Property>
   </Report>

   <!-- event detail report showing all events for a given device -->
   <Report name="EventDetailEngine3" type="device.detail"
        class="org.opengts.war.report.event.EventDetailReport"
        layout="org.opengts.war.report.event.EventDataLayout"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.eventDetailEngine3.menu">Event Detail (#3)</MenuDescription>
      <Title i18n="ReportsXML.eventDetailEngine3.title">Event Detail (#3)</Title>
      <Subtitle i18n="ReportsXML.eventDetailEngine3.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"             arg="mapLink" ifTrue="columnIndexMapLink"/>
         <Column name="index"                           ifFalse="columnIndexMapLink"/>
         <Column name="deviceId"                        />
         <Column name="deviceDesc"                      />
         <Column name="deviceVehicleID"                 />
         <Column name="dateTime"                        />
         <Column name="statusDesc"          arg="color" />
         <Column name="engineRpm"                       />
         <Column name="speedH"              arg="1"     />
         <Column name="odometer"            arg="0"     ifTrue="columnOdometer"/>
         <Column name="fuelRemain"                      />
         <Column name="coolantTemp"                     />
         <Column name="vBatteryVolts"                   />
         <Column name="fuelRate"                        />
         <Column name="fuelPressure"                    />
         <Column name="engineTorque"        arg=""      />
         <Column name="throttlePos"                     />
     <!-- Column name="turboActuator"                   / -->
         <Column name="massAirFlow"                     />
         <Column name="malfunctionLamp"                 />
         <Column name="airbagLamp"                      />
         <Column name="absLamp"                         />
         <Column name="faultCodes"          arg="desc"  />
         <Column name="address"                         />
         <Column name="accuracy"                        />
         <Column name="geoPoint"            arg="5"     />
         <Column name="batteryVolts"                    />
     <!-- Column name="ambientTemp"                     / -->
         <Column name="thermo1"             arg="1"     i18n="ReportsXML.EventDetailEngine3.deviceTemp">Device\nTemp</Column>
      </Columns>
      <Constraints>
         <SelectionLimit type="first">15000</SelectionLimit>
         <ReportLimit>15000</ReportLimit>
         <OrderAscending>true</OrderAscending>
      </Constraints>
      <Property key="reportDataFieldEnabled">false</Property>
   </Report>

   <!-- event detail report showing tire pressures -->
   <Report name="DetailTirePressure" type="device.detail"
        class="org.opengts.war.report.event.EventDetailReport"
        layout="org.opengts.war.report.event.EventDataLayout"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.eventDetail.menu">Event Detail (Tire Pressure)</MenuDescription>
      <Title i18n="ReportsXML.eventDetail.title">Event Detail (Tire Pressure)</Title>
      <Subtitle i18n="ReportsXML.eventDetail.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"                           />
         <Column name="date"                            />
         <Column name="time"                            />
         <Column name="statusDesc"          arg="color" />
         <Column name="odometer"            arg="0"     />
         <Column name="tirePressure"        arg="L01"   /> <!-- Axle #0, front-left  -->
         <Column name="tirePressure"        arg="L02"   /> <!-- Axle #0, front-right -->
         <Column name="tirePressure"        arg="L10"   /> <!-- Axle #1, outer-left  -->
         <Column name="tirePressure"        arg="L11"   /> <!-- Axle #1, inner-left  -->
         <Column name="tirePressure"        arg="L12"   /> <!-- Axle #1, inner-right -->
         <Column name="tirePressure"        arg="L13"   /> <!-- Axle #1, outer-right -->
         <Column name="tirePressure"        arg="L20"   /> <!-- Axle #2, outer-left  -->
         <Column name="tirePressure"        arg="L21"   /> <!-- Axle #2, inner-left  -->
         <Column name="tirePressure"        arg="L22"   /> <!-- Axle #2, inner-right -->
         <Column name="tirePressure"        arg="L23"   /> <!-- Axle #2, outer-right -->
         <Column name="tirePressure"        arg="L30"   /> <!-- Axle #3, outer-left  -->
         <Column name="tirePressure"        arg="L31"   /> <!-- Axle #3, inner-left  -->
         <Column name="tirePressure"        arg="L32"   /> <!-- Axle #3, inner-right -->
         <Column name="tirePressure"        arg="L33"   /> <!-- Axle #3, outer-right -->
         <Column name="tirePressure"        arg="L40"   /> <!-- Axle #4, outer-left  -->
         <Column name="tirePressure"        arg="L41"   /> <!-- Axle #4, inner-left  -->
         <Column name="tirePressure"        arg="L42"   /> <!-- Axle #4, inner-right -->
         <Column name="tirePressure"        arg="L43"   /> <!-- Axle #4, outer-right -->
      </Columns>
      <Constraints>
         <SelectionLimit type="first">10000</SelectionLimit>
         <ReportLimit>10000</ReportLimit>
         <OrderAscending>true</OrderAscending>
      </Constraints>
      <Property key="reportDataFieldEnabled">false</Property>
   </Report>

   <!-- event detail report showing all events for a given device -->
   <Report name="EventDetailDriver" type="device.detail" 
        class="org.opengts.war.report.event.EventDetailReport"
        layout="org.opengts.war.report.event.EventDataLayout"
        modules="extra"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.eventDetailDriver.menu">Event Detail (Driver)</MenuDescription>
      <Title i18n="ReportsXML.eventDetailDriver.title">Event Detail (Driver)</Title>
      <Subtitle i18n="ReportsXML.eventDetailDriver.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"             arg="mapLink" ifTrue="columnIndexMapLink"/>
         <Column name="index"                           ifFalse="columnIndexMapLink"/>
         <Column name="dateTime"                        />
         <Column name="address"                         />
         <Column name="driverId"                        />
         <Column name="driverStatus"      arg="desc"    />
      </Columns>
      <Constraints>
         <SelectionLimit type="first">3000</SelectionLimit>
         <ReportLimit>3000</ReportLimit>
         <OrderAscending>true</OrderAscending>
      </Constraints>
      <MapIconSelector ruleFactoryName="GTSRulesEngine,SecureENRE,ENRE">
        <!-- an installed "RuleFactory" implementation is required which can analyze this iconSelector -->
        <![CDATA[ ((mph<4)?"reddot":(speed<15)?"yellow":"heading") ]]>
      </MapIconSelector> 
   </Report>

   <!-- example device detail report showing digital input states of all events for a given device -->
   <Report name="EventInput" type="device.detail"
        class="org.opengts.war.report.event.EventDetailReport"
        layout="org.opengts.war.report.event.EventDataLayout"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.eventInput.menu">Event Digital Input</MenuDescription>
      <Title i18n="ReportsXML.eventInput.title">Event Digital Input</Title>
      <Subtitle i18n="ReportsXML.eventInput.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"             arg="mapLink" ifTrue="columnIndexMapLink"/>
         <Column name="index"                           ifFalse="columnIndexMapLink"/>
         <Column name="date"                            />
         <Column name="time"                            />
         <Column name="statusDesc"          arg="color" />
         <Column name="geoPoint"            arg="5"     ifTrue="columnLatLon"/>
         <Column name="inputState"          arg="8"     ifTrue="columnInputState8"/>
         <Column name="inputState"          arg="16"    ifTrue="columnInputState16"/>
         <Column name="address"                         />
      </Columns>
      <Constraints>
         <SelectionLimit type="first">2000</SelectionLimit>
         <ReportLimit>2000</ReportLimit>
      </Constraints>
      <Property key="gpsAgeColorRange">1200:#550000,3600:#BB0000</Property>
   </Report>

   <!-- EventData detail report showing "Initialize" events -->
   <Report name="EventReboot" type="device.detail" 
        class="org.opengts.war.report.event.EventDetailReport"
        layout="org.opengts.war.report.event.EventDataLayout"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.eventReboot.menu">Device Initialization/Reboot</MenuDescription>
      <Title i18n="ReportsXML.eventReboot.title">Device Initialization/Reboot</Title>
      <Subtitle i18n="ReportsXML.eventReboot.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"             arg="mapLink" ifTrue="columnIndexMapLink"/>
         <Column name="index"                           ifFalse="columnIndexMapLink"/>
         <Column name="dateTime"                        />
         <Column name="statusDesc"          arg="color" />
         <Column name="geoPoint"            arg="4"     ifTrue="columnLatLon"/>
         <Column name="speedH"                          />
         <Column name="address"                         />
      </Columns>
      <Constraints>
         <TimeStart>-1</TimeStart>
         <TimeEnd>-1</TimeEnd>
         <ValidGPSRequired>false</ValidGPSRequired>
         <Where type="mysql"><![CDATA[ (statusCode = 0xF010) ]]></Where>
         <SelectionLimit type="first">1000</SelectionLimit>
         <ReportLimit>1000</ReportLimit>
      </Constraints>
      <MapIconSelector ruleFactoryName="GTSRulesEngine,SecureENRE,ENRE">
         <!-- an installed "RuleFactory" implementation is required which can analyze this iconSelector -->
         <![CDATA[ ("bluedot") ]]>
      </MapIconSelector> 
      <Property key="gpsAgeColorRange">1200:#550000,3600:#BB0000</Property>
   </Report>

   <!-- EventData detail report showing "Waymark_0" events -->
   <Report name="EventWaymark0Detail" type="device.detail" 
        class="org.opengts.war.report.event.EventDetailReport"
        layout="org.opengts.war.report.event.EventDataLayout"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.eventWaymark0Detail.menu">Device '${statusCodeDesc:0xF030}' Locations</MenuDescription>
      <Title i18n="ReportsXML.eventWaymark0Detail.title">Device '${statusCodeDesc:0xF030}' Locations</Title>
      <Subtitle i18n="ReportsXML.eventWaymark0Detail.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"             arg="mapLink" ifTrue="columnIndexMapLink"/>
         <Column name="index"                           ifFalse="columnIndexMapLink"/>
         <Column name="dateTime"                        />
         <Column name="statusDesc"          arg="color" />
         <Column name="pushpin"                         ifTrue="columnPushpin"/>
         <Column name="geoPoint"            arg="4"     ifTrue="columnLatLon"/>
         <Column name="address"                         />
         <Column name="geozoneDesc"                     ifTrue="columnGeozoneDesc"/>
         <Column name="driverMessage"                   ifTrue="columnDriverMessage"/>
      </Columns>
      <Constraints>
         <TimeStart>-1</TimeStart>
         <TimeEnd>-1</TimeEnd>
         <ValidGPSRequired>false</ValidGPSRequired>
         <Where type="mysql"><![CDATA[ (statusCode = 0xF030) ]]></Where>
         <SelectionLimit type="first">1000</SelectionLimit>
         <ReportLimit>1000</ReportLimit>
      </Constraints>
      <MapIconSelector ruleFactoryName="GTSRulesEngine,SecureENRE,ENRE">
        <!-- an installed "RuleFactory" implementation is required which can analyze this iconSelector -->
        <![CDATA[ ("reddot") ]]>
      </MapIconSelector> 
      <Property key="gpsAgeColorRange">1200:#550000,3600:#BB0000</Property>
   </Report>

   <!-- EventData detail report showing "Waymark_1" events -->
   <Report name="EventWaymark1Detail" type="device.detail" 
        class="org.opengts.war.report.event.EventDetailReport"
        layout="org.opengts.war.report.event.EventDataLayout"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.eventWaymark1Detail.menu">Device '${statusCodeDesc:0xF031}' Locations</MenuDescription>
      <Title i18n="ReportsXML.eventWaymark1Detail.title">Device '${statusCodeDesc:0xF031}' Locations</Title>
      <Subtitle i18n="ReportsXML.eventWaymark1Detail.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"             arg="mapLink" ifTrue="columnIndexMapLink"/>
         <Column name="index"                           ifFalse="columnIndexMapLink"/>
         <Column name="dateTime"                        />
         <Column name="statusDesc"          arg="color" />
         <Column name="pushpin"                         ifTrue="columnPushpin"/>
         <Column name="geoPoint"            arg="4"     ifTrue="columnLatLon"/>
         <Column name="address"                         />
         <Column name="geozoneDesc"                     ifTrue="columnGeozoneDesc"/>
         <Column name="driverMessage"                   ifTrue="columnDriverMessage"/>
      </Columns>
      <Constraints>
         <TimeStart>-1</TimeStart>
         <TimeEnd>-1</TimeEnd>
         <ValidGPSRequired>false</ValidGPSRequired>
         <Where type="mysql"><![CDATA[ (statusCode = 0xF031) ]]></Where>
         <SelectionLimit type="first">1000</SelectionLimit>
         <ReportLimit>1000</ReportLimit>
      </Constraints>
      <MapIconSelector ruleFactoryName="GTSRulesEngine,SecureENRE,ENRE">
        <!-- an installed "RuleFactory" implementation is required which can analyze this iconSelector -->
        <![CDATA[ ("reddot") ]]>
      </MapIconSelector> 
      <Property key="gpsAgeColorRange">1200:#550000,3600:#BB0000</Property>
   </Report>

   <!-- EventData detail report showing "STATUS_MOTION_EXCESS_IDLE" events -->
   <Report name="EventIdle" type="device.detail" 
        class="org.opengts.war.report.event.EventDetailReport"
        layout="org.opengts.war.report.event.EventDataLayout"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.eventIdle.menu">Idle</MenuDescription>
      <Title i18n="ReportsXML.eventIdle.title">Idle</Title>
      <Subtitle i18n="ReportsXML.eventIdle.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"             arg="mapLink" ifTrue="columnIndexMapLink"/>
         <Column name="index"                           ifFalse="columnIndexMapLink"/>
         <Column name="dateTime"                        />
         <Column name="statusDesc"          arg="color" />
         <Column name="geoPoint"            arg="4"     ifTrue="columnLatLon"/>
         <Column name="address"                         />
      </Columns>
      <Constraints>
         <TimeStart>-1</TimeStart>
         <TimeEnd>-1</TimeEnd>
         <ValidGPSRequired>false</ValidGPSRequired>
         <Where type="mysql"><![CDATA[ ((statusCode = 0xF116) or (statusCode = 0xF118)) ]]></Where>
         <SelectionLimit type="first">1000</SelectionLimit>
         <ReportLimit>1000</ReportLimit>
      </Constraints>
      <MapIconSelector ruleFactoryName="GTSRulesEngine,SecureENRE,ENRE">
         <!-- an installed "RuleFactory" implementation is required which can analyze this iconSelector -->
         <![CDATA[ ("bluedot") ]]>
      </MapIconSelector> 
      <Property key="gpsAgeColorRange">1200:#550000,3600:#BB0000</Property>
   </Report>

   <!-- EventData detail report showing "STATUS_MOTION_EXCESS_IDLE" events -->
   <Report name="EventExcessiveIdle" type="device.detail" 
        class="org.opengts.war.report.event.EventDetailReport"
        layout="org.opengts.war.report.event.EventDataLayout"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.eventExcessiveIdle.menu">Excessive Idle</MenuDescription>
      <Title i18n="ReportsXML.eventExcessiveIdle.title">Excessive Idle</Title>
      <Subtitle i18n="ReportsXML.eventExcessiveIdle.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"             arg="mapLink" ifTrue="columnIndexMapLink"/>
         <Column name="index"                           ifFalse="columnIndexMapLink"/>
         <Column name="dateTime"                        />
         <Column name="statusDesc"          arg="color" />
         <Column name="geoPoint"            arg="4"     ifTrue="columnLatLon"/>
         <Column name="address"                         />
      </Columns>
      <Constraints>
         <TimeStart>-1</TimeStart>
         <TimeEnd>-1</TimeEnd>
         <ValidGPSRequired>false</ValidGPSRequired>
         <Where type="mysql"><![CDATA[ (statusCode = 0xF118) ]]></Where>
         <SelectionLimit type="first">1000</SelectionLimit>
         <ReportLimit>1000</ReportLimit>
      </Constraints>
      <MapIconSelector ruleFactoryName="GTSRulesEngine,SecureENRE,ENRE">
         <!-- an installed "RuleFactory" implementation is required which can analyze this iconSelector -->
         <![CDATA[ ("bluedot") ]]>
      </MapIconSelector> 
      <Property key="gpsAgeColorRange">1200:#550000,3600:#BB0000</Property>
   </Report>

   <!-- event detail report showing all events for a given device (for custom CSV columns) -->
   <Report name="EventDetailCSV" type="device.detail" 
        class="org.opengts.war.report.event.EventDetailReport"
        layout="org.opengts.war.report.event.EventDataLayout"
        modules="extra"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.eventDetail.menu">Event Detail (CSV)</MenuDescription>
      <Title i18n="ReportsXML.eventDetail.title">Event Detail (CSV)</Title>
      <Subtitle i18n="ReportsXML.eventDetail.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"                           description="INDEX"/>
         <Column name="date"                            description="DATE"/>
         <Column name="time"                            description="TIME"/>
         <Column name="statusDesc"          arg="color" description="CODE"/>
         <Column name="geoPoint"            arg="5"     description="LOCATION"/>
         <Column name="speedH"              arg="1"     description="SPEED"/>
         <Column name="altitude"                        description="ALTITUDE"/>
         <Column name="odometer"            arg="0"     description="ODOMETER"/>
         <Column name="address"                         description="ADDRESS"/>
         <Column name="geozoneDesc"                     description="GEOZONE"/>
      </Columns>
      <Constraints>
         <SelectionLimit type="first">3000</SelectionLimit>
         <ReportLimit>3000</ReportLimit>
         <OrderAscending>true</OrderAscending>
      </Constraints>
      <Property key="csvColumnHeaderDescriptions">true</Property>
   </Report>

   <!-- minimal event detail report -->
   <Report name="CTEventDetail" type="device.detail" 
        class="org.opengts.war.report.event.EventDetailReport"
        layout="org.opengts.war.report.event.EventDataLayout"
        modules="extra"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.eventDetail.menu">Celltrac Event Detail</MenuDescription>
      <Title i18n="ReportsXML.eventDetail.title">Celltrac Event Detail</Title>
      <Subtitle i18n="ReportsXML.eventDetail.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"                           i18n="ReportsXML.CTEventDetail.index"  >#</Column>
         <Column name="dateTime"                        i18n="ReportsXML.CTEventDetail.date"   >Date</Column>
         <Column name="statusDesc"                      i18n="ReportsXML.CTEventDetail.Status" >Status</Column>
         <Column name="geoPoint"            arg="4"     i18n="ReportsXML.CTEventDetail.latLon" >Lat/Lon</Column>
         <Column name="speedH"              arg="1"     i18n="ReportsXML.CTEventDetail.speedH" >Speed</Column>
     <!-- Column name="odometer"            arg="0"     i18n="ReportsXML.CTEventDetail.odom"   >Odom</Column -->
         <Column name="address"                         i18n="ReportsXML.CTEventDetail.address">Address</Column>
      </Columns>
      <Constraints>
         <SelectionLimit type="first">500</SelectionLimit>
         <ReportLimit>500</ReportLimit>
         <OrderAscending>true</OrderAscending>
      </Constraints>
      <MapIconSelector ruleFactoryName="GTSRulesEngine,SecureENRE,ENRE">
        <!-- an installed "RuleFactory" implementation is required which can analyze this iconSelector -->
        <![CDATA[ ((mph<4)?"reddot":(speed<15)?"yellow":"heading") ]]>
      </MapIconSelector> 
      <Property key="callbackColumnHeaderDescriptions">true</Property>
      <Property key="gpsAgeColorRange">1200:#550000,3600:#BB0000</Property>
   </Report>
   
   <!-- ==================================================================== -->

   <!-- Event counts by Device by Day -->
   <Report name="EventCountByDay" type="device.detail" 
        class="org.opengts.war.report.field.EventCountReport"
        layout="org.opengts.war.report.field.FieldLayout"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.eventCountByDay.menu">Received Event Counts by Day</MenuDescription>
      <Title i18n="ReportsXML.eventCountByDay.title">Count of ${description} Received Events by Day</Title>
      <Subtitle i18n="ReportsXML.eventCountByDay.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"                       />
         <Column name="date"                        />
         <Column name="count"                       />
      </Columns>
      <Options type="list">
         <Option name="all">
            <Description i18n="ReportsXML.eventCountByDay.all">All</Description>
            <Property key="count.where"><![CDATA[ (1=1) ]]></Property>
            </Option>
         <Option name="initialization">
            <Description i18n="ReportsXML.eventCountByDay.initialization">'Initialization'</Description>
            <Property key="count.where"><![CDATA[ (statusCode = 0xF010) ]]></Property>
            </Option>
         <Option name="inmotion">
            <Description i18n="ReportsXML.eventCountByDay.inmotion">'In-Motion'</Description>
            <Property key="count.where"><![CDATA[ (statusCode = 0xF112) ]]></Property>
            </Option>
      </Options>
      <Constraints>
         <Where type="mysql"><![CDATA[ ${count.where=} ]]></Where>
      </Constraints>
      <Property key="summarizeByDay">true</Property>
   </Report>

   <!-- Garmin Driver message Detail -->
   <Report name="DriverMessageDetail" type="device.detail" 
        class="org.opengts.war.report.event.EventDetailReport"
        layout="org.opengts.war.report.event.EventDataLayout"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.messageDetail.menu">Driver Message Detail</MenuDescription>
      <Title i18n="ReportsXML.messageDetail.title">Driver Message Detail</Title>
      <Subtitle i18n="ReportsXML.messageDetail.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"         arg="mapLink" ifTrue="columnIndexMapLink"/>
         <Column name="index"                       ifFalse="columnIndexMapLink"/>
         <Column name="dateTime"                    />
         <Column name="statusDesc"      arg="color" />
         <Column name="driverMessage"               />
      </Columns>
      <Constraints>
         <SelectionLimit type="first">2000</SelectionLimit>
         <ReportLimit>2000</ReportLimit>
         <OrderAscending>true</OrderAscending>
         <!--
          === 0xE103 = Send Driver Non-ACK Message
          === 0xE104 = Send Driver ACK Message
          === 0xE1B1 = Receive Driver Message
          === 0xF215 = Job Arrive
          === 0xF235 = Job Depart
          -->
         <Where type="mysql"><![CDATA[ 
            ((statusCode=0xE103) || (statusCode=0xE104) || (statusCode=0xE1B1) || (statusCode=0xF215) || (statusCode=0xF235)) 
            ]]></Where>
      </Constraints>
      <Property key="gpsAgeColorRange">1200:#550000,3600:#BB0000</Property>
   </Report>

   <!-- example device detail report showing all events for a given device -->
   <Report name="EventDetailOBD" type="device.detail" 
        class="org.opengts.war.report.event.EventDetailReport"
        layout="org.opengts.war.report.event.EventDataLayout"
        modules="extra"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.eventDetailOBD.menu">OBD Event Detail</MenuDescription>
      <Title i18n="ReportsXML.eventDetailOBD.title">OBD Event Detail</Title>
      <Subtitle i18n="ReportsXML.eventDetailOBD.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"              arg="mapLink" ifTrue="columnIndexMapLink"/>
         <Column name="index"                            ifFalse="columnIndexMapLink"/>
         <Column name="dateTime"                         />
         <Column name="statusDesc"        arg="color"    ifTrue="EventDetailOBD.statusDesc"        />
         <Column name="geoPoint"          arg="5"        ifTrue="EventDetailOBD.geoPoint"          />
         <Column name="address"                          ifTrue="EventDetailOBD.address"           />
         <Column name="geozoneDesc"                      ifTrue="EventDetailOBD.geozoneDesc"       />
         <Column name="speedH"            arg="1"        ifTrue="EventDetailOBD.speedH"            />
         <Column name="speedLimit"        arg="0"        ifTrue="EventDetailOBD.speedLimit"        />
         <Column name="altitude"                         ifTrue="EventDetailOBD.altitude"          />
         <Column name="odometer"          arg="0"        ifTrue="EventDetailOBD.odometer"          />
         <Column name="fuelLevel"                        ifTrue="EventDetailOBD.fuelLevel"         />
         <Column name="fuelEconomy"                      ifTrue="EventDetailOBD.fuelEconomy"       />
         <Column name="fuelTotal"                        ifTrue="EventDetailOBD.fuelTotal"         />
         <Column name="fuelIdle"                         ifTrue="EventDetailOBD.fuelIdle"          />
         <Column name="fuelPressure"                     ifTrue="EventDetailOBD.fuelPressure"      />
         <Column name="fuelRate"                         ifTrue="EventDetailOBD.fuelRate"          />
         <Column name="engineRpm"                        ifTrue="EventDetailOBD.engineRpm"         />
         <Column name="engineHours"       arg="1"        ifTrue="EventDetailOBD.engineHours"       />
         <Column name="engineLoad"                       ifTrue="EventDetailOBD.engineLoad"        />
         <Column name="idleHours"         blankFill="--" ifTrue="EventDetailOBD.idleHours"         />
         <Column name="transOilTemp"                     ifTrue="EventDetailOBD.transOilTemp"      />
         <Column name="oilCoolerInTemp"                  ifTrue="EventDetailOBD.oilCoolerInTemp"   />
         <Column name="oilCoolerOutTemp"                 ifTrue="EventDetailOBD.oilCoolerOutTemp"  />
         <Column name="coolantLevel"                     ifTrue="EventDetailOBD.coolantLevel"      />
         <Column name="coolantTemp"                      ifTrue="EventDetailOBD.coolantTemp"       />
         <Column name="engineTemp"                       ifTrue="EventDetailOBD.engineTemp"        />
         <Column name="brakeGForce"       blankFill="--" ifTrue="EventDetailOBD.brakeGForce"       />
         <Column name="brakePressure"                    ifTrue="EventDetailOBD.brakePressure"     />
         <Column name="brakePos"                         ifTrue="EventDetailOBD.brakePos"          />
         <Column name="oilLevel"                         ifTrue="EventDetailOBD.oilLevel"          />
         <Column name="oilPressure"       blankFill="--" ifTrue="EventDetailOBD.oilPressure"       />
         <Column name="ptoEngaged"                       ifTrue="EventDetailOBD.ptoEngaged"        />
         <Column name="ptoHours"          arg="1"        ifTrue="EventDetailOBD.ptoHours"          />
         <Column name="vBatteryVolts"                    ifTrue="EventDetailOBD.vBatteryVolts"     />
         <Column name="throttlePos"                      ifTrue="EventDetailOBD.throttlePos"       />
         <Column name="intakeTemp"                       ifTrue="EventDetailOBD.intakeTemp"        />
         <Column name="airPressure"       blankFill="--" ifTrue="EventDetailOBD.airPressure"       />
         <Column name="airFilterPressure" blankFill="--" ifTrue="EventDetailOBD.airFilterPressure" />
         <Column name="turboPressure"     blankFill="--" ifTrue="EventDetailOBD.turboPressure"     />
         <Column name="malfunctionLamp"                  ifTrue="EventDetailOBD.malfunctionLamp"   />
         <Column name="faultCode"         arg="desc"     ifTrue="EventDetailOBD.faultCode"         />
         <Column name="faultCodes"        arg="desc"     ifTrue="EventDetailOBD.faultCodes"        />
      </Columns>
      <Constraints>
         <SelectionLimit type="first">2000</SelectionLimit>
         <ReportLimit>2000</ReportLimit>
         <OrderAscending>true</OrderAscending>
      </Constraints>
      <MapIconSelector ruleFactoryName="GTSRulesEngine,SecureENRE,ENRE">
        <!-- an installed "RuleFactory" implementation is required which can analyze this iconSelector -->
        <![CDATA[ ((mph<4)?"reddot":(speed<15)?"yellow":"heading") ]]>
      </MapIconSelector> 
      <Property key="gpsAgeColorRange">1200:#550000,3600:#BB0000</Property>
   </Report>

   <!-- example device detail report showing OBD events for Light Trucks -->
   <Report name="EventDetailOBDLight" type="device.detail" 
        class="org.opengts.war.report.event.EventDetailReport"
        layout="org.opengts.war.report.event.EventDataLayout"
        modules="extra"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.eventDetailOBDLight.menu">OBD Light Truck Event Detail</MenuDescription>
      <Title i18n="ReportsXML.eventDetailOBDLight.title">OBD Light Truck Event Detail</Title>
      <Subtitle i18n="ReportsXML.eventDetailOBDLight.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"              arg="mapLink" ifTrue="columnIndexMapLink"/>
         <Column name="index"                            ifFalse="columnIndexMapLink"/>
         <Column name="dateTime"                         />
         <Column name="statusDesc"        arg="color"    ifTrue="EventDetailOBD.statusDesc"        />
         <Column name="pushpin"                          ifTrue="columnPushpin"                    />
         <Column name="address"                          ifTrue="EventDetailOBD.address"           />
         <Column name="speedH"            arg="1"        ifTrue="EventDetailOBD.speedH"            />
         <Column name="speedLimit"        arg="0"        ifTrue="EventDetailOBD.speedLimit"        />
         <Column name="altitude"                         ifTrue="EventDetailOBD.altitude"          />
         <Column name="odometer"          arg="0"        ifTrue="EventDetailOBD.odometer"          />
         <Column name="fuelLevel"                        ifTrue="EventDetailOBD.fuelLevel"         />
         <Column name="fuelRate"                         ifTrue="EventDetailOBD.fuelRate"          />
         <Column name="engineRpm"                        ifTrue="EventDetailOBD.engineRpm"         />
         <Column name="idleHours"         blankFill="--" ifTrue="EventDetailOBD.idleHours"         />
         <Column name="coolantTemp"                      ifTrue="EventDetailOBD.coolantTemp"       />
         <Column name="engineTemp"                       ifTrue="EventDetailOBD.engineTemp"        />
         <Column name="brakeGForce"       blankFill="--" ifTrue="EventDetailOBD.brakeGForce"       />
         <Column name="vBatteryVolts"                    ifTrue="EventDetailOBD.vBatteryVolts"     />
         <Column name="throttlePos"                      ifTrue="EventDetailOBD.throttlePos"       />
         <Column name="malfunctionLamp"                  ifTrue="EventDetailOBD.malfunctionLamp"   />
         <Column name="faultCode"         arg="desc"     ifTrue="EventDetailOBD.faultCode"         />
         <Column name="faultCodes"        arg="desc"     ifTrue="EventDetailOBD.faultCodes"        />
         <Column name="driverId"                         />
         <Column name="driverStatus"      arg="desc"     />
      </Columns>
      <Constraints>
         <SelectionLimit type="first">2000</SelectionLimit>
         <ReportLimit>2000</ReportLimit>
         <OrderAscending>true</OrderAscending>
      </Constraints>
      <MapIconSelector ruleFactoryName="GTSRulesEngine,SecureENRE,ENRE">
        <!-- an installed "RuleFactory" implementation is required which can analyze this iconSelector -->
        <![CDATA[ ((mph<4)?"reddot":(speed<15)?"yellow":"heading") ]]>
      </MapIconSelector> 
      <Property key="gpsAgeColorRange">1200:#550000,3600:#BB0000</Property>
   </Report>

   <!-- example device detail report showing all events for a given device -->
   <Report name="EventDetailOBDshort" type="device.detail" 
        class="org.opengts.war.report.event.EventDetailReport"
        layout="org.opengts.war.report.event.EventDataLayout"
        modules="extra"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.eventDetailOBDShort.menu">OBD Event Detail (abbrev)</MenuDescription>
      <Title i18n="ReportsXML.eventDetailOBDShort.title">OBD Event Detail (abbrev)</Title>
      <Subtitle i18n="ReportsXML.eventDetailOBDShort.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"             arg="mapLink" ifTrue="columnIndexMapLink"/>
         <Column name="index"                           ifFalse="columnIndexMapLink"/>
         <Column name="date"                            />
         <Column name="time"                            />
         <Column name="statusDesc"          arg="color" />
         <Column name="geoPoint"            arg="5"     ifTrue="columnLatLon"/>
         <Column name="address"                         />
         <Column name="geozoneDesc"                     />
         <Column name="speedH"              arg="1"     />
         <Column name="speedLimit"          arg="0"     ifTrue="columnSpeedLimit"/>
         <Column name="altitude"                        />
         <Column name="odometer"            arg="0"     /> <!-- ifTrue="columnOdometer" -->
         <Column name="fuelLevel"                       />
         <Column name="fuelEconomy"                     />
         <Column name="engineRpm"                       />
         <Column name="vBatteryVolts"                   />
      </Columns>
      <Constraints>
         <SelectionLimit type="first">2000</SelectionLimit>
         <ReportLimit>2000</ReportLimit>
         <OrderAscending>true</OrderAscending>
      </Constraints>
      <MapIconSelector ruleFactoryName="GTSRulesEngine,SecureENRE,ENRE">
        <!-- an installed "RuleFactory" implementation is required which can analyze this iconSelector -->
        <![CDATA[ ((mph<4)?"reddot":(speed<15)?"yellow":"heading") ]]>
      </MapIconSelector>
      <Property key="gpsAgeColorRange">1200:#550000,3600:#BB0000</Property>
   </Report>

   <!-- event detail report showing events with raw data packets -->
   <Report name="EventRawData" type="device.detail" 
        class="org.opengts.war.report.event.EventDetailReport"
        layout="org.opengts.war.report.event.EventDataLayout"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.eventDetailAll.menu">Event Raw Data Packets</MenuDescription>
      <Title i18n="ReportsXML.eventDetailAll.title">Event Raw Data Packets</Title>
      <Subtitle i18n="ReportsXML.eventDetailAll.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"                           />
         <Column name="deviceUniqueID"                  />
         <Column name="deviceId"                        />
         <Column name="dateTime"                        />
         <Column name="statusCode"                      />
         <Column name="createDateTime"                  />
         <Column name="rawData"                         />
      </Columns>
      <Constraints>
         <SelectionLimit type="last">5000</SelectionLimit>
         <ReportLimit>5000</ReportLimit>
         <OrderAscending>true</OrderAscending>
      </Constraints>
      <Property key="reportDataFieldEnabled">false</Property>
   </Report>

   <!-- Property list -->
   <Report name="PropertyValue" type="device.detail" 
        class="org.opengts.war.report.dmtp.PropertyReport"
        layout="org.opengts.war.report.field.FieldLayout"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.propertyValue.menu">Property Values</MenuDescription>
      <Title i18n="ReportsXML.propertyValue.title">Property Values</Title>
      <Subtitle i18n="ReportsXML.propertyValue.subtitle">${deviceDesc} [${deviceId}]</Subtitle>
      <Columns>
         <Column name="index"                       />
         <Column name="propertyKey"                 />
         <Column name="propertyDesc"                />
         <Column name="propertyValue"               />
      </Columns>
   </Report>

   <!-- Diagnostic list -->
   <Report name="DiagnosticValue" type="device.detail" 
        class="org.opengts.war.report.dmtp.DiagnosticReport"
        layout="org.opengts.war.report.field.FieldLayout"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.diagnosticValue.menu">Error/Diagnostic Values</MenuDescription>
      <Title i18n="ReportsXML.diagnosticValue.title">Error/Diagnostic Values</Title>
      <Subtitle i18n="ReportsXML.diagnosticValue.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"                       />
         <Column name="dateTime"                    />
         <Column name="diagKey"                     />
         <Column name="diagDesc"                    />
         <Column name="diagValue"                   />
      </Columns>
   </Report>

   <!-- example device summary report showing the driving and idle times for a given device -->
   <Report name="MotionSummary" type="device.detail" 
        class="org.opengts.war.report.field.MotionReport"
        layout="org.opengts.war.report.field.FieldLayout"
        sortable="false"
        >
      <MenuDescription i18n="ReportsXML.motionSummary.menu">Driving/Stopped Time Summary</MenuDescription>
      <Title i18n="ReportsXML.motionSummary.title">Driving/Stopped Time Summary [${description}]</Title>
      <Subtitle i18n="ReportsXML.motionSummary.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"                       />
         <!-- Column name="deviceId"                / -->
         <!-- Column name="deviceDesc"              / -->
         <Column name="startDateTime"               />   <!-- "Start Time"          -->
         <Column name="stopDateTime"                />   <!-- "Stop Time"           -->
         <Column name="tripElapse"                  />   <!-- "Trip Elapsed"        -->
         <Column name="odomDelta"           arg="1" ifTrue="columnOdometer"/>      <!-- "Miles" (driven)      -->
         <Column name="fuelEconomy"         arg="1" ifTrue="columnFuelEconomy"/>   <!-- "Fuel Econ" (at stop) -->
         <Column name="stopGeoPoint"        arg="4" ifTrue="columnLatLon"/>        <!-- "Lat/Lon" (at stop)   -->
         <Column name="stopOdometer"        arg="1" ifTrue="columnOdometer"/>      <!-- "Odometer" (at stop)   -->
         <Column name="stopAddress"                 />   <!-- "Address" (at stop)   -->
         <Column name="idleElapse"                  i18n="ReportsXML.motionSummary.tripIdleElapsed">Trip Idle\nElapsed</Column>
         <Column name="stopElapse"                  />   <!-- "Stop Elapsed Time"   -->
         <Column name="odomDeltaWH"         arg="1" ifTrue="MotionSummary.tabulateByWorkHours"/>
         <Column name="tripElapseWH"                ifTrue="MotionSummary.tabulateByWorkHours"/>
      </Columns>
      <Options type="list">
         <Option name="default" ifTrue="optionTripStartType_default">
            <Description i18n="ReportsXML.motionSummary.default">Default</Description>
            <Property key="tripStartType">default</Property>
            <Property key="minimumStoppedTime">300</Property> <!-- seconds -->
            <Property key="minimumSpeedKPH">0.0</Property>
            <Property key="stopOnIgnitionOff">true</Property>
            </Option>
         <Option name="ignition" ifTrue="optionTripStartType_ignition">
            <Description i18n="ReportsXML.motionSummary.ignition">Based on Ignition On/Off Status Codes</Description>
            <Property key="tripStartType">ignition</Property>
            <Property key="minimumSpeedKPH">0.0</Property>
            </Option>
         <Option name="startstop" ifTrue="optionTripStartType_startstop">
            <Description i18n="ReportsXML.motionSummary.startstop">Based on Motion Start/Stop Status Codes</Description>
            <Property key="tripStartType">startstop</Property>
            <Property key="minimumSpeedKPH">0.0</Property>
            <Property key="stopOnIgnitionOff">true</Property>
            </Option>
         <Option name="engine" ifTrue="optionTripStartType_engine">
            <Description i18n="ReportsXML.motionSummary.engine">Based on Engine Start/Stop Status Codes</Description>
            <Property key="tripStartType">engine</Property>
            <Property key="minimumSpeedKPH">0.0</Property>
            <Property key="stopOnIgnitionOff">true</Property>
            </Option>
         <Option name="motion0" ifTrue="optionTripStartType_motion">
            <Description i18n="ReportsXML.motionSummary.motion0">Based on 0 Minute Minimum Stop</Description>
            <Property key="tripStartType">motion</Property>
            <Property key="minimumStoppedTime">0</Property> <!-- seconds -->
            <Property key="minimumSpeedKPH">0.0</Property>
            <Property key="stopOnIgnitionOff">false</Property>
            </Option>
         <Option name="motion5" ifTrue="optionTripStartType_motion">
            <Description i18n="ReportsXML.motionSummary.motion5">Based on 5 Minute Minimum Stop</Description>
            <Property key="tripStartType">motion</Property>
            <Property key="minimumStoppedTime">300</Property> <!-- seconds -->
            <Property key="minimumSpeedKPH">0.0</Property>
            <Property key="stopOnIgnitionOff">false</Property>
            </Option>
         <Option name="motion10" ifTrue="optionTripStartType_motion">
            <Description i18n="ReportsXML.motionSummary.motion10">Based on 10 Minute Minimum Stop</Description>
            <Property key="tripStartType">motion</Property>
            <Property key="minimumStoppedTime">600</Property> <!-- seconds -->
            <Property key="minimumSpeedKPH">0.0</Property>
            <Property key="stopOnIgnitionOff">false</Property>
            </Option>
         <Option name="motion20" ifTrue="optionTripStartType_motion">
            <Description i18n="ReportsXML.motionSummary.motion20">Based on 20 Minute Minimum Stop</Description>
            <Property key="tripStartType">motion</Property>
            <Property key="minimumStoppedTime">1200</Property> <!-- seconds -->
            <Property key="minimumSpeedKPH">0.0</Property>
            <Property key="stopOnIgnitionOff">false</Property>
            </Option>
         <Option name="motion30" ifTrue="optionTripStartType_motion">
            <Description i18n="ReportsXML.motionSummary.motion30">Based on 30 Minute Minimum Stop</Description>
            <Property key="tripStartType">motion</Property>
            <Property key="minimumStoppedTime">1800</Property> <!-- seconds -->
            <Property key="minimumSpeedKPH">0.0</Property>
            <Property key="stopOnIgnitionOff">false</Property>
            </Option>
      </Options>
      <Constraints>
         <!-- EventData records MUST be in ascending order -->
         <SelectionLimit type="first">20000</SelectionLimit>
         <ReportLimit>5000</ReportLimit>
      </Constraints>
      <MapIconSelector ruleFactoryName="GTSRulesEngine,SecureENRE,ENRE">
        <!-- an installed "RuleFactory" implementation is required which can analyze this iconSelector -->
        <![CDATA[ ((speed<5)?"reddot":"heading") ]]>
      </MapIconSelector> 
      <Property key="isFleetSummaryReport">false</Property>
      <Property key="legacyIdleDefinition">false</Property>
      <Property key="showMapLink">true</Property>
      <Property key="tripStartType">default</Property>
      <Property key="minimumStoppedTime">300</Property> <!-- seconds -->
      <Property key="minimumSpeedKPH">0.0</Property> <!-- kph -->
      <Property key="stopOnIgnitionOff">true</Property>
      <Property key="tabulateByWorkHours">${MotionSummary.tabulateByWorkHours=false}</Property>
      <Property key="WorkHours.sun">${MotionSummary.WorkHours.sun=}</Property>
      <Property key="WorkHours.mon">${MotionSummary.WorkHours.mon=06:00-18:00}</Property>
      <Property key="WorkHours.tue">${MotionSummary.WorkHours.tue=06:00-18:00}</Property>
      <Property key="WorkHours.wed">${MotionSummary.WorkHours.wed=06:00-18:00}</Property>
      <Property key="WorkHours.thu">${MotionSummary.WorkHours.thu=06:00-18:00}</Property>
      <Property key="WorkHours.fri">${MotionSummary.WorkHours.fri=06:00-18:00}</Property>
      <Property key="WorkHours.sat">${MotionSummary.WorkHours.sat=}</Property>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- Trip report detail with trip subtotals (based on default device supported 'start' type) -->
   <Report name="TripReport" type="device.detail" 
        class="org.opengts.extra.war.report.field.TripReport" 
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        optional="true"
        sortable="false"
        >
      <MenuDescription i18n="ReportsXML.tripReport.menu">Trip Report Detail</MenuDescription>
      <Title i18n="ReportsXML.TripReport.title">Trip Report Detail [${description}]</Title>
      <Subtitle i18n="ReportsXML.TripReport.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="date"                        />
         <Column name="time"                        />
         <Column name="statusDesc"                  />
         <Column name="geoPoint"            arg="5" ifTrue="columnLatLon"/>
         <Column name="address"                     />
         <Column name="speedH"              arg="0" />
         <Column name="speedDuration"               ifTrue="TripReport.showSpeedingDuration"/>
         <Column name="drivingElapse"       arg="0" i18n="ReportsXML.tripReport.tripElapsed">Trip\nElapsed</Column>
         <Column name="idleElapse"          arg="0" ifTrue="TripReport.showIdleElapsed"/>
         <Column name="odomDelta"           arg="1" />
         <Column name="fuelTotal"           arg="1" ifTrue="TripReport.showFuelTotal"/>
         <Column name="fuelTrip"            arg="2" ifTrue="TripReport.showFuelTrip"/>
         <Column name="fuelTrip"            arg="$" ifTrue="TripReport.showFuelTripCost"/>
         <Column name="fuelEconomy"         arg="1" ifTrue="TripReport.showFuelEconomy"/>
         <Column name="fuelEconomyType"             ifTrue="TripReport.showFuelEconomyType"/>
         <Column name="fuelRemain"          arg="1" ifTrue="TripReport.showFuelRemain"/>
         <Column name="fuelRefill"          arg="1" ifTrue="TripReport.showFuelRefill"/>
         <Column name="driverId"                    ifTrue="TripReport.showDriver"/>
         <Column name="driverDesc"                  ifTrue="TripReport.showDriver"/>
      </Columns>
      <Options type="list">
         <Option name="default" ifTrue="optionTripStartType_default">
            <Description i18n="ReportsXML.tripReport.default">Default</Description>
            <Property key="tripStartType">default</Property>
            <Property key="minimumStoppedTime">300</Property> <!-- seconds -->
            <Property key="minimumSpeedKPH">3.0</Property>
            <Property key="stopOnIgnitionOff">true</Property>
            </Option>
         <Option name="ignition" ifTrue="optionTripStartType_ignition">
            <Description i18n="ReportsXML.TripReport.ignition">Based on Ignition On/Off Status Codes</Description>
            <Property key="tripStartType">ignition</Property>
            </Option>
         <Option name="startstop" ifTrue="optionTripStartType_startstop">
            <Description i18n="ReportsXML.TripReport.startstop">Based on Motion Start/Stop Status Codes</Description>
            <Property key="tripStartType">startstop</Property>
            <Property key="stopOnIgnitionOff">true</Property>
            </Option>
         <Option name="engine" ifTrue="optionTripStartType_engine">
            <Description i18n="ReportsXML.TripReport.engine">Based on Engine Start/Stop Status Codes</Description>
            <Property key="tripStartType">engine</Property>
            <Property key="stopOnIgnitionOff">true</Property>
            </Option>
         <Option name="motion0" ifTrue="optionTripStartType_motion">
            <Description i18n="ReportsXML.TripReport.motion0">Based on 0 Minute Minimum Stop</Description>
            <Property key="tripStartType">motion</Property>
            <Property key="minimumStoppedTime">0</Property> <!-- seconds -->
            <Property key="minimumSpeedKPH">3.0</Property>
            <Property key="stopOnIgnitionOff">false</Property>
            </Option>
         <Option name="motion5" ifTrue="optionTripStartType_motion">
            <Description i18n="ReportsXML.TripReport.motion5">Based on 5 Minute Minimum Stop</Description>
            <Property key="tripStartType">motion</Property>
            <Property key="minimumStoppedTime">300</Property> <!-- seconds -->
            <Property key="minimumSpeedKPH">3.0</Property>
            <Property key="stopOnIgnitionOff">false</Property>
            </Option>
         <Option name="motion10" ifTrue="optionTripStartType_motion">
            <Description i18n="ReportsXML.TripReport.motion10">Based on 10 Minute Minimum Stop</Description>
            <Property key="tripStartType">motion</Property>
            <Property key="minimumStoppedTime">600</Property> <!-- seconds -->
            <Property key="minimumSpeedKPH">3.0</Property>
            <Property key="stopOnIgnitionOff">false</Property>
            </Option>
         <Option name="motion20" ifTrue="optionTripStartType_motion">
            <Description i18n="ReportsXML.TripReport.motion20">Based on 20 Minute Minimum Stop</Description>
            <Property key="tripStartType">motion</Property>
            <Property key="minimumStoppedTime">1200</Property> <!-- seconds -->
            <Property key="minimumSpeedKPH">3.0</Property>
            <Property key="stopOnIgnitionOff">false</Property>
            </Option>
         <Option name="motion30" ifTrue="optionTripStartType_motion">
            <Description i18n="ReportsXML.TripReport.motion30">Based on 30 Minute Minimum Stop</Description>
            <Property key="tripStartType">motion</Property>
            <Property key="minimumStoppedTime">1800</Property> <!-- seconds -->
            <Property key="minimumSpeedKPH">3.0</Property>
            <Property key="stopOnIgnitionOff">false</Property>
            </Option>
      </Options>
      <Constraints>
         <ValidGPSRequired>false</ValidGPSRequired>
         <SelectionLimit type="first">${TripReport.SelectionLimit=12000}</SelectionLimit>
         <ReportLimit>${TripReport.ReportLimit=8000}</ReportLimit>
      </Constraints>
      <Property key="tripStartType">default</Property>
      <Property key="minimumStoppedTime">300</Property>     <!-- seconds -->
      <Property key="minimumSpeedKPH">3.0</Property>        <!-- km/h -->
      <Property key="stopOnIgnitionOff">true</Property>
      <Property key="estimateFuelTotal">${TripReport.estimateFuelTotal=false}</Property>
      <Property key="kilometersPerLiter">${TripReport.kilometersPerLiter=0.0}</Property> <!-- 20 mpg = 8.5 km/L -->
      <Property key="tripStartStopOnly">${TripReport.tripStartStopOnly=false}</Property>
      <Property key="speedingThresholdKPH">${TripReport.speedingThresholdKPH=0.0}</Property>
      <Property key="minimumSpeedingDuration">${TripReport.minimumSpeedingDuration=0}</Property>
      <Property key="tripStopLookAheadSeconds">${TripReport.tripStopLookAheadSeconds=0}</Property>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- Ignition detail report -->
   <Report name="IgnitionDetailReport" type="device.detail" 
        class="org.opengts.extra.war.report.field.DigitalIOReport" 
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        optional="true"
        sortable="false"
        >
      <MenuDescription i18n="ReportsXML.ignitionDetail.menu">Ignition Detail Report</MenuDescription>
      <Title i18n="ReportsXML.ignitionDetail.title">Ignition Detail Report</Title>
      <Subtitle i18n="ReportsXML.ignitionDetail.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="enterDateTime"               i18n="ReportsXML.ignitionOn.column" >Ignition On\ntime</Column>
         <Column name="exitDateTime"                i18n="ReportsXML.ignitionOff.column">Ignition Off\ntime</Column>
         <Column name="address"                     />
         <Column name="elapseSec"           arg="0" />
         <Column name="odomDelta"           arg="0" ifTrue="DigitalIOReport.odometerDelta"/>
      </Columns>
      <Constraints>
         <ValidGPSRequired>false</ValidGPSRequired>
         <SelectionLimit type="first">3000</SelectionLimit>
         <ReportLimit>2000</ReportLimit>
      </Constraints>
      <Property key="reportType">detail</Property>
      <Property key="digitalInputIndex">ignition</Property>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- Digital input detail report -->
   <Report name="DigitalInputDetailReport" type="device.detail" 
        class="org.opengts.extra.war.report.field.DigitalIOReport" 
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        optional="true"
        sortable="false"
        >
      <MenuDescription i18n="ReportsXML.digInputDetail.menu">Digital Input Detail Report</MenuDescription>
      <Title i18n="ReportsXML.digInputDetail.title">Digital Input Detail Report [${description}]</Title>
      <Subtitle i18n="ReportsXML.digInputDetail.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="enterDateTime"               i18n="ReportsXML.inputOn.column" >Input On\ntime</Column>
         <Column name="exitDateTime"                i18n="ReportsXML.inputOff.column">Input Off\ntime</Column>
         <Column name="address"                     />
         <Column name="elapseSec"           arg="0" />
         <Column name="odomDelta"           arg="0" ifTrue="DigitalIOReport.odometerDelta"/>
      </Columns>
      <Options type="list">
         <Option name="input0">
            <Description i18n="ReportsXML.DigitalInputDetailReport.input_0">Input #0</Description>
            <Property key="digitalInputIndex">0</Property>
            </Option>
         <Option name="input1">
            <Description i18n="ReportsXML.DigitalInputDetailReport.input_1">Input #1</Description>
            <Property key="digitalInputIndex">1</Property>
            </Option>
         <Option name="input2">
            <Description i18n="ReportsXML.DigitalInputDetailReport.input_2">Input #2</Description>
            <Property key="digitalInputIndex">2</Property>
            </Option>
         <Option name="input3">
            <Description i18n="ReportsXML.DigitalInputDetailReport.input_3">Input #3</Description>
            <Property key="digitalInputIndex">3</Property>
            </Option>
         <Option name="input4">
            <Description i18n="ReportsXML.DigitalInputDetailReport.input_4">Input #4</Description>
            <Property key="digitalInputIndex">4</Property>
            </Option>
         <Option name="input5">
            <Description i18n="ReportsXML.DigitalInputDetailReport.input_5">Input #5</Description>
            <Property key="digitalInputIndex">5</Property>
            </Option>
         <Option name="input6">
            <Description i18n="ReportsXML.DigitalInputDetailReport.input_6">Input #6</Description>
            <Property key="digitalInputIndex">6</Property>
            </Option>
         <Option name="input7">
            <Description i18n="ReportsXML.DigitalInputDetailReport.input_7">Input #7</Description>
            <Property key="digitalInputIndex">7</Property>
            </Option>
         <!-- - ->
         <Option name="input8">
            <Description i18n="ReportsXML.DigitalInputDetailReport.input_8">Input #8</Description>
            <Property key="digitalInputIndex">8</Property>
            </Option>
         <Option name="input9">
            <Description i18n="ReportsXML.DigitalInputDetailReport.input_9">Input #9</Description>
            <Property key="digitalInputIndex">9</Property>
            </Option>
         <Option name="input10">
            <Description i18n="ReportsXML.DigitalInputDetailReport.input_10">Input #10</Description>
            <Property key="digitalInputIndex">10</Property>
            </Option>
         <Option name="input11">
            <Description i18n="ReportsXML.DigitalInputDetailReport.input_11">Input #11</Description>
            <Property key="digitalInputIndex">11</Property>
            </Option>
         <Option name="input12">
            <Description i18n="ReportsXML.DigitalInputDetailReport.input_12">Input #12</Description>
            <Property key="digitalInputIndex">12</Property>
            </Option>
         <Option name="input13">
            <Description i18n="ReportsXML.DigitalInputDetailReport.input_13">Input #13</Description>
            <Property key="digitalInputIndex">13</Property>
            </Option>
         <Option name="input14">
            <Description i18n="ReportsXML.DigitalInputDetailReport.input_14">Input #14</Description>
            <Property key="digitalInputIndex">14</Property>
            </Option>
         <Option name="input15">
            <Description i18n="ReportsXML.DigitalInputDetailReport.input_15">Input #15</Description>
            <Property key="digitalInputIndex">15</Property>
            </Option>
         <!- - -->
      </Options>
      <Constraints>
         <ValidGPSRequired>false</ValidGPSRequired>
         <SelectionLimit type="first">3000</SelectionLimit>
         <ReportLimit>2000</ReportLimit>
      </Constraints>
      <Property key="reportType">detail</Property>
      <Property key="digitalInputIndex">0</Property>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- Geozone "Visit" Count Summary report -->
   <Report name="GeozoneReport" type="device.detail" 
        class="org.opengts.extra.war.report.field.GeozoneReport" 
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        optional="true"
        sortable="false"
        >
      <MenuDescription i18n="ReportsXML.geozoneReport.menu">Geozone Report</MenuDescription>
      <Title i18n="ReportsXML.geozoneReport.title">Geozone Report [${description}]</Title>
      <Subtitle i18n="ReportsXML.geozoneReport.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="geozoneId"                   />
         <Column name="geozoneDesc"                 />
         <Column name="latitude"            arg="4" ifTrue="columnLatLon"/>
         <Column name="longitude"           arg="4" ifTrue="columnLatLon"/>
         <Column name="address"                     />
         <Column name="corridorID"                  ifTrue="columnGeozoneCorridorID" />
         <Column name="enterDateTime"               />
         <Column name="exitDateTime"                />
         <Column name="insideElapse"        arg="0" />
         <Column name="fuelDelta"           arg="1" ifTrue="columnGeozoneFuelDelta" />
         <Column name="odomDelta"           arg="1" ifTrue="columnGeozoneOdomDelta" />
         <Column name="count"                       ifTrue="columnGeozoneVisitCount"/>
      </Columns>
      <Options type="geozones.all"/>
      <Constraints>
         <ValidGPSRequired>false</ValidGPSRequired>
         <SelectionLimit type="first">3000</SelectionLimit>
         <ReportLimit>3000</ReportLimit>
      </Constraints>
      <Property key="description">All Geozones</Property> <!-- default if not defined by list -->
      <Property key="geozoneCategory">ZoneArrive</Property> <!-- see StatusCodes.PariedStatusCodes -->
      <Property key="totalByGeozone">true</Property>
      <Property key="estimateDepartTime">false</Property>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- Geozone Arrival Transition report detail -->
   <Report name="GeozoneDriving" type="device.detail" 
        class="org.opengts.extra.war.report.field.GeozoneReport" 
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        optional="true"
        sortable="false"
        >
      <MenuDescription i18n="ReportsXML.geozoneDriving.menu">Geozone Arrival Report</MenuDescription>
      <Title i18n="ReportsXML.geozoneDriving.title">Geozone Arrival Report [${description}]</Title>
      <Subtitle i18n="ReportsXML.geozoneDriving.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="geozoneId"                   />
         <Column name="latitude"            arg="4" ifTrue="columnLatLon"/>
         <Column name="longitude"           arg="4" ifTrue="columnLatLon"/>
         <Column name="address"                     />
         <Column name="corridorID"                  ifTrue="columnGeozoneCorridorID" />
         <Column name="enterDateTime"               />
         <Column name="exitDateTime"                />
         <Column name="insideElapse"        arg="0" />
         <Column name="outsideElapse"       arg="0" />
      </Columns>
      <Options type="geozones.all"/>
      <Constraints>
         <ValidGPSRequired>false</ValidGPSRequired>
         <SelectionLimit type="first">3000</SelectionLimit>
         <ReportLimit>3000</ReportLimit>
      </Constraints>
      <Property key="description">All Geozones</Property> <!-- default if not defined by list -->
      <Property key="geozoneCategory">ZoneArrive</Property> <!-- see StatusCodes.PariedStatusCodes -->
      <Property key="totalByGeozone">false</Property>
      <Property key="estimateDepartTime">false</Property>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- Geozone Departure report summary -->
   <Report name="GeozoneDeparture" type="device.detail" 
        class="org.opengts.extra.war.report.field.GeozoneDepartReport" 
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        optional="true"
        sortable="false"
        >
      <MenuDescription i18n="ReportsXML.geozoneDeparture.menu">Geozone Departure Report</MenuDescription>
      <Title i18n="ReportsXML.geozoneDeparture.title">Geozone Departure Report</Title>
      <Subtitle i18n="ReportsXML.geozoneDeparture.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="driverId"                    />
         <Column name="exitDateTime"                />
         <Column name="exitGeozoneId"               />
         <Column name="exitAddress"                 />
         <Column name="enterDateTime"               />
         <Column name="enterGeozoneId"              />
         <Column name="enterAddress"                />
         <Column name="drivingElapse"       arg="0" />
         <Column name="odomDelta"           arg="0" />
      </Columns>
      <Constraints>
         <ValidGPSRequired>false</ValidGPSRequired>
         <SelectionLimit type="first">3000</SelectionLimit>
         <ReportLimit>2000</ReportLimit>
      </Constraints>
      <Property key="geozoneCategory">ZoneArrive</Property> <!-- see StatusCodes.PariedStatusCodes -->
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- Job Arrival Summary report -->
   <Report name="JobReport" type="device.detail" 
        class="org.opengts.extra.war.report.field.GeozoneReport" 
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        optional="true"
        sortable="false"
        >
      <MenuDescription i18n="ReportsXML.jobReport.menu">Job Report</MenuDescription>
      <Title i18n="ReportsXML.jobReport.title">Job Report</Title>
      <Subtitle i18n="ReportsXML.jobReport.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="geozoneID"                   i18n="ReportsXML.jobReport.geozoneID" >Job\nLocation</Column>
         <Column name="jobNumber"                   />
         <Column name="address"                     />
         <Column name="enterDateTime"               />
         <Column name="exitDateTime"                />
         <Column name="insideElapse"        arg="0" />
         <Column name="fuelDelta"           arg="1" ifTrue="columnGeozoneFuelDelta" />
         <Column name="odomDelta"           arg="1" ifTrue="columnGeozoneOdomDelta" />
      </Columns>
      <Constraints>
         <ValidGPSRequired>false</ValidGPSRequired>
         <SelectionLimit type="first">3000</SelectionLimit>
         <ReportLimit>2000</ReportLimit>
      </Constraints>
      <Property key="geozoneCategory">JobArrive</Property> <!-- see StatusCodes.PariedStatusCodes -->
      <Property key="totalByGeozone">true</Property>
      <Property key="estimateDepartTime">false</Property>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- EventData report showing temperatures -->
   <Report name="EventThermo" type="device.detail" 
        class="org.opengts.extra.war.report.event.EventThermoReport"
        layout="org.opengts.war.report.event.EventDataLayout"
        modules="extra"
        optional="true"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.tempMonitor.menu">Temperature Monitor</MenuDescription>
      <Title i18n="ReportsXML.tempMonitor.title">Temperature Monitor</Title>
      <Subtitle i18n="ReportsXML.tempMonitor.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <!-- this report header group has no title -->
         <Column name="index"                       />
         <Column name="date"                        />
         <Column name="time"                        />
         <Column name="statusDesc"                  />
         <Column name="geoPoint"            arg="5" ifTrue="columnLatLon"/>
         <Column name="address"                     />
         <Column name="speedH"                      />
      </Columns>
      <Columns>
         <!-- with report header group title -->
         <Title i18n="ReportsXML.tempMonitor.temp">Temperatures</Title> 
         <Column name="thermo1"             arg="1" ifTrue="EventThermo.columnThermo1"/>
         <Column name="thermo2"             arg="1" ifTrue="EventThermo.columnThermo2"/>
         <Column name="thermo3"             arg="1" ifTrue="EventThermo.columnThermo3"/>
         <Column name="thermo4"             arg="1" ifTrue="EventThermo.columnThermo4"/>
         <Column name="thermo5"             arg="1" ifTrue="EventThermo.columnThermo5"/>
         <Column name="thermo6"             arg="1" ifTrue="EventThermo.columnThermo6"/>
         <Column name="thermo7"             arg="1" ifTrue="EventThermo.columnThermo7"/>
         <Column name="thermo8"             arg="1" ifTrue="EventThermo.columnThermo8"/>
      </Columns>
      <Constraints>
         <TimeStart>-1</TimeStart>
         <TimeEnd>-1</TimeEnd>
         <ValidGPSRequired>false</ValidGPSRequired>
         <SelectionLimit type="first">2000</SelectionLimit>
         <ReportLimit>1000</ReportLimit>
      </Constraints>
      <MapIconSelector ruleFactoryName="GTSRulesEngine,SecureENRE,ENRE">
        <!-- an installed "RuleFactory" implementation is required which can analyze this iconSelector -->
        <![CDATA[ ((speed<5)?"reddot":"heading") ]]>
      </MapIconSelector> 
      <Property key="gpsAgeColorRange">1200:#550000,3600:#BB0000</Property>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- EventData report showing OBDII/CANBUS temperatures -->
   <Report name="EngineThermo" type="device.detail" 
        class="org.opengts.extra.war.report.event.EngineThermoReport"
        layout="org.opengts.war.report.event.EventDataLayout"
        modules="extra"
        optional="true"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.engineTemperatures.menu">Engine Temperatures</MenuDescription>
      <Title i18n="ReportsXML.engineTemperatures.title">Engine Temperatures</Title>
      <Subtitle i18n="ReportsXML.engineTemperatures.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <!-- this report header group has no title -->
         <Column name="index"                       />
         <Column name="date"                        />
         <Column name="time"                        />
         <Column name="statusDesc"                  />
         <Column name="geoPoint"            arg="5" ifTrue="columnLatLon"/>
         <Column name="address"                     />
         <Column name="speedH"                      />
      </Columns>
      <Columns>
         <!-- with report header group title -->
         <Title i18n="ReportsXML.engineTemperatures.temp">Temperatures</Title> 
         <Column name="coolantTemp"         arg="1" ifTrue="EngineThermo.columnCoolantTemp"/>
         <Column name="engineTemp"          arg="1" ifTrue="EngineThermo.columnEngineTemp"/>
         <Column name="oilTemp"             arg="1" ifTrue="EngineThermo.columnOilTemp"/>
         <Column name="transOilTemp"        arg="1" ifTrue="EngineThermo.columnTransOilTemp"/>
         <Column name="oilCoolerInTemp"     arg="1" ifTrue="EngineThermo.columnOilCoolerInTemp"/>
         <Column name="oilCoolerOutTemp"    arg="1" ifTrue="EngineThermo.columnOilCoolerOutTemp"/>
         <Column name="intakeTemp"          arg="1" ifTrue="EngineThermo.columnIntakeTemp"/>
         <Column name="batteryTemp"         arg="1" ifTrue="EngineThermo.columnBatteryTemp"/>
         <Column name="ambientTemp"         arg="1" ifTrue="EngineThermo.columnAmbientTemp"/>
         <Column name="cabinTemp"           arg="1" ifTrue="EngineThermo.columnCabinTemp"/>
         <Column name="thermo1"             arg="1" ifTrue="EngineThermo.columnThermo1"/>
         <Column name="thermo2"             arg="1" ifTrue="EngineThermo.columnThermo2"/>
         <Column name="thermo3"             arg="1" ifTrue="EngineThermo.columnThermo3"/>
         <Column name="thermo4"             arg="1" ifTrue="EngineThermo.columnThermo4"/>
         <Column name="thermo5"             arg="1" ifTrue="EngineThermo.columnThermo5"/>
         <Column name="thermo6"             arg="1" ifTrue="EngineThermo.columnThermo6"/>
         <Column name="thermo7"             arg="1" ifTrue="EngineThermo.columnThermo7"/>
         <Column name="thermo8"             arg="1" ifTrue="EngineThermo.columnThermo8"/>
      </Columns>
      <Constraints>
         <TimeStart>-1</TimeStart>
         <TimeEnd>-1</TimeEnd>
         <ValidGPSRequired>false</ValidGPSRequired>
         <SelectionLimit type="first">2000</SelectionLimit>
         <ReportLimit>1000</ReportLimit>
      </Constraints>
      <MapIconSelector ruleFactoryName="GTSRulesEngine,SecureENRE,ENRE">
        <!-- an installed "RuleFactory" implementation is required which can analyze this iconSelector -->
        <![CDATA[ ((speed<5)?"reddot":"heading") ]]>
      </MapIconSelector> 
      <Property key="zeroCIsInvalid">true</Property>
      <Property key="gpsAgeColorRange">1200:#550000,3600:#BB0000</Property>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- Sample EventData report showing a "(mph >= 55)" RuleSelector filter 
    === An installed Event Notification Rules Engine (ENRE) is required for this report
    -->
   <Report name="EventRule" type="device.detail" 
        class="org.opengts.war.report.event.EventDetailReport"
        layout="org.opengts.war.report.event.EventDataLayout"
        modules="rule"
        optional="true"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.eventRule.menu">Custom Rules</MenuDescription>
      <Title i18n="ReportsXML.eventRule.title">Custom Rules</Title>
      <Subtitle i18n="ReportsXML.eventRule.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"             arg="mapLink" ifTrue="columnIndexMapLink"/>
         <Column name="index"                           ifFalse="columnIndexMapLink"/>
         <Column name="date"                            />
         <Column name="time"                            />
         <Column name="statusDesc"          arg="color" />
         <Column name="geoPoint"            arg="4"     ifTrue="columnLatLon"/>
         <Column name="address"                         />
         <Column name="speedH"                          />
         <Column name="speedLimit"          arg="0"     ifTrue="columnSpeedLimit"/>
      </Columns>
      <Constraints>
         <TimeStart>-1</TimeStart>
         <TimeEnd>-1</TimeEnd>
         <ValidGPSRequired>true</ValidGPSRequired>
         <RuleSelector ruleFactoryName="GTSRulesEngine,SecureENRE,ENRE">
            <!-- ENRE required -->
            <![CDATA[ (mph >= 55) ]]>
         </RuleSelector>
         <SelectionLimit type="first">1000</SelectionLimit>
         <ReportLimit>500</ReportLimit>
      </Constraints>
      <MapIconSelector ruleFactoryName="GTSRulesEngine,SecureENRE,ENRE">
         <!-- ENRE required -->
         <![CDATA[ ((speed<5)?"reddot":"heading") ]]>
      </MapIconSelector> 
      <Property key="gpsAgeColorRange">1200:#550000,3600:#BB0000</Property>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- EventData report showing a "$SPEEDING" RuleSelector filter for selecting speeding events 
    === An installed Event Notification Rules Engine (ENRE) is required for this report
    -->
   <Report name="EventRuleSpeeding" type="device.detail" 
        class="org.opengts.war.report.event.EventDetailReport"
        layout="org.opengts.war.report.event.EventDataLayout"
        modules="rule"
        optional="true"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.eventRule.menu">Event Detail Speeding Events</MenuDescription>
      <Title i18n="ReportsXML.eventRule.title">Event Detail Speeding Events</Title>
      <Subtitle i18n="ReportsXML.eventRule.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"             arg="mapLink" ifTrue="columnIndexMapLink"/>
         <Column name="index"                           ifFalse="columnIndexMapLink"/>
         <Column name="date"                            />
         <Column name="time"                            />
         <Column name="statusDesc"          arg="color" />
         <Column name="geoPoint"            arg="4"     ifTrue="columnLatLon"/>
         <Column name="address"                         />
         <Column name="speedH"                          />
         <Column name="speedLimit"          arg="0"     ifTrue="columnSpeedLimit"/>
      </Columns>
      <Constraints>
         <TimeStart>-1</TimeStart>
         <TimeEnd>-1</TimeEnd>
         <ValidGPSRequired>true</ValidGPSRequired>
         <RuleSelector ruleFactoryName="GTSRulesEngine,SecureENRE,ENRE">
            <![CDATA[ $SPEEDING ]]>
         </RuleSelector>
         <SelectionLimit type="first">10000</SelectionLimit>
         <ReportLimit>10000</ReportLimit>
      </Constraints>
      <MapIconSelector ruleFactoryName="GTSRulesEngine,SecureENRE,ENRE">
         <![CDATA[ ((speed<5)?"reddot":"heading") ]]>
      </MapIconSelector> 
      <Property key="gpsAgeColorRange">1200:#550000,3600:#BB0000</Property>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- EventData OBD fault code report -->
   <Report name="EventFaultCodes" type="device.detail" 
        class="org.opengts.war.report.event.EventDetailReport"
        layout="org.opengts.war.report.event.EventDataLayout"
        modules="extra"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.j1708Fault.menu">OBD Fault Codes</MenuDescription>
      <Title i18n="ReportsXML.j1708Fault.title">OBD Fault Codes</Title>
      <Subtitle i18n="ReportsXML.j1708Fault.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"             arg="mapLink" ifTrue="columnIndexMapLink"/>
         <Column name="index"                           ifFalse="columnIndexMapLink"/>
         <Column name="date"                            />
         <Column name="time"                            />
         <Column name="statusDesc"          arg="color" />
         <Column name="geoPoint"            arg="5"     ifTrue="columnLatLon"/>
         <Column name="speedH"                          />
         <Column name="faultCode"           arg="desc"  />
         <Column name="faultCodes"          arg="desc"  />
         <Column name="address"                         />
      </Columns>
      <Constraints>
         <!-- <TimeStart>-1</TimeStart> -->
         <!-- <TimeEnd>-1</TimeEnd>     -->
         <ValidGPSRequired>false</ValidGPSRequired>
         <Where type="mysql"><![CDATA[ ((j1708Fault != 0) || (faultCode != "")) ]]></Where>
         <SelectionLimit type="first">1000</SelectionLimit>
         <ReportLimit>1000</ReportLimit>
      </Constraints>
      <MapIconSelector ruleFactoryName="GTSRulesEngine,SecureENRE,ENRE">
        <!-- an installed "RuleFactory" implementation is required which can analyze this iconSelector -->
        <![CDATA[ ((speed<5)?"reddot":"heading") ]]>
      </MapIconSelector> 
      <Property key="gpsAgeColorRange">1200:#550000,3600:#BB0000</Property>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- device distance/fuel detail by day -->
   <Report name="DailyDistanceDetail" type="device.detail" 
        class="org.opengts.extra.war.report.field.DailySummaryReport"
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        optional="true"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.dailyDistance.menu">Daily Distance Driven</MenuDescription>
      <Title i18n="ReportsXML.dailyDistance.title">Daily Distance Driven</Title>
      <Subtitle i18n="ReportsXML.dailyDistance.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"                           />
         <Column name="date"                            />
         <Column name="deviceDesc"                      />
         <Column name="deviceId"                        />
         <Column name="odomDelta"           arg="0"     />
         <Column name="fuelTrip"            arg="1"     />
      </Columns>
      <Constraints>
         <ValidGPSRequired>false</ValidGPSRequired>
         <SelectionLimit type="first">10000</SelectionLimit>
         <ReportLimit>1000</ReportLimit>
      </Constraints>
      <Property key="reportType">detail</Property> <!-- distance/fuel by day -->
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- EventData report showing all drop/hook events -->
   <Report name="EntityDetail" type="device.detail" 
        class="org.opengts.war.report.event.EventDetailReport"
        layout="org.opengts.war.report.event.EventDataLayout"
        modules="extra"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.trailerDetail.menu">Trailer Hook/Drop Detail</MenuDescription>
      <Title i18n="ReportsXML.trailerDetail.title">Trailer Hook/Drop Detail</Title>
      <Subtitle i18n="ReportsXML.trailerDetail.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"             arg="mapLink" ifTrue="columnIndexMapLink"/>
         <Column name="index"                           ifFalse="columnIndexMapLink"/>
         <Column name="entityId"                        />
         <Column name="entityDesc"                      />
         <Column name="date"                            />
         <Column name="time"                            />
         <Column name="statusDesc"          arg="color" />
         <Column name="odometer"            arg="0"     />
         <Column name="latitude"            arg="4"     ifTrue="columnLatLon"/> <!-- "bestLatitude"  -->
         <Column name="longitude"           arg="4"     ifTrue="columnLatLon"/> <!-- "bestLongitude" -->
         <Column name="address"                         />
      </Columns>
      <Constraints>
         <TimeStart>-1</TimeStart>
         <TimeEnd>-1</TimeEnd>
         <ValidGPSRequired>false</ValidGPSRequired>
         <Where type="mysql"><![CDATA[ ((statusCode = 0xF821) || (statusCode = 0xF822)) ]]></Where>
         <SelectionLimit type="first">1000</SelectionLimit>
         <ReportLimit>1000</ReportLimit>
      </Constraints>
      <MapIconSelector ruleFactoryName="GTSRulesEngine,SecureENRE,ENRE">
        <!-- an installed "RuleFactory" implementation is required which can analyze this iconSelector -->
        <![CDATA[ ((speed<5)?"reddot":"heading") ]]>
      </MapIconSelector> 
      <Property key="gpsAgeColorRange">1200:#550000,3600:#BB0000</Property>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- Antx day detail report -->
   <Report name="AntxDayDetail" type="device.detail" 
        class="org.opengts.extra.war.report.antx.AntxDayDetailReport"
        layout="org.opengts.extra.war.report.antx.AntxLayout"
        modules="extra"
        optional="true"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.antxDayDetail.menu">Antx Daily Detail</MenuDescription>
      <Title i18n="ReportsXML.antxDayDetail.title">Antx Daily Detail</Title>
      <Subtitle i18n="ReportsXML.antxDayDetail.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"                       />
         <Column name="deviceId"                    />
         <Column name="deviceDesc"                  />
         <Column name="dateTime"                    />
         <Column name="fieldDesc"                   arg="id" />
         <Column name="channelDesc"                 arg="id" />
         <Column name="type"                        />
         <Column name="data0"                       />
         <Column name="data1"                       />
         <Column name="data2"                       />
         <Column name="data3"                       />
         <Column name="data4"                       />
      </Columns>
      <Constraints>
         <TimeStart>-1</TimeStart>
         <TimeEnd>-1</TimeEnd>
         <ValidGPSRequired>false</ValidGPSRequired>
         <Where type="mysql"><![CDATA[  ]]></Where>
         <SelectionLimit type="first">1000</SelectionLimit>
         <ReportLimit>1000</ReportLimit>
      </Constraints>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- Antx day detail report -->
   <Report name="AntxDaySummary" type="device.detail" 
        class="org.opengts.extra.war.report.antx.AntxDayValueSummaryReport"
        layout="org.opengts.extra.war.report.antx.AntxLayout"
        modules="extra"
        optional="true"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.antxDayFuelSummary.menu">Antx Daily Fuel Summary</MenuDescription>
      <Title i18n="ReportsXML.antxDayFuelSummary.title">Antx Daily Fuel Summary</Title>
      <Subtitle i18n="ReportsXML.antxDayFuelSummary.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"                       />
         <Column name="deviceId"                    />
         <Column name="deviceDesc"                  />
         <Column name="date"                        />
         <Column name="distance"                    />
         <Column name="totalFuel"                   />
         <Column name="ptoFuel"                     />
         <Column name="idleFuel"                    />
         <Column name="workFuel"                    />
      </Columns>
      <Constraints>
         <TimeStart>-1</TimeStart>
         <TimeEnd>-1</TimeEnd>
         <ValidGPSRequired>false</ValidGPSRequired>
         <Where type="mysql"><![CDATA[  ]]></Where>
         <SelectionLimit type="first">1000</SelectionLimit>
         <ReportLimit>1000</ReportLimit>
      </Constraints>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- Fuel Register detail report -->
   <Report name="FuelRegisterDetail" type="device.detail" 
        class="org.opengts.rulewar.report.field.FuelRegisterReport"
        layout="org.opengts.war.report.field.FieldLayout"
        modules="rule"
        optional="true"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.fuelRegisterDetail.menu">Fuel Register Detail</MenuDescription>
      <Title i18n="ReportsXML.fuelRegisterDetail.title">Fuel Register Detail</Title>
      <Subtitle i18n="ReportsXML.fuelRegisterDetail.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"                       />
         <Column name="deviceId"                    />
         <Column name="deviceDesc"                  />
         <Column name="dateTime"                    />
         <Column name="odometer"          arg="0"   />
         <Column name="engineHours"       arg="0"   />
         <Column name="fuelTotal"                   />
         <Column name="startFuelLevel"              />
         <Column name="fuelLevel"                   />
         <Column name="deltaFuelLevel"              />
         <Column name="geoPoint"          arg="5"   />
         <Column name="address"                     />
     <!-- Column name="subdivision"                 / -->
      </Columns>
      <Constraints>
         <TimeStart>-1</TimeStart>
         <TimeEnd>-1</TimeEnd>
         <ValidGPSRequired>false</ValidGPSRequired>
         <SelectionLimit type="first">1000</SelectionLimit>
         <ReportLimit>1000</ReportLimit>
      </Constraints>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- NotifyQueue alert detail report -->
   <Report name="NotifyQueueDetail" type="device.detail" 
        class="org.opengts.rulewar.report.field.NotifyQueueReport"
        layout="org.opengts.war.report.field.FieldLayout"
        modules="rule"
        optional="true"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.notifyQueueDetail.menu">${i18n.Vehicle} Alert Detail</MenuDescription>
      <Title i18n="ReportsXML.notifyQueueDetail.title">${i18n.Vehicle} Alert Detail</Title>
      <Subtitle i18n="ReportsXML.notifyQueueDetail.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"                       />
         <Column name="deviceId"                    />
         <Column name="deviceDesc"                  />
         <Column name="dateTime"                    />
         <Column name="statusCode"                  />
         <Column name="ruleId"                      />
      </Columns>
      <Constraints>
         <TimeStart>-1</TimeStart>
         <TimeEnd>-1</TimeEnd>
         <ValidGPSRequired>false</ValidGPSRequired>
         <SelectionLimit type="first">1000</SelectionLimit>
         <ReportLimit>1000</ReportLimit>
      </Constraints>
   </Report>

   <!-- nearby devices report showing all device near the current device -->
   <Report name="DeviceNearbyDevices" type="device.detail" 
        class="org.opengts.extra.war.report.field.NearbyDevicesReport" 
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.deviceNearbyDevices.menu">${i18n.Vehicles} Near ${i18n.Vehicle}</MenuDescription>
      <Title i18n="ReportsXML.deviceNearbyDevices.title">${i18n.Vehicle} Nearby ${i18n.Vehicles}</Title>
      <Subtitle i18n="ReportsXML.deviceNearbyDevices.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"                           />
         <Column name="deviceID"                        />
         <Column name="deviceDesc"                      />
         <Column name="date"                            />
         <Column name="time"                            />
         <Column name="geoPoint"            arg="5"     />
         <Column name="speedH"              arg="1"     />
         <Column name="distance"            arg="3"     />
         <Column name="address"                         />
      </Columns>
      <Options type="list">
         <Option name="500_feet">
            <Description i18n="ReportsXML.nearbyDevices.feet_500">Within 500-feet</Description>
            <Property key="maximumDistanceMeters">152.4</Property>
            </Option>
         <Option name="1_mile">
            <Description i18n="ReportsXML.nearbyDevices.miles_1">Within 1-mile</Description>
            <Property key="maximumDistanceMeters">1609.344</Property>
            </Option>
         <Option name="2_miles">
            <Description i18n="ReportsXML.nearbyDevices.miles_2">Within 2-miles</Description>
            <Property key="maximumDistanceMeters">3218.688</Property>
            </Option>
         <Option name="3_miles">
            <Description i18n="ReportsXML.nearbyDevices.miles_3">Within 3-miles</Description>
            <Property key="maximumDistanceMeters">4828.032</Property>
            </Option>
         <Option name="5_miles">
            <Description i18n="ReportsXML.nearbyDevices.miles_5">Within 5-miles</Description>
            <Property key="maximumDistanceMeters">8046.72</Property>
            </Option>
         <Option name="10_miles">
            <Description i18n="ReportsXML.nearbyDevices.miles_10">Within 10-miles</Description>
            <Property key="maximumDistanceMeters">16093.44</Property>
            </Option>
         <Option name="20_miles">
            <Description i18n="ReportsXML.nearbyDevices.miles_20">Within 20-miles</Description>
            <Property key="maximumDistanceMeters">32186.88</Property>
            </Option>
      </Options>
      <Constraints>
         <!-- these constraints are ignored for this report -->
         <SelectionLimit type="first">3000</SelectionLimit>
         <ReportLimit>3000</ReportLimit>
         <OrderAscending>true</OrderAscending>
      </Constraints>
      <Property key="supportMapDisplay">true</Property>
      <Property key="maximumDistanceMeters">1000</Property>
   </Report>

   <!-- ======================================================================================= -->
   <!-- ======================================================================================= -->
   <!-- fleet.detail ========================================================================== -->

   <!-- example device detail report showing all events for all devices -->
   <Report name="EventDetail_Group" type="fleet.detail" 
        class="org.opengts.war.report.event.EventDetailReport"
        layout="org.opengts.war.report.event.EventDataLayout"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.EventDetailGroup.menu">Event Detail (by Group)</MenuDescription>
      <Title i18n="ReportsXML.EventDetailGroup.title">Event Detail (by Group)</Title>
      <Subtitle i18n="ReportsXML.EventDetailGroup.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"             arg="mapLink" ifTrue="columnIndexMapLink"/>
         <Column name="index"                           ifFalse="columnIndexMapLink"/>
         <Column name="deviceId"                        />
         <Column name="date"                            />
         <Column name="time"                            />
         <Column name="statusDesc"          arg="color" />
         <Column name="pushpin"                         ifTrue="columnPushpin"/>
         <Column name="geoPoint"            arg="5"     ifTrue="columnLatLon"/>
         <Column name="speedH"              arg="1"     />
         <Column name="speedLimit"          arg="0"     ifTrue="columnSpeedLimit"/>
         <Column name="altitude"                        />
         <Column name="odometer"            arg="0"     ifTrue="columnOdometer"/>
         <Column name="reportDistance"      arg="0"     ifTrue="columnReportDistance"/>
         <Column name="fuelTotal"                       ifTrue="columnFuelUsage"/>
         <Column name="address"                         />
         <Column name="geozoneDesc"                     ifTrue="columnGeozoneDesc"/>
         <Column name="driverMessage"                   ifTrue="columnDriverMessage"/>
      </Columns>
      <Constraints>
         <SelectionLimit type="first">3000</SelectionLimit>
         <ReportLimit>3000</ReportLimit>
         <OrderAscending>true</OrderAscending>
      </Constraints>
      <MapIconSelector ruleFactoryName="GTSRulesEngine,SecureENRE,ENRE">
        <!-- an installed "RuleFactory" implementation is required which can analyze this iconSelector -->
        <![CDATA[ ((mph<4)?"reddot":(speed<15)?"yellow":"heading") ]]>
      </MapIconSelector> 
      <Property key="reportDataFieldEnabled">false</Property>
      <Property key="gpsAgeColorRange">1200:#550000,3600:#BB0000</Property>
   </Report>

   <!-- example device detail report showing all events for all devices -->
   <Report name="EventDetailOBDLight_Group" type="fleet.detail" 
        class="org.opengts.war.report.event.EventDetailReport"
        layout="org.opengts.war.report.event.EventDataLayout"
        modules="extra"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.EventDetailOBDLightGroup.menu">Event OBD Detail (by Group)</MenuDescription>
      <Title i18n="ReportsXML.EventDetailOBDLightGroup.title">Event OBD Detail (by Group)</Title>
      <Subtitle i18n="ReportsXML.EventDetailOBDLightGroup.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"             arg="mapLink"  ifTrue="columnIndexMapLink"/>
         <Column name="index"                            ifFalse="columnIndexMapLink"/>
         <Column name="deviceId"                         />
         <Column name="date"                             />
         <Column name="time"                             />
         <Column name="statusDesc"        arg="color"    ifTrue="EventDetailOBD.statusDesc"        />
         <Column name="pushpin"                          ifTrue="columnPushpin"                    />
         <Column name="address"                          ifTrue="EventDetailOBD.address"           />
         <Column name="geozoneDesc"                      ifTrue="columnGeozoneDesc"/>
         <Column name="speedH"            arg="1"        ifTrue="EventDetailOBD.speedH"            />
         <Column name="speedLimit"        arg="0"        ifTrue="EventDetailOBD.speedLimit"        />
         <Column name="altitude"                         ifTrue="EventDetailOBD.altitude"          />
         <Column name="odometer"          arg="0"        ifTrue="EventDetailOBD.odometer"          />
         <Column name="reportDistance"    arg="0"        ifTrue="columnReportDistance"/>
         <Column name="fuelTotal"                        ifTrue="columnFuelUsage"/>
         <Column name="fuelLevel"                        ifTrue="EventDetailOBD.fuelLevel"         />
         <Column name="fuelRate"                         ifTrue="EventDetailOBD.fuelRate"          />
         <Column name="engineRpm"                        ifTrue="EventDetailOBD.engineRpm"         />
         <Column name="idleHours"         blankFill="--" ifTrue="EventDetailOBD.idleHours"         />
         <Column name="coolantTemp"                      ifTrue="EventDetailOBD.coolantTemp"       />
         <Column name="engineTemp"                       ifTrue="EventDetailOBD.engineTemp"        />
         <Column name="brakeGForce"       blankFill="--" ifTrue="EventDetailOBD.brakeGForce"       />
         <Column name="vBatteryVolts"                    ifTrue="EventDetailOBD.vBatteryVolts"     />
         <Column name="throttlePos"                      ifTrue="EventDetailOBD.throttlePos"       />
         <Column name="malfunctionLamp"                  ifTrue="EventDetailOBD.malfunctionLamp"   />
         <Column name="faultCode"         arg="desc"     ifTrue="EventDetailOBD.faultCode"         />
         <Column name="faultCodes"        arg="desc"     ifTrue="EventDetailOBD.faultCodes"        />
         <Column name="driverId"                         />
         <Column name="driverStatus"      arg="desc"     />
      </Columns>
      <Constraints>
         <SelectionLimit type="first">2000</SelectionLimit>
         <ReportLimit>2000</ReportLimit>
         <OrderAscending>true</OrderAscending>
      </Constraints>
      <MapIconSelector ruleFactoryName="GTSRulesEngine,SecureENRE,ENRE">
        <!-- an installed "RuleFactory" implementation is required which can analyze this iconSelector -->
        <![CDATA[ ((mph<4)?"reddot":(speed<15)?"yellow":"heading") ]]>
      </MapIconSelector> 
      <Property key="reportDataFieldEnabled">false</Property>
      <Property key="gpsAgeColorRange">1200:#550000,3600:#BB0000</Property>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- Trip report detail with trip subtotals (based on default device supported 'start' type) -->
   <Report name="TripReport_Group" type="fleet.detail" 
        class="org.opengts.extra.war.report.field.TripReport" 
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        optional="true"
        sortable="false"
        >
      <MenuDescription i18n="ReportsXML.TripReportGroup.menu">Trip Report Detail (by Group)</MenuDescription>
      <Title i18n="ReportsXML.TripReportGroup.title">Trip Report Detail (by Group) [${description}]</Title>
      <Subtitle i18n="ReportsXML.TripReportGroup.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="deviceId"                    />
         <Column name="date"                        />
         <Column name="time"                        />
         <Column name="statusDesc"                  />
         <Column name="geoPoint"            arg="5" ifTrue="columnLatLon"/>
         <Column name="address"                     />
         <Column name="speedH"              arg="0" />
         <Column name="speedDuration"               ifTrue="TripReport.showSpeedingDuration"/>
         <Column name="drivingElapse"       arg="0" i18n="ReportsXML.TripReportGroup.tripElapsed">Trip\nElapsed</Column>
         <Column name="idleElapse"          arg="0" ifTrue="TripReport.showIdleElapsed"/>
         <Column name="odomDelta"           arg="1" />
         <Column name="fuelTotal"           arg="1" ifTrue="TripReport.showFuelTotal"/>
         <Column name="fuelTrip"            arg="2" ifTrue="TripReport.showFuelTrip"/>
         <Column name="fuelTrip"            arg="$" ifTrue="TripReport.showFuelTripCost"/>
         <Column name="fuelEconomy"         arg="1" ifTrue="TripReport.showFuelEconomy"/>
         <Column name="fuelEconomyType"             ifTrue="TripReport.showFuelEconomyType"/>
         <Column name="driverId"                    ifTrue="TripReport.showDriver"/>
         <Column name="driverDesc"                  ifTrue="TripReport.showDriver"/>
      </Columns>
      <Options type="list">
         <Option name="default" ifTrue="optionTripStartType_default">
            <Description i18n="ReportsXML.TripReportGroup.default">Default</Description>
            <Property key="tripStartType">default</Property>
            <Property key="minimumStoppedTime">300</Property> <!-- seconds -->
            <Property key="minimumSpeedKPH">3.0</Property>
            <Property key="stopOnIgnitionOff">true</Property>
            </Option>
         <Option name="ignition" ifTrue="optionTripStartType_ignition">
            <Description i18n="ReportsXML.TripReportGroup.ignition">Based on Ignition On/Off Status Codes</Description>
            <Property key="tripStartType">ignition</Property>
            </Option>
         <Option name="startstop" ifTrue="optionTripStartType_startstop">
            <Description i18n="ReportsXML.TripReportGroup.startstop">Based on Motion Start/Stop Status Codes</Description>
            <Property key="tripStartType">startstop</Property>
            <Property key="stopOnIgnitionOff">true</Property>
            </Option>
         <Option name="engine" ifTrue="optionTripStartType_engine">
            <Description i18n="ReportsXML.TripReportGroup.engine">Based on Engine Start/Stop Status Codes</Description>
            <Property key="tripStartType">engine</Property>
            <Property key="stopOnIgnitionOff">true</Property>
            </Option>
         <Option name="motion0" ifTrue="optionTripStartType_motion">
            <Description i18n="ReportsXML.TripReportGroup.motion0">Based on 0 Minute Minimum Stop</Description>
            <Property key="tripStartType">motion</Property>
            <Property key="minimumStoppedTime">0</Property> <!-- seconds -->
            <Property key="minimumSpeedKPH">3.0</Property>
            <Property key="stopOnIgnitionOff">false</Property>
            </Option>
         <Option name="motion5" ifTrue="optionTripStartType_motion">
            <Description i18n="ReportsXML.TripReportGroup.motion5">Based on 5 Minute Minimum Stop</Description>
            <Property key="tripStartType">motion</Property>
            <Property key="minimumStoppedTime">300</Property> <!-- seconds -->
            <Property key="minimumSpeedKPH">3.0</Property>
            <Property key="stopOnIgnitionOff">false</Property>
            </Option>
         <Option name="motion10" ifTrue="optionTripStartType_motion">
            <Description i18n="ReportsXML.TripReportGroup.motion10">Based on 10 Minute Minimum Stop</Description>
            <Property key="tripStartType">motion</Property>
            <Property key="minimumStoppedTime">600</Property> <!-- seconds -->
            <Property key="minimumSpeedKPH">3.0</Property>
            <Property key="stopOnIgnitionOff">false</Property>
            </Option>
         <Option name="motion20" ifTrue="optionTripStartType_motion">
            <Description i18n="ReportsXML.TripReportGroup.motion20">Based on 20 Minute Minimum Stop</Description>
            <Property key="tripStartType">motion</Property>
            <Property key="minimumStoppedTime">1200</Property> <!-- seconds -->
            <Property key="minimumSpeedKPH">3.0</Property>
            <Property key="stopOnIgnitionOff">false</Property>
            </Option>
         <Option name="motion30" ifTrue="optionTripStartType_motion">
            <Description i18n="ReportsXML.TripReportGroup.motion30">Based on 30 Minute Minimum Stop</Description>
            <Property key="tripStartType">motion</Property>
            <Property key="minimumStoppedTime">1800</Property> <!-- seconds -->
            <Property key="minimumSpeedKPH">3.0</Property>
            <Property key="stopOnIgnitionOff">false</Property>
            </Option>
      </Options>
      <Constraints>
         <ValidGPSRequired>false</ValidGPSRequired>
         <SelectionLimit type="first">${TripReport.SelectionLimit=9000}</SelectionLimit>
         <ReportLimit>${TripReport.ReportLimit=6000}</ReportLimit>
      </Constraints>
      <Property key="tripStartType">default</Property>
      <Property key="minimumStoppedTime">300</Property>     <!-- seconds -->
      <Property key="minimumSpeedKPH">3.0</Property>        <!-- km/h -->
      <Property key="stopOnIgnitionOff">true</Property>
      <Property key="estimateFuelTotal">${TripReport.estimateFuelTotal=false}</Property>
      <Property key="kilometersPerLiter">${TripReport.kilometersPerLiter=0.0}</Property> <!-- 20 mpg = 8.5 km/L -->
      <Property key="tripStartStopOnly">${TripReport.tripStartStopOnly=false}</Property>
      <Property key="speedingThresholdKPH">${TripReport.speedingThresholdKPH=0.0}</Property>
      <Property key="minimumSpeedingDuration">${TripReport.minimumSpeedingDuration=0}</Property>
      <Property key="tripStopLookAheadSeconds">${TripReport.tripStopLookAheadSeconds=0}</Property>
   </Report>

   <!-- example device summary report showing the driving and idle times for a given device -->
   <Report name="MotionSummary_Group" type="fleet.detail" 
        class="org.opengts.war.report.field.MotionReport"
        layout="org.opengts.war.report.field.FieldLayout"
        sortable="false"
        >
      <MenuDescription i18n="ReportsXML.motionSummaryGroup.menu">Driving/Stopped Time Summary (by Group)</MenuDescription>
      <Title i18n="ReportsXML.motionSummaryGroup.title">Driving/Stopped Time Summary (by Group) [${description}]</Title>
      <Subtitle i18n="ReportsXML.motionSummaryGroup.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
     <!-- Column name="index"                       / -->
         <Column name="deviceId"                    />
         <Column name="startDateTime"               />   <!-- "Start Time"          -->
         <Column name="drivingElapse"               />   <!-- "Driving Duration"    -->
         <Column name="odomDelta"           arg="1" ifTrue="columnOdometer"/>     <!-- "Miles" (driven)      -->
         <Column name="stopDateTime"                />   <!-- "Stop Time"           -->
         <Column name="fuelEconomy"         arg="1" ifTrue="columnFuelEconomy"/>  <!-- "Fuel Econ" (at stop) -->
         <Column name="stopGeoPoint"        arg="4" ifTrue="columnLatLon"/>       <!-- "Lat/Lon" (at stop)   -->
         <Column name="stopOdometer"        arg="1" ifTrue="columnOdometer"/>     <!-- "Odometer" (at stop)   -->
         <Column name="stopAddress"                 />   <!-- "Address" (at stop)   -->
         <Column name="idleElapse"                  i18n="ReportsXML.motionSummaryGroup.tripIdleElapsed">Trip Idle\nElapsed</Column>
         <Column name="stopElapse"                  />   <!-- "Stop Elapsed Time"   -->
         <Column name="odomDeltaWH"         arg="1" ifTrue="MotionSummary.tabulateByWorkHours"/>
         <Column name="drivingElapseWH"             ifTrue="MotionSummary.tabulateByWorkHours"/>
      </Columns>
      <Options type="list">
         <Option name="default" ifTrue="optionTripStartType_default">
            <Description i18n="ReportsXML.motionSummaryGroup.default">Default</Description>
            <Property key="tripStartType">default</Property>
            <Property key="minimumStoppedTime">300</Property> <!-- seconds -->
            <Property key="minimumSpeedKPH">0.0</Property>
            <Property key="stopOnIgnitionOff">true</Property>
            </Option>
         <Option name="ignition" ifTrue="optionTripStartType_ignition">
            <Description i18n="ReportsXML.motionSummaryGroup.ignition">Based on Ignition On/Off Status Codes</Description>
            <Property key="tripStartType">ignition</Property>
            <Property key="minimumSpeedKPH">0.0</Property>
            </Option>
         <Option name="startstop" ifTrue="optionTripStartType_startstop">
            <Description i18n="ReportsXML.motionSummaryGroup.startstop">Based on Motion Start/Stop Status Codes</Description>
            <Property key="tripStartType">startstop</Property>
            <Property key="minimumSpeedKPH">0.0</Property>
            <Property key="stopOnIgnitionOff">true</Property>
            </Option>
         <Option name="engine" ifTrue="optionTripStartType_engine">
            <Description i18n="ReportsXML.motionSummaryGroup.engine">Based on Engine Start/Stop Status Codes</Description>
            <Property key="tripStartType">engine</Property>
            <Property key="minimumSpeedKPH">0.0</Property>
            <Property key="stopOnIgnitionOff">true</Property>
            </Option>
         <Option name="motion0" ifTrue="optionTripStartType_motion">
            <Description i18n="ReportsXML.motionSummaryGroup.motion0">Based on 0 Minute Minimum Stop</Description>
            <Property key="tripStartType">motion</Property>
            <Property key="minimumStoppedTime">0</Property> <!-- seconds -->
            <Property key="minimumSpeedKPH">0.0</Property>
            <Property key="stopOnIgnitionOff">false</Property>
            </Option>
         <Option name="motion5" ifTrue="optionTripStartType_motion">
            <Description i18n="ReportsXML.motionSummaryGroup.motion5">Based on 5 Minute Minimum Stop</Description>
            <Property key="tripStartType">motion</Property>
            <Property key="minimumStoppedTime">300</Property> <!-- seconds -->
            <Property key="minimumSpeedKPH">0.0</Property>
            <Property key="stopOnIgnitionOff">false</Property>
            </Option>
         <Option name="motion10" ifTrue="optionTripStartType_motion">
            <Description i18n="ReportsXML.motionSummaryGroup.motion10">Based on 10 Minute Minimum Stop</Description>
            <Property key="tripStartType">motion</Property>
            <Property key="minimumStoppedTime">600</Property> <!-- seconds -->
            <Property key="minimumSpeedKPH">0.0</Property>
            <Property key="stopOnIgnitionOff">false</Property>
            </Option>
         <Option name="motion20" ifTrue="optionTripStartType_motion">
            <Description i18n="ReportsXML.motionSummaryGroup.motion20">Based on 20 Minute Minimum Stop</Description>
            <Property key="tripStartType">motion</Property>
            <Property key="minimumStoppedTime">1200</Property> <!-- seconds -->
            <Property key="minimumSpeedKPH">0.0</Property>
            <Property key="stopOnIgnitionOff">false</Property>
            </Option>
         <Option name="motion30" ifTrue="optionTripStartType_motion">
            <Description i18n="ReportsXML.motionSummaryGroup.motion30">Based on 30 Minute Minimum Stop</Description>
            <Property key="tripStartType">motion</Property>
            <Property key="minimumStoppedTime">1800</Property> <!-- seconds -->
            <Property key="minimumSpeedKPH">0.0</Property>
            <Property key="stopOnIgnitionOff">false</Property>
            </Option>
      </Options>
      <Constraints>
         <!-- EventData records MUST be in ascending order -->
         <SelectionLimit type="first">12000</SelectionLimit>
         <ReportLimit>8000</ReportLimit>
      </Constraints>
      <MapIconSelector ruleFactoryName="GTSRulesEngine,SecureENRE,ENRE">
        <!-- an installed "RuleFactory" implementation is required which can analyze this iconSelector -->
        <![CDATA[ ((speed<5)?"reddot":"heading") ]]>
      </MapIconSelector> 
      <Property key="isFleetSummaryReport">false</Property>
      <Property key="legacyIdleDefinition">false</Property>
      <Property key="showMapLink">true</Property>
      <Property key="tripStartType">default</Property>
      <Property key="minimumStoppedTime">300</Property> <!-- seconds -->
      <Property key="minimumSpeedKPH">0.0</Property> <!-- kph -->
      <Property key="stopOnIgnitionOff">true</Property>
      <Property key="tabulateByWorkHours">${MotionSummary.tabulateByWorkHours=false}</Property>
      <Property key="WorkHours.sun">${MotionSummary.WorkHours.sun=}</Property>
      <Property key="WorkHours.mon">${MotionSummary.WorkHours.mon=06:00-18:00}</Property>
      <Property key="WorkHours.tue">${MotionSummary.WorkHours.tue=06:00-18:00}</Property>
      <Property key="WorkHours.wed">${MotionSummary.WorkHours.wed=06:00-18:00}</Property>
      <Property key="WorkHours.thu">${MotionSummary.WorkHours.thu=06:00-18:00}</Property>
      <Property key="WorkHours.fri">${MotionSummary.WorkHours.fri=06:00-18:00}</Property>
      <Property key="WorkHours.sat">${MotionSummary.WorkHours.sat=}</Property>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- Geozone Arrival Summary report -->
   <Report name="GeozoneReport_Group" type="fleet.detail" 
        class="org.opengts.extra.war.report.field.GeozoneReport" 
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        optional="true"
        sortable="false"
        >
      <MenuDescription i18n="ReportsXML.GeozoneReportGroup.menu">Geozone Report (by Group)</MenuDescription>
      <Title i18n="ReportsXML.GeozoneReportGroup.title">Geozone Report (by Group) [${description}]</Title>
      <Subtitle i18n="ReportsXML.GeozoneReportGroup.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="deviceId"                    />
         <Column name="geozoneId"                   />
         <Column name="geozoneDesc"                 />
         <Column name="latitude"            arg="4" ifTrue="columnLatLon"/>
         <Column name="longitude"           arg="4" ifTrue="columnLatLon"/>
         <Column name="address"                     />
         <Column name="corridorID"                  ifTrue="columnGeozoneCorridorID" />
         <Column name="enterDateTime"               />
         <Column name="exitDateTime"                />
         <Column name="insideElapse"        arg="0" />
         <Column name="fuelDelta"           arg="1" ifTrue="columnGeozoneFuelDelta" />
         <Column name="odomDelta"           arg="1" ifTrue="columnGeozoneOdomDelta" />
         <Column name="count"                       ifTrue="columnGeozoneVisitCount"/>
      </Columns>
      <Options type="geozones.all"/>
      <Constraints>
         <ValidGPSRequired>false</ValidGPSRequired>
         <SelectionLimit type="first">3000</SelectionLimit>
         <ReportLimit>3000</ReportLimit>
      </Constraints>
      <Property key="description">All Geozones</Property> <!-- default if not defined by list -->
      <Property key="geozoneCategory">ZoneArrive</Property> <!-- see StatusCodes.PariedStatusCodes -->
      <Property key="totalByGeozone">true</Property>
      <Property key="estimateDepartTime">false</Property>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- Geozone Arrival Transition report detail -->
   <Report name="GeozoneDriving_Group" type="fleet.detail" 
        class="org.opengts.extra.war.report.field.GeozoneReport" 
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        optional="true"
        sortable="false"
        >
      <MenuDescription i18n="ReportsXML.geozoneDriving_group.menu">Geozone Arrival Report (by Group)</MenuDescription>
      <Title i18n="ReportsXML.geozoneDriving_group.title">Geozone Arrival Report (by Group) [${description}]</Title>
      <Subtitle i18n="ReportsXML.geozoneDriving_group.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="geozoneId"                   />
         <Column name="latitude"            arg="4" ifTrue="columnLatLon"/>
         <Column name="longitude"           arg="4" ifTrue="columnLatLon"/>
         <Column name="address"                     />
         <Column name="corridorID"                  ifTrue="columnGeozoneCorridorID" />
         <Column name="enterDateTime"               />
         <Column name="exitDateTime"                />
         <Column name="insideElapse"        arg="0" />
         <Column name="outsideElapse"       arg="0" />
      </Columns>
      <Options type="geozones.all"/>
      <Constraints>
         <ValidGPSRequired>false</ValidGPSRequired>
         <SelectionLimit type="first">3000</SelectionLimit>
         <ReportLimit>3000</ReportLimit>
      </Constraints>
      <Property key="description">All Geozones</Property> <!-- default if not defined by list -->
      <Property key="geozoneCategory">ZoneArrive</Property> <!-- see StatusCodes.PariedStatusCodes -->
      <Property key="totalByGeozone">false</Property>
      <Property key="estimateDepartTime">false</Property>
   </Report>

   <!-- example device detail report which includes a MySQL 'where' query -->
   <Report name="EventSpeedOption_Group" type="fleet.detail" 
        class="org.opengts.war.report.event.EventDetailReport"
        layout="org.opengts.war.report.event.EventDataLayout"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.EventSpeedOptionGroup.menu">Speeds over (by Group)</MenuDescription>
      <Title i18n="ReportsXML.EventSpeedOptionGroup.title">Speeds over ${description} (by Group)</Title>
      <Subtitle i18n="ReportsXML.EventSpeedOptionGroup.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"             arg="mapLink" ifTrue="columnIndexMapLink"/>
         <Column name="index"                           ifFalse="columnIndexMapLink"/>
         <Column name="deviceId"                        />
         <Column name="date"                            />
         <Column name="time"                            />
         <Column name="statusDesc"          arg="color" />
         <Column name="pushpin"                         ifTrue="columnPushpin"/>
         <Column name="latitude"            arg="3"     ifTrue="columnLatLon"/>  <!-- "bestLatitude"  -->
         <Column name="longitude"           arg="3"     ifTrue="columnLatLon"/>  <!-- "bestLongitude" -->
         <Column name="speedH"                          />
         <Column name="speedLimit"          arg="0"     ifTrue="columnSpeedLimit"/>
         <Column name="address"                         />
      </Columns>
      <Options type="list">
         <Option name="45mph">
            <Description i18n="ReportsXML.EventSpeedOptionGroup.45mph">%{mph:45}</Description>
            <Property key="optSpeedKPH">72.405</Property>
            </Option>
         <Option name="50mph">
            <Description i18n="ReportsXML.EventSpeedOptionGroup.50mph">%{mph:50}</Description>
            <Property key="optSpeedKPH">80.4672</Property>
            </Option>
         <Option name="55mph">
            <Description i18n="ReportsXML.EventSpeedOptionGroup.55mph">%{mph:55}</Description>
            <Property key="optSpeedKPH">88.51392</Property>
            </Option>
         <Option name="60mph">
            <Description i18n="ReportsXML.EventSpeedOptionGroup.60mph">%{mph:60}</Description>
            <Property key="optSpeedKPH">96.56064</Property>
            </Option>
         <Option name="65mph">
            <Description i18n="ReportsXML.EventSpeedOptionGroup.65mph">%{mph:65}</Description>
            <Property key="optSpeedKPH">104.60736</Property>
            </Option>
         <Option name="70mph">
            <Description i18n="ReportsXML.EventSpeedOptionGroup.70mph">%{mph:70}</Description>
            <Property key="optSpeedKPH">112.65408</Property>
            </Option>
         <Option name="75mph">
            <Description i18n="ReportsXML.EventSpeedOptionGroup.75mph">%{mph:75}</Description>
            <Property key="optSpeedKPH">120.7008</Property>
            </Option>
      </Options>
      <Constraints>
         <TimeStart>-1</TimeStart>
         <TimeEnd>-1</TimeEnd>
         <ValidGPSRequired>true</ValidGPSRequired>
         <Where type="mysql"><![CDATA[ (speedKPH > ${optSpeedKPH}) ]]></Where>
         <SelectionLimit type="first">2000</SelectionLimit>
         <ReportLimit>2000</ReportLimit>
      </Constraints>
      <MapIconSelector ruleFactoryName="GTSRulesEngine,SecureENRE,ENRE">
        <!-- an installed "RuleFactory" implementation is required which can analyze this iconSelector -->
        <![CDATA[ ((speed<5)?"reddot":"heading") ]]>
      </MapIconSelector> 
      <Property key="gpsAgeColorRange">1200:#550000,3600:#BB0000</Property>
   </Report>

   <!-- EventData report showing "Excessive Speed" events -->
   <Report name="EventExcessSpeed_Group" type="fleet.detail" 
        class="org.opengts.war.report.event.EventDetailReport"
        layout="org.opengts.war.report.event.EventDataLayout"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.eventExcessSpeed.menu">${i18n.Vehicle} Excess Speed (by Group)</MenuDescription>
      <Title i18n="ReportsXML.eventExcessSpeed.title">${i18n.Vehicle} Excess Speed (by Group)</Title>
      <Subtitle i18n="ReportsXML.eventExcessSpeed.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"             arg="mapLink" ifTrue="columnIndexMapLink"/>
         <Column name="index"                           ifFalse="columnIndexMapLink"/>
         <Column name="dateTime"                        />
         <Column name="statusDesc"          arg="color" />
         <Column name="pushpin"                         ifTrue="columnPushpin"/>
         <Column name="geoPoint"            arg="4"     ifTrue="columnLatLon"/>
         <Column name="speedH"                          />
         <Column name="speedLimit"          arg="0"     ifTrue="columnSpeedLimit"/>
         <Column name="overSpeedLimit"      arg="1"     ifTrue="columnSpeedLimit"/>
         <Column name="address"                         />
      </Columns>
      <Constraints>
         <TimeStart>-1</TimeStart>
         <TimeEnd>-1</TimeEnd>
         <ValidGPSRequired>false</ValidGPSRequired>
         <Where type="mysql"><![CDATA[ ((statusCode = 0xF11A) || (statusCode = 0xF11B) || ((statusCode >= 0xF160) && (statusCode <= 0xF16F))) ]]></Where>
         <SelectionLimit type="first">1000</SelectionLimit>
         <ReportLimit>1000</ReportLimit>
      </Constraints>
      <MapIconSelector ruleFactoryName="GTSRulesEngine,SecureENRE,ENRE">
        <!-- an installed "RuleFactory" implementation is required which can analyze this iconSelector -->
        <![CDATA[ ("greenh") ]]>
      </MapIconSelector> 
      <Property key="gpsAgeColorRange">1200:#550000,3600:#BB0000</Property>
   </Report>

   <!-- event detail report for speeds greater than posted limit -->
   <!-- 'speedLimitKPH' must be defined in EventData, or an error will result -->
   <Report name="EventSpeedPosted_Group" type="fleet.detail" 
        class="org.opengts.war.report.event.EventDetailReport"
        layout="org.opengts.war.report.event.EventDataLayout"
        modules="extra"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.EventSpeedPostedGroup.menu">Exceeding Posted Speed (by Group)</MenuDescription> 
      <Title i18n="ReportsXML.EventSpeedPostedGroup.title">Exceeding Posted Speed (${description}) (by Group)</Title>
      <Subtitle i18n="ReportsXML.EventSpeedPostedGroup.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"         arg="mapLink" ifTrue="columnIndexMapLink"/>
         <Column name="index"                       ifFalse="columnIndexMapLink"/>
         <Column name="deviceId"                    />
         <Column name="date"                        />
         <Column name="time"                        />
         <Column name="geoPoint"            arg="4" ifTrue="columnLatLon"/>
         <Column name="speedH"                      />
         <Column name="speedLimit"                  />
         <Column name="overSpeedLimit"              />
         <Column name="address"                     />
      </Columns>
      <Options type="list">
         <Option name="default">
            <Description i18n="ReportsXML.EventSpeedPostedGroup.0mph">over limit</Description>
            <Property key="overLimitKPH">0.00000</Property>
            </Option>
         <Option name="5mph">
            <Description i18n="ReportsXML.EventSpeedPostedGroup.5mph">5mph over limit</Description>
            <Property key="overLimitKPH">8.04672</Property>
            </Option>
         <Option name="10mph">
            <Description i18n="ReportsXML.EventSpeedPostedGroup.10mph">10mph over limit</Description>
            <Property key="overLimitKPH">16.09344</Property>
            </Option>
      </Options>
      <Constraints>
         <TimeStart>-1</TimeStart>
         <TimeEnd>-1</TimeEnd>
         <ValidGPSRequired>true</ValidGPSRequired>
         <Where type="mysql"><![CDATA[ ((speedLimitKPH > 0) AND (speedKPH > (speedLimitKPH + ${overLimitKPH}))) ]]></Where>
         <SelectionLimit type="first">2000</SelectionLimit>
         <ReportLimit>2000</ReportLimit>
      </Constraints>
      <MapIconSelector ruleFactoryName="GTSRulesEngine,SecureENRE,ENRE">
        <!-- an installed "RuleFactory" implementation is required which can analyze this iconSelector -->
        <![CDATA[ ("heading") ]]>
      </MapIconSelector> 
      <Property key="gpsAgeColorRange">1200:#550000,3600:#BB0000</Property>
   </Report>

   <!-- EventData detail report showing "STATUS_MOTION_EXCESS_IDLE" events -->
   <Report name="EventIdle_Group" type="fleet.detail" 
        class="org.opengts.war.report.event.EventDetailReport"
        layout="org.opengts.war.report.event.EventDataLayout"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.eventIdle.menu">Idle (by Group)</MenuDescription>
      <Title i18n="ReportsXML.eventIdle.title">Idle (by Group)</Title>
      <Subtitle i18n="ReportsXML.eventIdle.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"             arg="mapLink" ifTrue="columnIndexMapLink"/>
         <Column name="index"                           ifFalse="columnIndexMapLink"/>
         <Column name="deviceId"                        />
         <Column name="dateTime"                        />
         <Column name="statusDesc"          arg="color" />
         <Column name="geoPoint"            arg="4"     ifTrue="columnLatLon"/>
         <Column name="address"                         />
      </Columns>
      <Constraints>
         <TimeStart>-1</TimeStart>
         <TimeEnd>-1</TimeEnd>
         <ValidGPSRequired>false</ValidGPSRequired>
         <Where type="mysql"><![CDATA[ ((statusCode = 0xF116) or (statusCode = 0xF118)) ]]></Where>
         <SelectionLimit type="first">1000</SelectionLimit>
         <ReportLimit>1000</ReportLimit>
      </Constraints>
      <MapIconSelector ruleFactoryName="GTSRulesEngine,SecureENRE,ENRE">
         <!-- an installed "RuleFactory" implementation is required which can analyze this iconSelector -->
         <![CDATA[ ("bluedot") ]]>
      </MapIconSelector> 
      <Property key="gpsAgeColorRange">1200:#550000,3600:#BB0000</Property>
   </Report>

   <!-- EventData detail report showing "STATUS_MOTION_EXCESS_IDLE" events -->
   <Report name="EventExcessiveIdle_Group" type="fleet.detail" 
        class="org.opengts.war.report.event.EventDetailReport"
        layout="org.opengts.war.report.event.EventDataLayout"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.eventExcessiveIdle.menu">Excessive Idle (by Group)</MenuDescription>
      <Title i18n="ReportsXML.eventExcessiveIdle.title">Excessive Idle (by Group)</Title>
      <Subtitle i18n="ReportsXML.eventExcessiveIdle.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"             arg="mapLink" ifTrue="columnIndexMapLink"/>
         <Column name="index"                           ifFalse="columnIndexMapLink"/>
         <Column name="deviceId"                        />
         <Column name="dateTime"                        />
         <Column name="statusDesc"          arg="color" />
         <Column name="geoPoint"            arg="4"     ifTrue="columnLatLon"/>
         <Column name="address"                         />
      </Columns>
      <Constraints>
         <TimeStart>-1</TimeStart>
         <TimeEnd>-1</TimeEnd>
         <ValidGPSRequired>false</ValidGPSRequired>
         <Where type="mysql"><![CDATA[ (statusCode = 0xF118) ]]></Where>
         <SelectionLimit type="first">1000</SelectionLimit>
         <ReportLimit>1000</ReportLimit>
      </Constraints>
      <MapIconSelector ruleFactoryName="GTSRulesEngine,SecureENRE,ENRE">
         <!-- an installed "RuleFactory" implementation is required which can analyze this iconSelector -->
         <![CDATA[ ("bluedot") ]]>
      </MapIconSelector> 
      <Property key="gpsAgeColorRange">1200:#550000,3600:#BB0000</Property>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- Digital input detail report -->
   <Report name="DigitalInputDetailReport_Group" type="fleet.detail" 
        class="org.opengts.extra.war.report.field.DigitalIOReport" 
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        optional="true"
        sortable="false"
        >
      <MenuDescription i18n="ReportsXML.digInputDetail.menu">Digital Input Detail Report (by Group)</MenuDescription>
      <Title i18n="ReportsXML.digInputDetail.title">Digital Input Detail Report [${description}] (by Group)</Title>
      <Subtitle i18n="ReportsXML.digInputDetail.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="deviceId"                    />
         <Column name="enterDateTime"               i18n="ReportsXML.inputOn.column" >Input On\ntime</Column>
         <Column name="exitDateTime"                i18n="ReportsXML.inputOff.column">Input Off\ntime</Column>
         <Column name="address"                     />
         <Column name="elapseSec"           arg="0" />
         <Column name="odomDelta"           arg="0" ifTrue="DigitalIOReport.odometerDelta"/>
      </Columns>
      <Options type="list">
         <Option name="input0">
            <Description i18n="ReportsXML.DigitalInputDetailReport.input_0">Input #0</Description>
            <Property key="digitalInputIndex">0</Property>
            </Option>
         <Option name="input1">
            <Description i18n="ReportsXML.DigitalInputDetailReport.input_1">Input #1</Description>
            <Property key="digitalInputIndex">1</Property>
            </Option>
         <Option name="input2">
            <Description i18n="ReportsXML.DigitalInputDetailReport.input_2">Input #2</Description>
            <Property key="digitalInputIndex">2</Property>
            </Option>
         <Option name="input3">
            <Description i18n="ReportsXML.DigitalInputDetailReport.input_3">Input #3</Description>
            <Property key="digitalInputIndex">3</Property>
            </Option>
         <Option name="input4">
            <Description i18n="ReportsXML.DigitalInputDetailReport.input_4">Input #4</Description>
            <Property key="digitalInputIndex">4</Property>
            </Option>
         <Option name="input5">
            <Description i18n="ReportsXML.DigitalInputDetailReport.input_5">Input #5</Description>
            <Property key="digitalInputIndex">5</Property>
            </Option>
         <Option name="input6">
            <Description i18n="ReportsXML.DigitalInputDetailReport.input_6">Input #6</Description>
            <Property key="digitalInputIndex">6</Property>
            </Option>
         <Option name="input7">
            <Description i18n="ReportsXML.DigitalInputDetailReport.input_7">Input #7</Description>
            <Property key="digitalInputIndex">7</Property>
            </Option>
      </Options>
      <Constraints>
         <ValidGPSRequired>false</ValidGPSRequired>
         <SelectionLimit type="first">3000</SelectionLimit>
         <ReportLimit>2000</ReportLimit>
      </Constraints>
      <Property key="reportType">detail</Property>
      <Property key="digitalInputIndex">0</Property>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- NotifyQueue alert detail report -->
   <Report name="NotifyQueueDetail_Group" type="fleet.detail" 
        class="org.opengts.rulewar.report.field.NotifyQueueReport"
        layout="org.opengts.war.report.field.FieldLayout"
        modules="rule"
        optional="true"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.notifyQueueDetail.menu">${i18n.Vehicle} Alert Detail (by Group)</MenuDescription>
      <Title i18n="ReportsXML.notifyQueueDetail.title">${i18n.Vehicle} Alert Detail (by Group)</Title>
      <Subtitle i18n="ReportsXML.notifyQueueDetail.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"                       />
         <Column name="deviceId"                    />
         <Column name="deviceDesc"                  />
         <Column name="dateTime"                    />
         <Column name="statusCode"                  />
         <Column name="ruleId"                      />
      </Columns>
      <Constraints>
         <TimeStart>-1</TimeStart>
         <TimeEnd>-1</TimeEnd>
         <ValidGPSRequired>false</ValidGPSRequired>
         <SelectionLimit type="first">2000</SelectionLimit>
         <ReportLimit>2000</ReportLimit>
      </Constraints>
   </Report>

   <!-- ======================================================================================= -->
   <!-- ======================================================================================= -->
   <!-- fleet.summary ========================================================================= -->

   <!-- fleet summary report showing the driving and idle times for a group of devices -->
   <Report name="FleetMotion" type="fleet.summary" 
        class="org.opengts.war.report.field.MotionReport"
        layout="org.opengts.war.report.field.FieldLayout"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.fleetMotion.menu">Driving Time Fleet Summary</MenuDescription>
      <Title i18n="ReportsXML.fleetMotion.title">Driving Time Fleet Summary [${description}]</Title>
      <Subtitle i18n="ReportsXML.fleetMotion.subtitle">${i18n.Group}: ${groupDesc}\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"                       />
         <Column name="deviceId"                    />
         <Column name="deviceDesc"                  />
         <Column name="drivingElapse"               />   <!-- "Driving Duration"    -->
         <Column name="odomDelta"           arg="1" ifTrue="columnOdometer"/>     <!-- "Miles" (driven)      -->
         <Column name="fuelEconomy"         arg="1" ifTrue="columnFuelEconomy"/>  <!-- "Fuel Econ" (at stop) -->
         <Column name="stopCount"                   />   <!-- "Number of Stops"   -->
    <!-- <Column name="stopElapse"                  /> -->  <!-- doesn't include time after last stop  -->
         <Column name="idleElapse"                  i18n="ReportsXML.fleetMotion.tripIdleElapsed">Trip Idle\nElapsed</Column>
         <Column name="odomDeltaWH"         arg="1" ifTrue="FleetMotion.tabulateByWorkHours"/>
         <Column name="odomDeltaAH"         arg="1" ifTrue="FleetMotion.tabulateByWorkHours"/>
         <Column name="drivingElapseWH"             ifTrue="FleetMotion.tabulateByWorkHours"/>
         <Column name="drivingElapseAH"             ifTrue="FleetMotion.tabulateByWorkHours"/>
      </Columns>
      <Options type="list">
         <Option name="default" ifTrue="optionTripStartType_default">
            <Description i18n="ReportsXML.fleetMotion.default">Default</Description>
            <Property key="tripStartType">default</Property>
            <Property key="minimumStoppedTime">300</Property> <!-- seconds -->
            <Property key="minimumSpeedKPH">0.0</Property>
            <Property key="stopOnIgnitionOff">true</Property>
            </Option>
         <Option name="ignition" ifTrue="optionTripStartType_ignition">
            <Description i18n="ReportsXML.fleetMotion.ignition">Based on Ignition On/Off Status Codes</Description>
            <Property key="tripStartType">ignition</Property>
            <Property key="minimumSpeedKPH">0.0</Property>
            </Option>
         <Option name="startstop" ifTrue="optionTripStartType_startstop">
            <Description i18n="ReportsXML.fleetMotion.startstop">Based on Motion Start/Stop Status Codes</Description>
            <Property key="tripStartType">startstop</Property>
            <Property key="minimumSpeedKPH">0.0</Property>
            <Property key="stopOnIgnitionOff">true</Property>
            </Option>
         <Option name="engine" ifTrue="optionTripStartType_engine">
            <Description i18n="ReportsXML.fleetMotion.engine">Based on Engine Start/Stop Status Codes</Description>
            <Property key="tripStartType">engine</Property>
            <Property key="minimumSpeedKPH">0.0</Property>
            <Property key="stopOnIgnitionOff">true</Property>
            </Option>
         <Option name="motion0" ifTrue="optionTripStartType_motion">
            <Description i18n="ReportsXML.fleetMotion.motion0">Based on 0 Minute Minimum Stop</Description>
            <Property key="tripStartType">motion</Property>
            <Property key="minimumStoppedTime">0</Property> <!-- seconds -->
            <Property key="minimumSpeedKPH">0.0</Property>
            <Property key="stopOnIgnitionOff">false</Property>
            </Option>
         <Option name="motion5" ifTrue="optionTripStartType_motion">
            <Description i18n="ReportsXML.fleetMotion.motion5">Based on 5 Minute Minimum Stop</Description>
            <Property key="tripStartType">motion</Property>
            <Property key="minimumStoppedTime">300</Property> <!-- seconds -->
            <Property key="minimumSpeedKPH">0.0</Property>
            <Property key="stopOnIgnitionOff">false</Property>
            </Option>
         <Option name="motion10" ifTrue="optionTripStartType_motion">
            <Description i18n="ReportsXML.fleetMotion.motion10">Based on 10 Minute Minimum Stop</Description>
            <Property key="tripStartType">motion</Property>
            <Property key="minimumStoppedTime">600</Property> <!-- seconds -->
            <Property key="minimumSpeedKPH">0.0</Property>
            <Property key="stopOnIgnitionOff">false</Property>
            </Option>
         <Option name="motion20" ifTrue="optionTripStartType_motion">
            <Description i18n="ReportsXML.fleetMotion.motion20">Based on 20 Minute Minimum Stop</Description>
            <Property key="tripStartType">motion</Property>
            <Property key="minimumStoppedTime">1200</Property> <!-- seconds -->
            <Property key="minimumSpeedKPH">0.0</Property>
            <Property key="stopOnIgnitionOff">false</Property>
            </Option>
         <Option name="motion30" ifTrue="optionTripStartType_motion">
            <Description i18n="ReportsXML.fleetMotion.motion30">Based on 30 Minute Minimum Stop</Description>
            <Property key="tripStartType">motion</Property>
            <Property key="minimumStoppedTime">1800</Property> <!-- seconds -->
            <Property key="minimumSpeedKPH">0.0</Property>
            <Property key="stopOnIgnitionOff">false</Property>
            </Option>
      </Options>
      <Constraints>
         <!-- EventData records MUST be in ascending order -->
         <SelectionLimit type="first">12000</SelectionLimit>
         <ReportLimit>8000</ReportLimit>
      </Constraints>
      <MapIconSelector ruleFactoryName="GTSRulesEngine,SecureENRE,ENRE">
        <!-- an installed "RuleFactory" implementation is required which can analyze this iconSelector -->
        <![CDATA[ ((speed<5)?"reddot":"heading") ]]>
      </MapIconSelector> 
      <Property key="alwaysReadAllEvents">true</Property> <!-- should be "false" for production use -->
      <Property key="isFleetSummaryReport">true</Property>
      <Property key="showMapLink">false</Property> <!-- map not applicable on this report -->
      <Property key="tripStartType">default</Property>
      <Property key="minimumStoppedTime">300</Property> <!-- seconds -->
      <Property key="minimumSpeedKPH">0.0</Property> <!-- kph -->
      <Property key="stopOnIgnitionOff">true</Property>
      <Property key="tabulateByWorkHours">${FleetMotion.tabulateByWorkHours=false}</Property>
      <Property key="WorkHours.sun">${FleetMotion.WorkHours.sun=}</Property>
      <Property key="WorkHours.mon">${FleetMotion.WorkHours.mon=06:00-18:00}</Property>
      <Property key="WorkHours.tue">${FleetMotion.WorkHours.tue=06:00-18:00}</Property>
      <Property key="WorkHours.wed">${FleetMotion.WorkHours.wed=06:00-18:00}</Property>
      <Property key="WorkHours.thu">${FleetMotion.WorkHours.thu=06:00-18:00}</Property>
      <Property key="WorkHours.fri">${FleetMotion.WorkHours.fri=06:00-18:00}</Property>
      <Property key="WorkHours.sat">${FleetMotion.WorkHours.sat=}</Property>
   </Report>

   <!-- fleet summary report showing the top device idle times (sorted descending by "idleElapse") -->
   <Report name="FleetIdle" type="fleet.summary" 
        class="org.opengts.war.report.field.MotionReport"
        layout="org.opengts.war.report.field.FieldLayout"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.fleetIdle.menu">Fleet Idle Time Summary</MenuDescription>
      <Title i18n="ReportsXML.fleetIdle.title">Fleet Idle Time Summary [${description}]</Title>
      <Subtitle i18n="ReportsXML.fleetIdle.subtitle">${i18n.Group}: ${groupDesc}\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"                       />
         <Column name="deviceId"                    />
         <Column name="deviceDesc"                  />
         <Column name="drivingElapse"               />   <!-- "Driving Duration"    -->
         <Column name="odomDelta"           arg="1" ifTrue="columnOdometer"/>     <!-- "Miles" (driven)      -->
         <Column name="fuelEconomy"         arg="1" ifTrue="columnFuelEconomy"/>  <!-- "Fuel Econ" (at stop) -->
         <Column name="stopCount"                   />   <!-- "Number of Stops"   -->
    <!-- <Column name="stopElapse"                  /> -->  <!-- doesn't include time after last stop  -->
         <Column name="idleElapse"                  i18n="ReportsXML.fleetIdle.tripIdleElapsed">Trip Idle\nElapsed</Column>
      </Columns>
      <Options type="list">
         <Option name="default" ifTrue="optionTripStartType_default">
            <Description i18n="ReportsXML.fleetIdle.default">Default</Description>
            <Property key="tripStartType">default</Property>
            <Property key="minimumStoppedTime">300</Property> <!-- seconds -->
            <Property key="minimumSpeedKPH">0.0</Property>
            <Property key="stopOnIgnitionOff">true</Property>
            </Option>
         <Option name="ignition" ifTrue="optionTripStartType_ignition">
            <Description i18n="ReportsXML.fleetIdle.ignition">Based on Ignition On/Off Status Codes</Description>
            <Property key="tripStartType">ignition</Property>
            <Property key="minimumSpeedKPH">0.0</Property>
            </Option>
         <Option name="startstop" ifTrue="optionTripStartType_startstop">
            <Description i18n="ReportsXML.fleetIdle.startstop">Based on Motion Start/Stop Status Codes</Description>
            <Property key="tripStartType">startstop</Property>
            <Property key="minimumSpeedKPH">0.0</Property>
            <Property key="stopOnIgnitionOff">true</Property>
            </Option>
         <Option name="engine" ifTrue="optionTripStartType_engine">
            <Description i18n="ReportsXML.fleetIdle.engine">Based on Engine Start/Stop Status Codes</Description>
            <Property key="tripStartType">engine</Property>
            <Property key="minimumSpeedKPH">0.0</Property>
            <Property key="stopOnIgnitionOff">true</Property>
            </Option>
         <Option name="motion0" ifTrue="optionTripStartType_motion">
            <Description i18n="ReportsXML.fleetIdle.motion0">Based on 0 Minute Minimum Stop</Description>
            <Property key="tripStartType">motion</Property>
            <Property key="minimumStoppedTime">0</Property> <!-- seconds -->
            <Property key="minimumSpeedKPH">0.0</Property>
            <Property key="stopOnIgnitionOff">false</Property>
            </Option>
         <Option name="motion5" ifTrue="optionTripStartType_motion">
            <Description i18n="ReportsXML.fleetIdle.motion5">Based on 5 Minute Minimum Stop</Description>
            <Property key="tripStartType">motion</Property>
            <Property key="minimumStoppedTime">300</Property> <!-- seconds -->
            <Property key="minimumSpeedKPH">0.0</Property>
            <Property key="stopOnIgnitionOff">false</Property>
            </Option>
         <Option name="motion10" ifTrue="optionTripStartType_motion">
            <Description i18n="ReportsXML.fleetIdle.motion10">Based on 10 Minute Minimum Stop</Description>
            <Property key="tripStartType">motion</Property>
            <Property key="minimumStoppedTime">600</Property> <!-- seconds -->
            <Property key="minimumSpeedKPH">0.0</Property>
            <Property key="stopOnIgnitionOff">false</Property>
            </Option>
         <Option name="motion20" ifTrue="optionTripStartType_motion">
            <Description i18n="ReportsXML.fleetIdle.motion20">Based on 20 Minute Minimum Stop</Description>
            <Property key="tripStartType">motion</Property>
            <Property key="minimumStoppedTime">1200</Property> <!-- seconds -->
            <Property key="minimumSpeedKPH">0.0</Property>
            <Property key="stopOnIgnitionOff">false</Property>
            </Option>
         <Option name="motion30" ifTrue="optionTripStartType_motion">
            <Description i18n="ReportsXML.fleetIdle.motion30">Based on 30 Minute Minimum Stop</Description>
            <Property key="tripStartType">motion</Property>
            <Property key="minimumStoppedTime">1800</Property> <!-- seconds -->
            <Property key="minimumSpeedKPH">0.0</Property>
            <Property key="stopOnIgnitionOff">false</Property>
            </Option>
      </Options>
      <Constraints>
         <!-- EventData records MUST be in ascending order -->
         <SelectionLimit type="first">15000</SelectionLimit>
         <ReportLimit>8000</ReportLimit>
      </Constraints>
      <MapIconSelector ruleFactoryName="GTSRulesEngine,SecureENRE,ENRE">
        <!-- an installed "RuleFactory" implementation is required which can analyze this iconSelector -->
        <![CDATA[ ((speed<5)?"reddot":"heading") ]]>
      </MapIconSelector> 
      <Property key="alwaysReadAllEvents">true</Property> <!-- should be "false" for production use -->
      <Property key="isFleetSummaryReport">true</Property>
      <Property key="fleetSortByField">idleElapse,descending,-1,trim</Property> <!-- SORT_FIELD,ascending|descending,SORT_LIMIT,[trim] -->
      <Property key="showMapLink">false</Property> <!-- map not applicable on this report -->
      <Property key="tripStartType">default</Property>
      <Property key="minimumStoppedTime">300</Property> <!-- seconds -->
      <Property key="minimumSpeedKPH">0.0</Property> <!-- kph -->
      <Property key="stopOnIgnitionOff">true</Property>
      <Property key="tabulateByWorkHours">false</Property>
   </Report>

   <!-- fleet summary report showing the last known location of every device -->
   <Report name="EventDataSummary" type="fleet.summary" 
        class="org.opengts.war.report.event.EventSummaryReport"
        layout="org.opengts.war.report.event.EventDataLayout"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.eventSummary.menu">Last Known ${i18n.Vehicle} Location</MenuDescription>
      <Title i18n="ReportsXML.eventSummary.title">Last Known ${i18n.Vehicle} Location [${description}]</Title>
      <Subtitle i18n="ReportsXML.eventSummary.subtitle">${i18n.Group}: ${groupDesc}\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"                       />
         <Column name="deviceDesc"                  />
         <Column name="deviceId"                    />
         <Column name="date"                        />
         <Column name="time"                        />
     <!-- Column name="pushpin"                     ifTrue="columnPushpin"/ -->
         <Column name="odometer"            arg="0" ifTrue="columnOdometer"/>
         <Column name="geoPoint"            arg="4" ifTrue="columnLatLon"/>
         <Column name="address"                     />
         <Column name="lastBatteryPercent"          ifTrue="columnBattery"/>
         <Column name="checkinAge"                  />
     <!-- Column name="lastFaultCodes"              ifTrue="columnFaultCodes"/ -->
      </Columns>
      <Options type="list">
         <Option name="all">
            <Description i18n="ReportsXML.eventSummary.default">All Events</Description>
            <Property key="summary.where"><![CDATA[ (1=1) ]]></Property>
            </Option>
         <Option name="waymark0" ifTrue="optionSummary_waymark0">
            <Description i18n="ReportsXML.eventSummary.waymark0">'${statusCodeDesc:0xF030}' Events</Description>
            <Property key="summary.where"><![CDATA[ (statusCode = 0xF030) ]]></Property>
            </Option>
         <Option name="waymark1" ifTrue="optionSummary_waymark1">
            <Description i18n="ReportsXML.eventSummary.waymark1">'${statusCodeDesc:0xF031}' Events</Description>
            <Property key="summary.where"><![CDATA[ (statusCode = 0xF031) ]]></Property>
            </Option>
      </Options>
      <Constraints>
         <SelectionLimit type="last">1</SelectionLimit> <!-- 1 per device -->
         <ReportLimit>3000</ReportLimit>
         <Where type="mysql"><![CDATA[ ${summary.where=} ]]></Where>
      </Constraints>
      <MapIconSelector ruleFactoryName="GTSRulesEngine,SecureENRE,ENRE">
        <!-- an installed "RuleFactory" implementation is required which can analyze this iconSelector -->
        <![CDATA[ ((speed<5)?"reddot":"heading") ]]>
      </MapIconSelector>
      <Property key="minimumCheckInAge">0</Property>
      <Property key="ignoreReportStartTime">true</Property>
      <Property key="gpsAgeColorRange">1200:#550000,3600:#BB0000</Property>
      <Property key="checkinAgeColorRange">3600:#AA9700,86400:#BB0000</Property>
   </Report>

   <!-- fleet summary report showing the first occuring event for each device -->
   <Report name="FirstEventSummary" type="fleet.summary" 
        class="org.opengts.war.report.event.EventSummaryReport"
        layout="org.opengts.war.report.event.EventDataLayout"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.firstEventSummary.menu">First Event ${i18n.Vehicle} Location</MenuDescription>
      <Title i18n="ReportsXML.firstEventSummary.title">First Event ${i18n.Vehicle} Location [${description}]</Title>
      <Subtitle i18n="ReportsXML.firstEventSummary.subtitle">${i18n.Group}: ${groupDesc}\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"                       />
         <Column name="deviceDesc"                  />
         <Column name="deviceId"                    />
         <Column name="date"                        />
         <Column name="time"                        />
         <Column name="statusDesc"                  />
         <Column name="speedH"                      />
         <Column name="speedLimit"          arg="0" ifTrue="columnSpeedLimit"/>
         <Column name="odometer"            arg="0" ifTrue="columnOdometer"/>
         <Column name="geoPoint"            arg="4" ifTrue="columnLatLon"/>
         <Column name="address"                     />
      </Columns>
      <Options type="list">
         <Option name="all">
            <Description i18n="ReportsXML.firstEventSummary.default">Ignition On</Description>
            <Property key="summary.where"><![CDATA[ (statusCode = 0xF401) ]]></Property>
            </Option>
         <Option name="motion">
            <Description i18n="ReportsXML.firstEventSummary.motion">Moving</Description>
            <Property key="summary.where"><![CDATA[ (speedKPH > 0.0) ]]></Property>
            </Option>
      </Options>
      <Constraints>
         <SelectionLimit type="first">1000</SelectionLimit>
         <ReportLimit>3000</ReportLimit>
         <Where type="mysql"><![CDATA[ ${summary.where=} ]]></Where>
      </Constraints>
      <MapIconSelector ruleFactoryName="GTSRulesEngine,SecureENRE,ENRE">
        <!-- an installed "RuleFactory" implementation is required which can analyze this iconSelector -->
        <![CDATA[ ((speed<5)?"reddot":"heading") ]]>
      </MapIconSelector>
      <Property key="minimumCheckInAge">0</Property>
      <Property key="ignoreReportStartTime">false</Property>
      <Property key="gpsAgeColorRange">1200:#550000,3600:#BB0000</Property>
      <Property key="checkinAgeColorRange">3600:#AA9700,86400:#BB0000</Property>
   </Report>

   <!-- fleet summary report showing devices with an excessive last-check-in time -->
   <Report name="ExcessiveLastCheckIn" type="fleet.summary" 
        class="org.opengts.war.report.event.EventSummaryReport"
        layout="org.opengts.war.report.event.EventDataLayout"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.excessiveCheckin.menu">Excessive Last Check-in</MenuDescription>
      <Title i18n="ReportsXML.excessiveCheckin.title">Excessive Last Check-in [${description}]</Title>
      <Subtitle i18n="ReportsXML.excessiveCheckin.subtitle">${i18n.Group}: ${groupDesc}\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"                       />
         <Column name="deviceDesc"                  />
         <Column name="deviceId"                    />
         <Column name="groupId"                     />
         <Column name="date"                        />
         <Column name="time"                        />
         <Column name="geoPoint"            arg="4" ifTrue="columnLatLon"/>
         <Column name="address"                     />
         <Column name="checkinAge"                  />
      </Columns>
      <Options type="list">
         <Option name="1day">
            <Description i18n="ReportsXML.excessiveCheckin.1Day">More than 1 day</Description>
            <Property key="minimumCheckInAge">86400</Property>
            </Option>
         <Option name="2days">
            <Description i18n="ReportsXML.excessiveCheckin.2Days">More than 2 days</Description>
            <Property key="minimumCheckInAge">172800</Property>
            </Option>
         <Option name="3days">
            <Description i18n="ReportsXML.excessiveCheckin.3Days">More than 3 days</Description>
            <Property key="minimumCheckInAge">259200</Property>
            </Option>
         <Option name="7days">
            <Description i18n="ReportsXML.excessiveCheckin.7Days">More than 7 days</Description>
            <Property key="minimumCheckInAge">604800</Property>
            </Option>
         <Option name="30days">
            <Description i18n="ReportsXML.excessiveCheckin.30Days">More than 30 days</Description>
            <Property key="minimumCheckInAge">2592000</Property>
            </Option>
         <Option name="100days">
            <Description i18n="ReportsXML.excessiveCheckin.100Days">More than 100 days</Description>
            <Property key="minimumCheckInAge">8640000</Property>
            </Option>
      </Options>
      <Constraints>
         <SelectionLimit type="last">1</SelectionLimit> <!-- 1 per device -->
         <ReportLimit>2000</ReportLimit>
      </Constraints>
      <Property key="minimumCheckInAge">0</Property>
      <Property key="ignoreReportStartTime">true</Property>
      <Property key="gpsAgeColorRange">1200:#550000,3600:#BB0000</Property>
      <Property key="checkinAgeColorRange">3600:#AA9700,86400:#BB0000</Property>
   </Report>

   <!-- minimal fleet summary report -->
   <Report name="CTEventSummary" type="fleet.summary" 
        class="org.opengts.war.report.event.EventSummaryReport"
        layout="org.opengts.war.report.event.EventDataLayout"
        modules="extra"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.ctEventSummary.menu">Celltrac Last Known ${i18n.Vehicle} Location</MenuDescription>
      <Title i18n="ReportsXML.ctEventSummary.title">Celltrac Last Known ${i18n.Vehicle} Location [${description}]</Title>
      <Subtitle i18n="ReportsXML.ctEventSummary.subtitle">${i18n.Group}: ${groupDesc}\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"                       i18n="ReportsXML.CTEventSummary.index"  >#</Column>
         <Column name="deviceDesc"                  i18n="ReportsXML.CTEventSummary.desc"   >Desc</Column>
         <Column name="dateTime"                    i18n="ReportsXML.CTEventSummary.date"   >Date</Column>
         <Column name="geoPoint"            arg="4" i18n="ReportsXML.CTEventSummary.latLon" >Lat/Lon</Column>
     <!-- Column name="odometer"            arg="0" i18n="ReportsXML.CTEventSummary.odom"   >Odom</Column -->
         <Column name="address"                     i18n="ReportsXML.CTEventSummary.address">Address</Column>
      </Columns>
      <Constraints>
         <SelectionLimit type="last">1</SelectionLimit> <!-- 1 per device -->
         <ReportLimit>2000</ReportLimit>
      </Constraints>
      <MapIconSelector ruleFactoryName="GTSRulesEngine,SecureENRE,ENRE">
        <!-- an installed "RuleFactory" implementation is required which can analyze this iconSelector -->
        <![CDATA[ ((speed<5)?"reddot":"heading") ]]>
      </MapIconSelector> 
      <Property key="callbackColumnHeaderDescriptions">true</Property>
      <Property key="gpsAgeColorRange">1200:#550000,3600:#BB0000</Property>
      <Property key="checkinAgeColorRange">3600:#AA9700,86400:#BB0000</Property>
   </Report>

   <!-- Event counts by Device -->
   <Report name="EventCount" type="fleet.summary" 
        class="org.opengts.war.report.field.EventCountReport"
        layout="org.opengts.war.report.field.FieldLayout"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.eventCount.menu">Received Event Counts</MenuDescription>
      <Title i18n="ReportsXML.eventCount.title">Count of ${description} Received Events</Title>
      <Subtitle i18n="ReportsXML.eventCount.subtitle">${i18n.Group}: ${groupDesc}\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"                       />
         <Column name="deviceDesc"                  />
         <Column name="deviceId"                    />
         <Column name="count"                       />
         <Column name="checkinAge"                  />
      </Columns>
      <Options type="list">
         <Option name="all">
            <Description i18n="ReportsXML.eventCount.all">All</Description>
            <Property key="count.where"><![CDATA[ (1=1) ]]></Property>
            </Option>
         <Option name="initialization">
            <Description i18n="ReportsXML.eventCount.initialization">'Initialization'</Description>
            <Property key="count.where"><![CDATA[ (statusCode = 0xF010) ]]></Property>
            </Option>
         <Option name="inmotion">
            <Description i18n="ReportsXML.eventCount.inmotion">'In-Motion'</Description>
            <Property key="count.where"><![CDATA[ (statusCode = 0xF112) ]]></Property>
            </Option>
      </Options>
      <Constraints>
         <Where type="mysql"><![CDATA[ ${count.where=} ]]></Where>
      </Constraints>
      <Property key="summarizeByDay">false</Property>
      <Property key="checkinAgeColorRange">3600:#AA9700,86400:#BB0000</Property>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- Fleet Fuel summary report -->
   <Report name="FuelSummaryReport" type="fleet.summary" 
        class="org.opengts.extra.war.report.field.FuelSummaryReport" 
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        optional="true"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.fuelSummary.menu">Fuel Summary Report</MenuDescription>
      <Title i18n="ReportsXML.fuelSummary.title">Fuel Summary Report</Title>
      <Subtitle i18n="ReportsXML.fuelSummary.subtitle">${i18n.Group}: ${groupDesc}\n${dateRange}</Subtitle>
      <Columns>
         <Column name="deviceDesc"                  />
         <Column name="deviceId"                    />
         <Column name="engineHours"         arg="3" />
         <Column name="fuelTotal"           arg="1" />
         <Column name="idleHours"           arg="3" />
         <Column name="fuelIdle"            arg="1" />
         <Column name="workHours"           arg="3" />
         <Column name="fuelWork"            arg="1" />
         <Column name="ptoHours"            arg="3" />
         <Column name="fuelPTO"             arg="1" />
         <Column name="odomDelta"           arg="1" />
         <Column name="fuelEconomy"         arg="1" />
         <Column name="fuelEconomyType"             ifTrue="FuelSummaryReport.showFuelEconomyType"/>
      </Columns>
      <Constraints>
         <ValidGPSRequired>false</ValidGPSRequired>
         <SelectionLimit type="first">3000</SelectionLimit>
         <ReportLimit>2000</ReportLimit>
      </Constraints>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- Fleet Fuel/Stop summary report -->
   <Report name="FuelStopSummaryReport" type="fleet.summary" 
        class="org.opengts.extra.war.report.field.FuelSummaryReport" 
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        optional="true"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.fuelStopSummary.menu">Fuel/Stop Summary Report</MenuDescription>
      <Title i18n="ReportsXML.fuelStopSummary.title">Fuel/Stop Summary Report</Title>
      <Subtitle i18n="ReportsXML.fuelStopSummary.subtitle">${i18n.Group}: ${groupDesc}\n${dateRange}</Subtitle>
      <Columns>
         <Column name="deviceDesc"                  />
         <Column name="deviceId"                    />
         <Column name="engineHours"         arg="3" />
         <Column name="fuelTotal"           arg="1" />
         <Column name="odomDelta"           arg="1" /> <!-- Driven Miles -->
         <Column name="workHours"           arg="3" i18n="ReportsXML.FuelSummaryReport.drivingHours">Driving\nHours</Column>
         <Column name="stopCount"                   />
         <Column name="avgIdleHours"        arg="3" i18n="ReportsXML.FuelSummaryReport.idleTimePerStop">Idle time\nper Stop</Column>
         <Column name="idleHours"           arg="3" />
         <Column name="fuelEconomy"         arg="1" />
         <Column name="fuelEconomyType"             ifTrue="FuelSummaryReport.showFuelEconomyType"/>
         <Column name="fuelIdle"            arg="1" i18n="ReportsXML.FuelSummaryReport.idleFuelJBUS">Idle Fuel\n(JBUS)</Column>
         <Column name="fuelWork"            arg="1" i18n="ReportsXML.FuelSummaryReport.drivingFuelJBUS">Driving Fuel\n(JBUS)</Column>
         <Column name="ptoHours"            arg="3" i18n="ReportsXML.FuelSummaryReport.ptoHoursJBUS">PTO Hours\n(JBUS)</Column>
         <Column name="fuelPTO"             arg="1" i18n="ReportsXML.FuelSummaryReport.ptoFuelJBUS">PTO Fuel\n(JBUS)</Column>
      </Columns>
      <Constraints>
         <ValidGPSRequired>false</ValidGPSRequired>
         <SelectionLimit type="first">4000</SelectionLimit>
         <ReportLimit>3000</ReportLimit>
      </Constraints>
      <Property key="tripStartType">ignition</Property>
      <Property key="minimumStoppedTime">300</Property> <!-- seconds -->
      <Property key="minimumSpeedKPH">3.0</Property> <!-- kph -->
      <Property key="stopOnIgnitionOff">true</Property>
      <Property key="countNumberOfStops">true</Property>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- Ignition summary report -->
   <Report name="IgnitionSummaryReport" type="fleet.summary" 
        class="org.opengts.extra.war.report.field.DigitalIOReport" 
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        optional="true"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.ignitionSummary.menu">Ignition Summary Report</MenuDescription>
      <Title i18n="ReportsXML.ignitionSummary.title">Ignition Summary Report</Title>
      <Subtitle i18n="ReportsXML.ignitionSummary.subtitle">${i18n.Group}: ${groupDesc}\n${dateRange}</Subtitle>
      <Columns>
         <Column name="deviceDesc"                  />
         <Column name="deviceId"                    />
         <Column name="elapseSec"           arg="0" />
         <Column name="odomDelta"           arg="0" ifTrue="DigitalIOReport.odometerDelta"/>
      </Columns>
      <Constraints>
         <ValidGPSRequired>false</ValidGPSRequired>
         <SelectionLimit type="first">3000</SelectionLimit>
         <ReportLimit>2000</ReportLimit>
      </Constraints>
      <Property key="reportType">summary</Property>
      <Property key="digitalInputIndex">ignition</Property>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- Ignition summary report -->
   <Report name="DigitalInputSummaryReport" type="fleet.summary" 
        class="org.opengts.extra.war.report.field.DigitalIOReport" 
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        optional="true"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.digInputSummary.menu">Digital Input Summary Report</MenuDescription>
      <Title i18n="ReportsXML.digInputSummary.title">Digital Input Summary Report [${description}]</Title>
      <Subtitle i18n="ReportsXML.digInputSummary.subtitle">${i18n.Group}: ${groupDesc}\n${dateRange}</Subtitle>
      <Columns>
         <Column name="deviceDesc"                  />
         <Column name="deviceId"                    />
         <Column name="elapseSec"           arg="0" />
         <Column name="odomDelta"           arg="0" ifTrue="DigitalIOReport.odometerDelta"/>
      </Columns>
      <Options type="list">
         <Option name="input0">
            <Description i18n="ReportsXML.DigitalInputSummaryReport.input_0">Input #0</Description>
            <Property key="digitalInputIndex">0</Property>
            </Option>
         <Option name="input1">
            <Description i18n="ReportsXML.DigitalInputSummaryReport.input_1">Input #1</Description>
            <Property key="digitalInputIndex">1</Property>
            </Option>
         <Option name="input2">
            <Description i18n="ReportsXML.DigitalInputSummaryReport.input_2">Input #2</Description>
            <Property key="digitalInputIndex">2</Property>
            </Option>
         <Option name="input3">
            <Description i18n="ReportsXML.DigitalInputSummaryReport.input_3">Input #3</Description>
            <Property key="digitalInputIndex">3</Property>
            </Option>
         <Option name="input4">
            <Description i18n="ReportsXML.DigitalInputSummaryReport.input_4">Input #4</Description>
            <Property key="digitalInputIndex">4</Property>
            </Option>
         <Option name="input5">
            <Description i18n="ReportsXML.DigitalInputSummaryReport.input_5">Input #5</Description>
            <Property key="digitalInputIndex">5</Property>
            </Option>
         <Option name="input6">
            <Description i18n="ReportsXML.DigitalInputSummaryReport.input_6">Input #6</Description>
            <Property key="digitalInputIndex">6</Property>
            </Option>
         <Option name="input7">
            <Description i18n="ReportsXML.DigitalInputSummaryReport.input_7">Input #7</Description>
            <Property key="digitalInputIndex">7</Property>
            </Option>
         <!-- - ->
         <Option name="input8">
            <Description i18n="ReportsXML.DigitalInputSummaryReport.input_8">Input #8</Description>
            <Property key="digitalInputIndex">8</Property>
            </Option>
         <Option name="input9">
            <Description i18n="ReportsXML.DigitalInputSummaryReport.input_9">Input #9</Description>
            <Property key="digitalInputIndex">9</Property>
            </Option>
         <Option name="input10">
            <Description i18n="ReportsXML.DigitalInputSummaryReport.input_10">Input #10</Description>
            <Property key="digitalInputIndex">10</Property>
            </Option>
         <Option name="input11">
            <Description i18n="ReportsXML.DigitalInputSummaryReport.input_11">Input #11</Description>
            <Property key="digitalInputIndex">11</Property>
            </Option>
         <Option name="input12">
            <Description i18n="ReportsXML.DigitalInputSummaryReport.input_12">Input #12</Description>
            <Property key="digitalInputIndex">12</Property>
            </Option>
         <Option name="input13">
            <Description i18n="ReportsXML.DigitalInputSummaryReport.input_13">Input #13</Description>
            <Property key="digitalInputIndex">13</Property>
            </Option>
         <Option name="input14">
            <Description i18n="ReportsXML.DigitalInputSummaryReport.input_14">Input #14</Description>
            <Property key="digitalInputIndex">14</Property>
            </Option>
         <Option name="input15">
            <Description i18n="ReportsXML.DigitalInputSummaryReport.input_15">Input #15</Description>
            <Property key="digitalInputIndex">15</Property>
            </Option>
         <!- - -->
      </Options>
      <Constraints>
         <ValidGPSRequired>false</ValidGPSRequired>
         <SelectionLimit type="first">3000</SelectionLimit>
         <ReportLimit>2000</ReportLimit>
      </Constraints>
      <Property key="reportType">summary</Property>
      <Property key="digitalInputIndex">0</Property>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- Odometer Service/Maintenance Report -->
   <Report name="PeriodicServiceOdom" type="fleet.summary"
        class="org.opengts.extra.war.report.field.DeviceReport"
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        optional="true"
        sortable="true"
        >
      <!--
      <MenuDescription i18n="ReportsXML.maintenenceReport.menu">Odometer Periodic Service Report</MenuDescription>
      <Title i18n="ReportsXML.maintenenceReport.title">Odometer Periodic Service Report</Title>
      <Subtitle i18n="ReportsXML.maintenenceReport.subtitle">Devices: ${groupDesc}</Subtitle>
      -->
      <MenuDescription i18n="ReportsXML.periodicServiceOdom.menu">Odometer Periodic Service Report</MenuDescription>
      <Title i18n="ReportsXML.periodicServiceOdom.title">Odometer Periodic Service Report</Title>
      <Subtitle i18n="ReportsXML.periodicServiceOdom.subtitle">${i18n.Group}: ${groupDesc}</Subtitle>
      <Columns>
         <Column name="index"                          />
         <Column name="deviceDesc"                     />
         <Column name="deviceId"                       />
         <Column name="odometer"              arg="0"  />
         <Column name="serviceLastDist0"      arg="0"  />
         <Column name="serviceIntervalDist0"  arg="0"  />
         <Column name="serviceRemainingDist0" arg="0"  />
         <Column name="serviceNextDist0"      arg="0"  />
         <Column name="serviceLastDist1"      arg="0"  ifTrue="columnServiceDist1"/>
         <Column name="serviceIntervalDist1"  arg="0"  ifTrue="columnServiceDist1"/>
         <Column name="serviceRemainingDist1" arg="0"  ifTrue="columnServiceDist1"/>
         <Column name="serviceNextDist1"      arg="0"  ifTrue="columnServiceDist1"/>
         <Column name="faultCodes"                     ifTrue="columnFaultCodes"/>
         <Column name="checkinAge"                     />
         <Column name="serviceNotes"                   ifTrue="columnServiceNotes"/>
      </Columns>
      <Property key="includeDeltaValues">false</Property>
      <Property key="includeTotals">false</Property>
      <Property key="adjustTotalsRounding">false</Property>
      <Property key="checkinAgeColorRange">3600:#AA9700,86400:#BB0000</Property>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- EngineHours Service/Maintenance Report -->
   <Report name="PeriodicServiceHours" type="fleet.summary"
        class="org.opengts.extra.war.report.field.DeviceReport"
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        optional="true"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.periodicServiceHours.menu">Engine Hours Periodic Service Report</MenuDescription>
      <Title i18n="ReportsXML.periodicServiceHours.title">Engine Hours Periodic Service Report</Title>
      <Subtitle i18n="ReportsXML.periodicServiceHours.subtitle">${i18n.Group}: ${groupDesc}</Subtitle>
      <Columns>
         <Column name="index"                       />
         <Column name="deviceDesc"                  />
         <Column name="deviceId"                    />
         <Column name="engineHours"                 />
         <Column name="serviceLastHR0"              />
         <Column name="serviceIntervalHR0"          />
         <Column name="serviceRemainingHR0"         />
         <Column name="serviceNextHR0"              />
         <Column name="faultCodes"                  ifTrue="columnFaultCodes"/>
         <Column name="checkinAge"                  />
         <Column name="serviceNotes"                ifTrue="columnServiceNotes"/>
      </Columns>
      <Property key="checkinAgeColorRange">3600:#AA9700,86400:#BB0000</Property>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- Device Last Check-In Report -->
   <Report name="DeviceLastCheckIn" type="fleet.summary"
        class="org.opengts.extra.war.report.field.DeviceReport"
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        optional="true"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.deviceLastCheckInReport.menu">Device Last Check-In Report</MenuDescription>
      <Title i18n="ReportsXML.deviceLastCheckInReport.title">Device Last Check-In Report</Title>
      <Subtitle i18n="ReportsXML.deviceLastCheckInReport.subtitle">${i18n.Group}: ${groupDesc}</Subtitle>
      <Columns>
         <Column name="index"                       />
         <Column name="deviceDesc"                  />
         <Column name="deviceId"                    />
         <Column name="odometer"           arg="0"  />
         <Column name="checkinDateTime"             />
         <Column name="checkinAge"                  />
      </Columns>
      <Property key="checkinAgeColorRange">3600:#AA9700,86400:#BB0000</Property>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- Device Never Check-In Report -->
   <Report name="DeviceNeverCheckIn" type="fleet.summary"
        class="org.opengts.extra.war.report.field.DeviceReport"
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        optional="true"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.deviceNeverCheckInReport.menu">Device Never Check-In Report</MenuDescription>
      <Title i18n="ReportsXML.deviceNeverCheckInReport.title">Device Never Check-In Report</Title>
      <Subtitle i18n="ReportsXML.deviceNeverCheckInReport.subtitle">${i18n.Group}: ${groupDesc}\n</Subtitle>
      <Columns>
         <Column name="index"                       />
         <Column name="deviceDesc"                  />
         <Column name="deviceId"                    />
         <Column name="odometer"           arg="0"  />
         <Column name="checkinDateTime"             />
         <Column name="checkinAge"                  />
      </Columns>
      <Property key="minimumCheckInAge">never</Property> <!-- never chcked-in -->
      <Property key="checkinAgeColorRange">3600:#AA9700,86400:#BB0000</Property>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- OBD Fault Code Summary Report -->
   <Report name="DeviceFaultCodes" type="fleet.summary"
        class="org.opengts.extra.war.report.field.DeviceReport"
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        optional="true"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.faultCodeSummary.menu">Fault Code Summary Report</MenuDescription>
      <Title i18n="ReportsXML.faultCodeSummary.title">Fault Code Summary Report</Title>
      <Subtitle i18n="ReportsXML.faultCodeSummary.subtitle">${i18n.Group}: ${groupDesc}</Subtitle>
      <Columns>
         <Column name="index"                          />
         <Column name="deviceId"       arg="adminEdit" />
         <Column name="deviceDesc"                     />
         <Column name="odometer"              arg="0"  />
         <Column name="serviceLastDist0"      arg="0"  ifTrue="DeviceFaultCodes.columnServiceDist0"/>
         <Column name="serviceLastDist1"      arg="0"  ifTrue="DeviceFaultCodes.columnServiceDist1"/>
         <Column name="faultCodes"                     />
         <Column name="checkinAge"                     />
         <Column name="serviceNotes"                   ifTrue="DeviceFaultCodes.columnServiceNotes"/>
      </Columns>
      <Constraints>
         <!-- "Where" contraint not applicable to "DeviceReport"
         <Where type="mysql"><![CDATA[ (lastFaultCode != "") ]]></Where>
         -->
      </Constraints>
      <Property key="checkinAgeColorRange">3600:#AA9700,86400:#BB0000</Property>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- OBD Fault Code Summary Report -->
   <Report name="DeviceFaultCodeShort" type="fleet.summary"
        class="org.opengts.extra.war.report.field.DeviceReport"
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        optional="true"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.faultCodeSummaryShort.menu">Fault Code Summary Report (short)</MenuDescription>
      <Title i18n="ReportsXML.faultCodeSummaryShort.title">Fault Code Summary Report (short)</Title>
      <Subtitle i18n="ReportsXML.faultCodeSummaryShort.subtitle">${i18n.Group}: ${groupDesc}</Subtitle>
      <Columns>
         <Column name="index"                          />
         <Column name="deviceId"       arg="adminEdit" />
         <Column name="deviceDesc"                     />
         <Column name="faultCodes"                     />
         <Column name="checkinAge"                     />
      </Columns>
      <Constraints>
         <!-- "Where" contraint not applicable to "DeviceReport"
         <Where type="mysql"><![CDATA[ (lastFaultCode != "") ]]></Where>
         -->
      </Constraints>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- Distance Traveled / Fuel Consumed Report -->
   <Report name="DistanceTraveled" type="fleet.summary"
        class="org.opengts.extra.war.report.field.DeviceReport"
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        optional="true"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.distanceTraveledReport.menu">Distance Traveled Report</MenuDescription>
      <Title i18n="ReportsXML.distanceTraveledReport.title">Distance Traveled Report</Title>
      <Subtitle i18n="ReportsXML.distanceTraveledReport.subtitle">${i18n.Group}: ${groupDesc}\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"                       />
         <Column name="deviceDesc"                  />
         <Column name="deviceId"                    />
         <!-- Odometer -->
         <Column name="startOdometer"       arg="0" ifTrue="DistanceTraveled.startOdometer"   i18n="ReportsXML.startOdometer.column"  >Starting\n${distanceUnits}</Column>
         <Column name="stopOdometer"        arg="0" ifTrue="DistanceTraveled.stopOdometer"    i18n="ReportsXML.endingOdometer.column" >Ending\n${distanceUnits}</Column>
         <Column name="odomDelta"           arg="0" ifTrue="DistanceTraveled.odomDelta"       i18n="ReportsXML.travelOdometer.column" >Traveled\n${distanceUnits}</Column>
         <Column name="plannedDistance"     arg="0" ifTrue="DistanceTraveled.plannedDistance"/>
         <!-- Fuel -->
         <Column name="startFuel"           arg="0" ifTrue="DistanceTraveled.startFuel"       i18n="ReportsXML.startFuel.column"      >Fuel Start\n${volumeUnits}</Column>
         <Column name="stopFuel"            arg="0" ifTrue="DistanceTraveled.stopFuel"        i18n="ReportsXML.endingFuel.column"     >Fuel End\n${volumeUnits}</Column>
         <Column name="fuelDelta"           arg="0" ifTrue="DistanceTraveled.fuelDelta"       i18n="ReportsXML.usedFuel.column"       >Fuel Used\n${volumeUnits}</Column>
      </Columns>
      <Property key="includeDeltaValues">true</Property> <!-- populate startOdometer/stopOdometer/odomDelta -->
      <Property key="includeTotals">true</Property>
      <Property key="adjustTotalsRounding">true</Property>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- Vehicle/Driver Behavior Report -->
   <Report name="VehicleDriverBehavior" type="fleet.summary"
        class="org.opengts.extra.war.report.field.DeviceReport"
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        optional="true"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.vehicleBehaviorReport.menu">Vehicle/Driver Behavior Report</MenuDescription>
      <Title i18n="ReportsXML.vehicleBehaviorReport.title">Vehicle/Driver Behavior Report</Title>
      <Subtitle i18n="ReportsXML.vehicleBehaviorReport.subtitle">${i18n.Group}: ${groupDesc}\n${dateRange}</Subtitle>
      <Columns>
         <Title i18n="ReportsXML.vehicleBehaviorReport.device">${i18n.Vehicle}</Title> 
         <Column name="index"                       />
         <Column name="deviceDesc"                  />
         <Column name="deviceId"                    />
      </Columns>
      <Columns>
         <Title i18n="ReportsXML.vehicleBehaviorReport.odometer">Odometer</Title> 
         <Column name="startOdometer"       arg="0" ifTrue="VehicleDriverBehavior.startOdometer"   i18n="ReportsXML.startOdometer.column"  >Starting\n${distanceUnits}</Column>
         <Column name="stopOdometer"        arg="0" ifTrue="VehicleDriverBehavior.stopOdometer"    i18n="ReportsXML.endingOdometer.column" >Ending\n${distanceUnits}</Column>
         <Column name="odomDelta"           arg="0" ifTrue="VehicleDriverBehavior.odomDelta"       i18n="ReportsXML.travelOdometer.column" >Traveled\n${distanceUnits}</Column>
      </Columns>
      <Columns>
         <Title i18n="ReportsXML.vehicleBehaviorReport.occurances">Occurances</Title> 
         <!-- location events -->
     <!-- Column name="statusCount"         arg="0xF020"/ --> <!-- STATUS_LOCATION -->
         <!-- excess speed -->
         <Column name="statusCount"         arg="0xF11A" ifTrue="VehicleDriverBehavior.statusCount_F11A"/> <!-- STATUS_MOTION_EXCESS_SPEED -->
         <Column name="statusCount"         arg="0xF11B" ifTrue="VehicleDriverBehavior.statusCount_F11B"/> <!-- STATUS_MOTION_OVER_SPEED_2 -->
         <Column name="statusCount"         arg="0xF160" ifTrue="VehicleDriverBehavior.statusCount_F160"/> <!-- STATUS_SPEEDING_BEGIN      -->
         <Column name="statusCount"         arg="0xF161" ifTrue="VehicleDriverBehavior.statusCount_F161"/> <!-- STATUS_SPEEDING_LIMIT_1    -->
         <Column name="statusCount"         arg="0xF162" ifTrue="VehicleDriverBehavior.statusCount_F162"/> <!-- STATUS_SPEEDING_LIMIT_2    -->
         <Column name="statusCount"         arg="0xF163" ifTrue="VehicleDriverBehavior.statusCount_F163"/> <!-- STATUS_SPEEDING_LIMIT_3    -->
         <!-- harsh braking -->
         <Column name="statusCount"         arg="0xF126" ifTrue="VehicleDriverBehavior.statusCount_F126"/> <!-- STATUS_MOTION_DECELERATION -->
         <Column name="statusCount"         arg="0xF930" ifTrue="VehicleDriverBehavior.statusCount_F930"/> <!-- STATUS_EXCESS_BRAKING      -->
         <Column name="statusCount"         arg="0xF931" ifTrue="VehicleDriverBehavior.statusCount_F931"/> <!-- STATUS_EXCESS_BRAKING_2    -->
         <Column name="statusCount"         arg="0xF932" ifTrue="VehicleDriverBehavior.statusCount_F932"/> <!-- STATUS_EXCESS_BRAKING_3    -->
         <!-- harsh acceleration -->
         <Column name="statusCount"         arg="0xF123" ifTrue="VehicleDriverBehavior.statusCount_F123"/> <!-- STATUS_MOTION_ACCELERATION -->
         <Column name="statusCount"         arg="0xF960" ifTrue="VehicleDriverBehavior.statusCount_F960"/> <!-- STATUS_EXCESS_ACCEL        -->
         <Column name="statusCount"         arg="0xF961" ifTrue="VehicleDriverBehavior.statusCount_F961"/> <!-- STATUS_EXCESS_ACCEL_2      -->
         <Column name="statusCount"         arg="0xF962" ifTrue="VehicleDriverBehavior.statusCount_F962"/> <!-- STATUS_EXCESS_ACCEL_3      -->
         <!-- harsh cornering -->
         <Column name="statusCount"         arg="0xF937" ifTrue="VehicleDriverBehavior.statusCount_F937"/> <!-- STATUS_EXCESS_CORNERING    -->
         <Column name="statusCount"         arg="0xF938" ifTrue="VehicleDriverBehavior.statusCount_F938"/> <!-- STATUS_EXCESS_CORNERING_2  -->
         <Column name="statusCount"         arg="0xF939" ifTrue="VehicleDriverBehavior.statusCount_F939"/> <!-- STATUS_EXCESS_CORNERING_3  -->
         <!-- harsh behavior -->
         <Column name="statusCount"         arg="0xF92E" ifTrue="VehicleDriverBehavior.statusCount_F92E"/> <!-- STATUS_HARSH_BEHAVIOR      -->
         <!-- idle -->
         <Column name="statusCount"         arg="0xF116" ifTrue="VehicleDriverBehavior.statusCount_F116"/> <!-- STATUS_MOTION_IDLE         -->
         <Column name="statusCount"         arg="0xF118" ifTrue="VehicleDriverBehavior.statusCount_F118"/> <!-- STATUS_MOTION_EXCESS_IDLE  -->
      </Columns>
      <Property key="includeDeltaValues">true</Property>
      <Property key="includeTotals">false</Property>
      <Property key="adjustTotalsRounding">false</Property>
      <Property key="countStatusCodes">*</Property>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- Session Status -->
   <Report name="EventSessionStatus" type="fleet.summary" 
        class="org.opengts.extra.war.report.session.SessionStatusReport" 
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        optional="true"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.sessionStatus.menu">Session Connection Status</MenuDescription>
      <Title i18n="ReportsXML.sessionStatus.title">Session Connection Status</Title>
      <Subtitle i18n="ReportsXML.sessionStatus.subtitle">${i18n.Group}: ${groupDesc}\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"                       />
         <Column name="deviceDesc"                  />
         <Column name="deviceId"                    />
         <Column name="eventsReceived"              />
         <Column name="tcpConnections"              />
         <Column name="udpConnections"              />
         <Column name="bytesRead"                   />
         <Column name="bytesWritten"                />
         <Column name="bytesOverhead"               />
         <Column name="bytesTotal"                  />
         <Column name="bytesRounded"                />
         <Column name="checkinAge"                  />
      </Columns>
      <Property key="checkinAgeColorRange">3600:#AA9700,86400:#BB0000</Property>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- fleet summary report showing the status code counts for selected device group -->
   <Report name="StatusSummaryCount" type="fleet.summary" 
        class="org.opengts.extra.war.report.field.DailySummaryReport"
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        optional="true"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.StatusSummaryCount.menu">Status Summary Counts</MenuDescription>
      <Title i18n="ReportsXML.StatusSummaryCount.title">Status Summary Counts</Title>
      <Subtitle i18n="ReportsXML.StatusSummaryCount.subtitle">${i18n.Group}: ${groupDesc}\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"                           />
         <Column name="deviceDesc"                      />
         <Column name="deviceId"                        />
         <Column name="odomDelta"           arg="0"     />
         <Column name="fuelTrip"            arg="1"     />
         <Column name="statusCount"         arg="0xF111"/> <!-- MOTION_START -->
         <Column name="statusCount"         arg="0xF113"/> <!-- MOTION_STOP -->
         <Column name="statusCount"         arg="0xF112"/> <!-- MOTION_IN_MOTION -->
         <Column name="statusCount"         arg="0xF114"/> <!-- MOTION_DORMANT -->
         <Column name="statusCount"         arg="0xF020"/> <!-- LOCATION -->
      </Columns>
      <Constraints>
         <ValidGPSRequired>false</ValidGPSRequired>
         <SelectionLimit type="first">10000</SelectionLimit>
         <ReportLimit>4000</ReportLimit>
      </Constraints>
      <Property key="reportType">summary</Property>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- fleet summary report showing the status code counts for selected device group -->
   <Report name="IOSummaryCount" type="fleet.summary" 
        class="org.opengts.extra.war.report.field.DailySummaryReport"
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        optional="true"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.IOSummaryCount.menu">I/O Summary Counts</MenuDescription>
      <Title i18n="ReportsXML.IOSummaryCount.title">I/O Summary Counts</Title>
      <Subtitle i18n="ReportsXML.IOSummaryCount.subtitle">${i18n.Group}: ${groupDesc}\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"                           />
         <Column name="deviceDesc"                      />
         <Column name="deviceId"                        />
         <Column name="statusCount"         arg="0xF420"/> <!-- INPUT_ON_00 -->
         <Column name="statusCount"         arg="0xF421"/> <!-- INPUT_ON_01 -->
         <Column name="statusCount"         arg="0xF422"/> <!-- INPUT_ON_02 -->
         <Column name="statusCount"         arg="0xF423"/> <!-- INPUT_ON_03 -->
      </Columns>
      <Constraints>
         <ValidGPSRequired>false</ValidGPSRequired>
         <SelectionLimit type="first">10000</SelectionLimit>
         <ReportLimit>4000</ReportLimit>
      </Constraints>
      <Property key="reportType">summary</Property>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- fleet summary report showing the mileage count for selected device group -->
   <Report name="DistanceSummaryCount" type="fleet.summary" 
        class="org.opengts.extra.war.report.field.DailySummaryReport"
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        optional="true"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.DistanceSummaryCount.menu">Mileage Summary</MenuDescription>
      <Title i18n="ReportsXML.DistanceSummaryCount.title">Mileage Summary</Title>
      <Subtitle i18n="ReportsXML.DistanceSummaryCount.subtitle">${i18n.Group}: ${groupDesc}\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"                           />
         <Column name="deviceDesc"                      />
         <Column name="deviceId"                        />
         <Column name="odomDelta"           arg="0"     />
      </Columns>
      <Constraints>
         <ValidGPSRequired>false</ValidGPSRequired>
         <SelectionLimit type="first">10000</SelectionLimit>
         <ReportLimit>4000</ReportLimit>
      </Constraints>
      <Property key="reportType">summary</Property>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- Entity report showing last known location of all trailers -->
   <Report name="TrailerSummary" type="fleet.summary" 
        class="org.opengts.extra.war.report.entity.EntityReport" 
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        optional="true"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.trailerSummary.menu">Last Known Trailer Location Summary</MenuDescription>
      <Title i18n="ReportsXML.trailerSummary.title">Last Known Trailer Location Summary</Title>
      <Subtitle i18n="ReportsXML.trailerSummary.subtitle">All Trailers\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"                       />
         <Column name="entityId"                    />
         <Column name="entityType"                  />
         <Column name="entityDesc"                  />
         <Column name="date"                        />
         <Column name="time"                        />
         <Column name="odometer"            arg="0" i18n="ReportsXML.accumOdometer.column" >Accum.\n${distanceUnits}</Column>
         <Column name="deviceId"                    i18n="ReportsXML.currentTractor.column">Current\nTractor</Column>
         <Column name="latitude"            arg="4" ifTrue="columnLatLon"/>
         <Column name="longitude"           arg="4" ifTrue="columnLatLon"/>
         <!-- Column name="address"                     / -->
      </Columns>
      <Constraints>
         <SelectionLimit type="first">1500</SelectionLimit>
         <ReportLimit>1000</ReportLimit>
      </Constraints>
      <MapIconSelector ruleFactoryName="GTSRulesEngine,SecureENRE,ENRE">
         <!-- an installed "RuleFactory" implementation is required which can analyze this iconSelector -->
         <![CDATA[ ("bluedot") ]]>
      </MapIconSelector> 
      <Property key="entityType">trailer</Property>
      <Property key="entityMapStatusCode">0xF020</Property> <!-- entity map displayed status code -->
      <Property key="entityMapPushpinID">orange</Property> <!-- entity map pushpin color -->
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- User Login Report -->
   <Report name="UserLogin" type="fleet.summary" 
        class="org.opengts.extra.war.report.field.AuditReport"
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        optional="true"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.userLoginReport.menu">User Login Report</MenuDescription>
      <Title i18n="ReportsXML.userLoginReport.title">User Login Report</Title>
      <Subtitle i18n="ReportsXML.userLoginReport.subtitle">${dateRange}</Subtitle>
      <Columns>
         <Column name="index"           />
         <Column name="dateTime"        />
         <Column name="userId"          />
         <Column name="userDesc"        />
         <Column name="ipAddress"       />
         <Column name="loginDateTime"   i18n="ReportsXML.userLoginReport.login">Login</Column>
         <Column name="loginAge"        />
      </Columns>
      <Constraints>
         <ValidGPSRequired>false</ValidGPSRequired>
         <SelectionLimit type="first">3000</SelectionLimit>
         <ReportLimit>2000</ReportLimit>
         <Where type="mysql"><![CDATA[ (auditCode=0x0100) ]]></Where>
      </Constraints>
      <Property key="loginAgeColorRange">604800:#AA9700,2592000:#DD0000</Property>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- EMail Notification Report -->
   <Report name="EMailNotification" type="fleet.summary" 
        class="org.opengts.extra.war.report.field.AuditReport"
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        optional="true"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.emailNotificationReport.menu">EMail Notification Report</MenuDescription>
      <Title i18n="ReportsXML.emailNotificationReport.title">EMail Notification Report</Title>
      <Subtitle i18n="ReportsXML.userLoginReport.subtitle">${dateRange}</Subtitle>
      <Columns>
         <Column name="index"           />
         <Column name="dateTime"        />
         <Column name="deviceId"        />
         <Column name="description"     />
      </Columns>
      <Constraints>
         <ValidGPSRequired>false</ValidGPSRequired>
         <SelectionLimit type="first">3000</SelectionLimit>
         <ReportLimit>2000</ReportLimit>
         <Where type="mysql"><![CDATA[ (auditCode=0x0201) ]]></Where>
      </Constraints>
   </Report>

   <!-- shows all device near the selected geozone -->
   <Report name="GeozoneNearbyDevices" type="fleet.summary" 
        class="org.opengts.extra.war.report.field.NearbyDevicesReport" 
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.devicesNearGeozone.menu">${i18n.Vehicles} Near Geozone</MenuDescription>
      <Title i18n="ReportsXML.devicesNearGeozone.title">${i18n.Vehicles} Near Geozone [${description}]</Title>
      <Subtitle i18n="ReportsXML.devicesNearGeozone.subtitle">${i18n.Group}: ${groupDesc}\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"                           />
         <Column name="deviceID"                        />
         <Column name="deviceDesc"                      />
         <Column name="date"                            />
         <Column name="time"                            />
         <Column name="geoPoint"            arg="5"     />
         <Column name="speedH"              arg="1"     />
         <Column name="distance"            arg="2"     />
         <Column name="address"                         />
      </Columns>
      <Options type="geozones"/>
      <Constraints>
         <!-- these constraints are ignored for this report -->
         <SelectionLimit type="first">3000</SelectionLimit>
         <ReportLimit>3000</ReportLimit>
         <OrderAscending>true</OrderAscending>
      </Constraints>
      <Property key="supportMapDisplay">true</Property>
      <Property key="maximumDistanceMeters">200000</Property> <!-- ~123 miles -->
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- Geozone "Hotspot" report (example) -->
   <Report name="GeozoneHotspotReport" type="fleet.summary" 
        class="org.opengts.extra.war.report.field.GeozoneReport" 
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        optional="true"
        sortable="false"
        >
      <MenuDescription i18n="ReportsXML.geozoneReport.menu">Geozone Hotspot Report</MenuDescription>
      <Title i18n="ReportsXML.geozoneReport.title">Geozone Hotspot Report [${description}]</Title>
      <Subtitle i18n="ReportsXML.geozoneReport.subtitle">${i18n.Group}: ${groupDesc}\n${dateRange}</Subtitle>
      <Columns>
         <!-- Column name="index"                                      >RowID</Column -->
         <Column name="enterTimestamp"                                 >RowID</Column>
         <Column name="multiFields"    arg="deviceDesc,geozoneDesc"    >DeviceFence</Column>
         <Column name="enterDateTime"  arg="MM/dd/yy HH:mm"            >Period Start</Column>
         <Column name="exitDateTime"   arg="MM/dd/yy HH:mm"            >Period End</Column>
         <Column name="latitude"       arg="4"                         >Latitude</Column>
         <Column name="longitude"      arg="4"                         >Longitude</Column>
         <Column name="deviceDesc"                                     >RegNo</Column>
         <Column name="deviceIMEI"                                     >SVID</Column>
         <Column name="deviceVehicleID"                                >UnitType</Column>
         <Column name="geozoneDesc"                                    >PolygonName</Column>
         <Column name="insideElapse"   arg="-"                         >Duration</Column>
     <!-- Column name="ruleSelector"   arg="($TODRANGE(0800,1759)?1:2)">8-6 Shifts</Column -->
         <Column name="workShift"      arg="0000:2,0800:1,1800:2"      >8-6 Shifts</Column>
         <Column name="deviceLicensePlate"                             >Jurisdiction</Column>
         <Column name="deviceDesc"                                     >Marked</Column>
      </Columns>
      <Constraints>
         <ValidGPSRequired>false</ValidGPSRequired>
         <SelectionLimit type="first">10000</SelectionLimit>
         <ReportLimit>4000</ReportLimit>
      </Constraints>
      <Property key="description">All Geozones</Property> <!-- default if not defined by list -->
      <Property key="geozoneCategory">ZoneArrive</Property> <!-- see StatusCodes.PariedStatusCodes -->
      <Property key="estimateDepartTime">false</Property> <!-- true to use report time as Period-End when blank -->
      <Property key="totalByGeozone">false</Property>
      <Property key="singleDeviceOnly">false</Property>
      <Property key="csvColumnHeaderDescriptions">true</Property>
   </Report>

   <!-- ======================================================================================= -->
   <!-- ======================================================================================= -->
   <!-- table.admin =========================================================================== -->

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- User Info/Admin table report -->
   <Report name="UserAdmin" type="table.admin" 
        class="org.opengts.extra.war.report.field.TableReport"
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        optional="true"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.UserAdmin.menu">User Admin</MenuDescription>
      <Title i18n="ReportsXML.UserAdmin.title">User Admin</Title>
      <Subtitle i18n="ReportsXML.UserAdmin.subtitle"></Subtitle>
      <Columns>
         <Column name="index"                              />
         <Column name="dbrecord" arg="userID"              />
         <Column name="dbrecord" arg="description"         />
         <Column name="dbrecord" arg="roleID"              />
         <Column name="dbrecord" arg="contactName"         />
         <Column name="dbrecord" arg="contactEmail"        />
         <Column name="dbrecord" arg="timeZone"            />
         <Column name="dbrecord" arg="isActive"            />
         <Column name="dbrecord" arg="lastLoginTimeString" i18n="ReportsXML.lastLoginTime.column">Last Login</Column>
      </Columns>
      <Property key="tableName">User</Property>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- Device Info/Admin table report -->
   <Report name="DeviceAdmin" type="table.admin"
        class="org.opengts.extra.war.report.field.TableReport"
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        optional="true"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.DeviceAdmin.menu">Device Admin</MenuDescription>
      <Title i18n="ReportsXML.DeviceAdmin.title">Device Admin</Title>
      <Subtitle i18n="ReportsXML.DeviceAdmin.subtitle"></Subtitle>
      <Columns>
         <Column name="index"                                    />
         <Column name="dbrecord" arg="deviceID"                  />
         <Column name="dbrecord" arg="uniqueID"                  />
         <Column name="dbrecord" arg="description"               />
         <Column name="dbrecord" arg="equipmentType"             />
         <Column name="dbrecord" arg="simPhoneNumber"            />
         <Column name="dbrecord" arg="deviceCode"                />
         <Column name="dbrecord" arg="currentIgnitionStateString" i18n="ReportsXML.ignitionState.column">Ignition\nState</Column>
         <Column name="dbrecord" arg="expectingCommandAck"        i18n="ReportsXML.expectingACK.column">Expecting\nACK</Column>
         <Column name="dbrecord" arg="isActive"                  />
      </Columns>
      <Property key="tableName">Device</Property>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- DeviceGroup Info/Admin table report -->
   <Report name="DeviceGroupAdmin" type="table.admin" 
        class="org.opengts.extra.war.report.field.TableReport"
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        optional="true"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.DeviceGroupAdmin.menu">DeviceGroup Admin</MenuDescription>
      <Title i18n="ReportsXML.DeviceGroupAdmin.title">DeviceGroup Admin</Title>
      <Subtitle i18n="ReportsXML.DeviceGroupAdmin.subtitle"></Subtitle>
      <Columns>
         <Column name="index"                       />
         <Column name="dbrecord" arg="groupID"      />
         <Column name="dbrecord" arg="description"  />
         <Column name="dbrecord" arg="deviceCount"  i18n="ReportsXML.deviceCount.column">Device Count</Column>
      </Columns>
      <Property key="tableName">DeviceGroup</Property>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- Driver Info/Admin table report -->
   <Report name="DriverAdmin" type="table.admin" 
        class="org.opengts.extra.war.report.field.TableReport"
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        optional="true"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.DriverAdmin.menu">Driver Admin</MenuDescription>
      <Title i18n="ReportsXML.DriverAdmin.title">Driver Admin</Title>
      <Subtitle i18n="ReportsXML.DriverAdmin.subtitle"></Subtitle>
      <Columns>
         <Column name="index"                             />
         <Column name="dbrecord" arg="driverID"           />
         <Column name="dbrecord" arg="description"        />
         <Column name="dbrecord" arg="badgeID"            />
         <Column name="dbrecord" arg="licenseNumber"      />
         <Column name="dbrecord" arg="licenseType"        />
         <Column name="dbrecord" arg="licenseExpireString" i18n="ReportsXML.licenseExpires.column">License\nExpires</Column>
      </Columns>
      <Property key="tableName">Driver</Property>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- Geozone Info/Admin table report -->
   <Report name="GeozoneAdmin" type="table.admin" 
        class="org.opengts.extra.war.report.field.TableReport"
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        optional="true"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.GeozoneAdmin.menu">Geozone Admin</MenuDescription>
      <Title i18n="ReportsXML.GeozoneAdmin.title">Geozone Admin</Title>
      <Subtitle i18n="ReportsXML.GeozoneAdmin.subtitle"></Subtitle>
      <Columns>
         <Column name="index"                             />
         <Column name="dbrecord" arg="geozoneID"          />
         <Column name="dbrecord" arg="description"        />
         <Column name="dbrecord" arg="priority"           />
         <Column name="dbrecord" arg="zoneTypeDescription" i18n="ReportsXML.zoneTypeDescription.column">Zone\nType</Column>
         <Column name="dbrecord" arg="reverseGeocode"     />
         <Column name="dbrecord" arg="arrivalZone"        />
         <Column name="dbrecord" arg="departureZone"      />
         <Column name="dbrecord" arg="radius"             />
         <Column name="dbrecord" arg="firstGeoPoint"      i18n="ReportsXML.firstGeoPoint.column">First\nGeoPoint</Column>
      </Columns>
      <Property key="tableName">Geozone</Property>
   </Report>

   <!-- ======================================================================================= -->
   <!-- ======================================================================================= -->
   <!-- driver.performance ==================================================================== -->

   <!-- event detail report showing all events for a given device -->
   <Report name="DriverEventDetail" type="driver.performance"
        class="org.opengts.war.report.event.EventDetailReport"
        layout="org.opengts.war.report.event.EventDataLayout"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.eventDetailDriver.menu">Driver Event Detail</MenuDescription>
      <Title i18n="ReportsXML.eventDetailDriver.title">Driver Event Detail</Title>
      <Subtitle i18n="ReportsXML.eventDetailDriver.subtitle">${driverDesc}\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"             arg="mapLink" ifTrue="columnIndexMapLink"/>
         <Column name="index"                           ifFalse="columnIndexMapLink"/>
         <Column name="date"                            />
         <Column name="time"                            />
         <Column name="statusDesc"          arg="color" />
         <Column name="deviceID"                        />
         <Column name="pushpin"                         ifTrue="columnPushpin"/>
         <Column name="geoPoint"            arg="5"     ifTrue="columnLatLon"/>
         <Column name="speedH"              arg="1"     />
         <Column name="speedLimit"          arg="0"     ifTrue="columnSpeedLimit"/>
         <Column name="altitude"                        />
         <Column name="odometer"            arg="0"     ifTrue="columnOdometer"/>
         <Column name="reportDistance"      arg="0"     ifTrue="columnReportDistance"/>
         <Column name="fuelTotal"                       ifTrue="columnFuelUsage"/>
         <Column name="address"                         />
         <Column name="geozoneDesc"                     ifTrue="columnGeozoneDesc"/>
         <Column name="driverMessage"                   ifTrue="columnDriverMessage"/>
      </Columns>
      <!-- Options type="drivers"/ -->
      <Constraints>
         <SelectionLimit type="first">3000</SelectionLimit>
         <ReportLimit>3000</ReportLimit>
         <OrderAscending>true</OrderAscending>
      </Constraints>
      <MapIconSelector ruleFactoryName="GTSRulesEngine,SecureENRE,ENRE">
        <!-- an installed "RuleFactory" implementation is required which can analyze this iconSelector -->
        <![CDATA[ ((mph<4)?"reddot":(speed<15)?"yellow":"heading") ]]>
      </MapIconSelector> 
      <Property key="selectEventsBy">driver</Property>
      <Property key="reportDataFieldEnabled">false</Property>
      <Property key="gpsAgeColorRange">1200:#550000,3600:#BB0000</Property>
   </Report>

   <!-- EXPERIMENTAL: device detail report which includes a MySQL 'where' query -->
   <Report name="DriverEventSpeedOption" type="driver.performance" 
        class="org.opengts.war.report.event.EventDetailReport"
        layout="org.opengts.war.report.event.EventDataLayout"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.eventSpeedOption.menu">Speeds over</MenuDescription>
      <Title i18n="ReportsXML.eventSpeedOption.title">Speeds over ${description}</Title>
      <Subtitle i18n="ReportsXML.eventSpeedOption.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"             arg="mapLink" ifTrue="columnIndexMapLink"/>
         <Column name="index"                           ifFalse="columnIndexMapLink"/>
         <Column name="date"                            />
         <Column name="time"                            />
         <Column name="statusDesc"          arg="color" />
         <Column name="pushpin"                         ifTrue="columnPushpin"/>
         <Column name="latitude"            arg="3"     ifTrue="columnLatLon"/>  <!-- "bestLatitude"  -->
         <Column name="longitude"           arg="3"     ifTrue="columnLatLon"/>  <!-- "bestLongitude" -->
         <Column name="speedH"                          />
         <Column name="speedLimit"          arg="0"     ifTrue="columnSpeedLimit"/>
         <Column name="address"                         />
      </Columns>
      <Options type="list">
         <Option name="45mph">
            <Description i18n="ReportsXML.eventSpeedOption.45mph">%{mph:45}</Description>
            <Property key="optSpeedKPH">72.405</Property>
            </Option>
         <Option name="50mph">
            <Description i18n="ReportsXML.eventSpeedOption.50mph">%{mph:50}</Description>
            <Property key="optSpeedKPH">80.4672</Property>
            </Option>
         <Option name="55mph">
            <Description i18n="ReportsXML.eventSpeedOption.55mph">%{mph:55}</Description>
            <Property key="optSpeedKPH">88.51392</Property>
            </Option>
         <Option name="60mph">
            <Description i18n="ReportsXML.eventSpeedOption.60mph">%{mph:60}</Description>
            <Property key="optSpeedKPH">96.56064</Property>
            </Option>
         <Option name="65mph">
            <Description i18n="ReportsXML.eventSpeedOption.65mph">%{mph:65}</Description>
            <Property key="optSpeedKPH">104.60736</Property>
            </Option>
         <Option name="70mph">
            <Description i18n="ReportsXML.eventSpeedOption.70mph">%{mph:70}</Description>
            <Property key="optSpeedKPH">112.65408</Property>
            </Option>
         <Option name="75mph">
            <Description i18n="ReportsXML.eventSpeedOption.75mph">%{mph:75}</Description>
            <Property key="optSpeedKPH">120.7008</Property>
            </Option>
      </Options>
      <Constraints>
         <TimeStart>-1</TimeStart>
         <TimeEnd>-1</TimeEnd>
         <ValidGPSRequired>true</ValidGPSRequired>
         <Where type="mysql"><![CDATA[ (speedKPH > ${optSpeedKPH}) ]]></Where>
         <SelectionLimit type="first">2000</SelectionLimit>
         <ReportLimit>2000</ReportLimit>
      </Constraints>
      <MapIconSelector ruleFactoryName="GTSRulesEngine,SecureENRE,ENRE">
        <!-- an installed "RuleFactory" implementation is required which can analyze this iconSelector -->
        <![CDATA[ ((speed<5)?"reddot":"heading") ]]>
      </MapIconSelector> 
      <Property key="selectEventsBy">driver</Property>
      <Property key="gpsAgeColorRange">1200:#550000,3600:#BB0000</Property>
   </Report>

   <!-- EventData report showing "Excessive Speed" events -->
   <Report name="DriverEventExcessSpeed" type="driver.performance" 
        class="org.opengts.war.report.event.EventDetailReport"
        layout="org.opengts.war.report.event.EventDataLayout"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.eventExcessSpeed.menu">${i18n.Vehicle} Excess Speed</MenuDescription>
      <Title i18n="ReportsXML.eventExcessSpeed.title">${i18n.Vehicle} Excess Speed</Title>
      <Subtitle i18n="ReportsXML.eventExcessSpeed.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"             arg="mapLink" ifTrue="columnIndexMapLink"/>
         <Column name="index"                           ifFalse="columnIndexMapLink"/>
         <Column name="dateTime"                        />
         <Column name="statusDesc"          arg="color" />
         <Column name="pushpin"                         ifTrue="columnPushpin"/>
         <Column name="geoPoint"            arg="4"     ifTrue="columnLatLon"/>
         <Column name="speedH"                          />
         <Column name="speedLimit"          arg="0"     ifTrue="columnSpeedLimit"/>
         <Column name="address"                         />
      </Columns>
      <!-- Options type="drivers"/ -->
      <Constraints>
         <TimeStart>-1</TimeStart>
         <TimeEnd>-1</TimeEnd>
         <ValidGPSRequired>false</ValidGPSRequired>
         <Where type="mysql"><![CDATA[ ((statusCode = 0xF11A) || (statusCode = 0xF11B) || ((statusCode >= 0xF160) && (statusCode <= 0xF16F))) ]]></Where>
         <SelectionLimit type="first">1000</SelectionLimit>
         <ReportLimit>1000</ReportLimit>
      </Constraints>
      <MapIconSelector ruleFactoryName="GTSRulesEngine,SecureENRE,ENRE">
        <!-- an installed "RuleFactory" implementation is required which can analyze this iconSelector -->
        <![CDATA[ ("greenh") ]]>
      </MapIconSelector> 
      <Property key="selectEventsBy">driver</Property>
      <Property key="gpsAgeColorRange">1200:#550000,3600:#BB0000</Property>
   </Report>

   <!-- EXPERIMENTAL: event detail report for speeds greater than posted limit -->
   <!-- 'speedLimitPKH' must be defined in EventData, or an error will result -->
   <Report name="DriverEventSpeedPosted" type="driver.performance" 
        class="org.opengts.war.report.event.EventDetailReport"
        layout="org.opengts.war.report.event.EventDataLayout"
        modules="extra"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.eventSpeedPosted.menu">Exceeding Posted Speed</MenuDescription> 
      <Title i18n="ReportsXML.eventSpeedPosted.title">Exceeding Posted Speed (${description})</Title>
      <Subtitle i18n="ReportsXML.eventSpeedPosted.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"         arg="mapLink" ifTrue="columnIndexMapLink"/>
         <Column name="index"                       ifFalse="columnIndexMapLink"/>
         <Column name="date"                        />
         <Column name="time"                        />
         <Column name="geoPoint"            arg="4" ifTrue="columnLatLon"/>
         <Column name="speedH"                      />
         <Column name="speedLimit"                  />
         <Column name="overSpeedLimit"              />
         <Column name="address"                     />
      </Columns>
      <Options type="list">
         <Option name="default">
            <Description i18n="ReportsXML.eventSpeedPosted.0mph">over limit</Description>
            <Property key="overLimitKPH">0.00000</Property>
            </Option>
         <Option name="5mph">
            <Description i18n="ReportsXML.eventSpeedPosted.5mph">5mph over limit</Description>
            <Property key="overLimitKPH">8.04672</Property>
            </Option>
         <Option name="10mph">
            <Description i18n="ReportsXML.eventSpeedPosted.10mph">10mph over limit</Description>
            <Property key="overLimitKPH">16.09344</Property>
            </Option>
      </Options>
      <Constraints>
         <TimeStart>-1</TimeStart>
         <TimeEnd>-1</TimeEnd>
         <ValidGPSRequired>true</ValidGPSRequired>
         <Where type="mysql"><![CDATA[ ((speedLimitKPH > 0) AND (speedKPH > (speedLimitKPH + ${overLimitKPH}))) ]]></Where>
         <SelectionLimit type="first">3000</SelectionLimit>
         <ReportLimit>3000</ReportLimit>
      </Constraints>
      <MapIconSelector ruleFactoryName="GTSRulesEngine,SecureENRE,ENRE">
        <!-- an installed "RuleFactory" implementation is required which can analyze this iconSelector -->
        <![CDATA[ ("heading") ]]>
      </MapIconSelector> 
      <Property key="selectEventsBy">driver</Property>
      <Property key="gpsAgeColorRange">1200:#550000,3600:#BB0000</Property>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- Driver Report -->
   <Report name="DriverReport" type="driver.performance"
        class="org.opengts.extra.war.report.field.DriverReport"
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        optional="true"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.driverReport.menu">Driver Report</MenuDescription>
      <Title i18n="ReportsXML.driverReport.title">Driver Report</Title>
      <Subtitle i18n="ReportsXML.driverReport.subtitle"></Subtitle>
      <Columns>
         <Column name="index"                        />
         <Column name="driverId"                     />
         <Column name="driverDesc"                   />
         <Column name="driverNickname"               />
         <Column name="driverBadge"                  />
         <Column name="driverLicense"                />
         <Column name="driverLicenseType"            />
         <Column name="driverLicenseExp"             />
         <Column name="driverDeviceDesc"             />
         <Column name="driverStatus"       arg="desc"/>
      </Columns>
      <Property key="licenseWillExpireDays">-1</Property>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- Driver License Expired/WillExpire Report -->
   <Report name="DriverExpiringLicense" type="driver.performance"
        class="org.opengts.extra.war.report.field.DriverReport"
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        optional="true"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.driverExpiringLicense.menu">Expiring Driver License Report</MenuDescription>
      <Title i18n="ReportsXML.driverExpiringLicense.title">Expiring Driver License [${description}]</Title>
      <Subtitle i18n="ReportsXML.driverExpiringLicense.subtitle"></Subtitle>
      <Columns>
         <Column name="index"                       />
         <Column name="driverId"                    />
         <Column name="driverDesc"                  />
         <Column name="driverNickname"              />
         <Column name="driverBadge"                 />
         <Column name="driverLicense"               />
         <Column name="driverLicenseType"           />
         <Column name="driverLicenseExp"            />
         <Column name="driverLicenseExp"  arg="days"/>
      </Columns>
      <Options type="list">
         <Option name="expired">
            <Description i18n="ReportsXML.expiredLicenseOption.expired">Expired Now</Description>
            <Property key="licenseWillExpireDays">0</Property>
            </Option>
         <Option name="1week">
            <Description i18n="ReportsXML.expiredLicenseOption.1week">Within 1 Week</Description>
            <Property key="licenseWillExpireDays">7</Property>
            </Option>
         <Option name="2weeks">
            <Description i18n="ReportsXML.expiredLicenseOption.2weeks">Within 2 Weeks</Description>
            <Property key="licenseWillExpireDays">14</Property>
            </Option>
         <Option name="1month">
            <Description i18n="ReportsXML.expiredLicenseOption.1month">Within 1 Month</Description>
            <Property key="licenseWillExpireDays">30</Property>
            </Option>
         <Option name="6months">
            <Description i18n="ReportsXML.expiredLicenseOption.6months">Within 6 Months</Description>
            <Property key="licenseWillExpireDays">183</Property>
            </Option>
      </Options>
      <Property key="licenseWillExpireDays">30</Property>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- Driver Report -->
   <Report name="DriverDaySummaryReport" type="driver.performance"
        class="org.opengts.extra.war.report.field.EventSummaryReport"
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        optional="true"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.driverReport.menu">Driver Day Summary Report</MenuDescription>
      <Title i18n="ReportsXML.driverReport.title">Driver Day Summary Report</Title>
      <Subtitle i18n="ReportsXML.driverReport.subtitle"></Subtitle>
      <Columns>
         <Column name="index"                                  />
         <Column name="driverId"                               />
         <Column name="driverDesc"                             />
         <Column name="eventSummary"    arg="StatusCode:F112"  /> <!-- EnRoute -->
         <Column name="eventSummary"    arg="Count:Total"      />
         <Column name="eventSummary"    arg="Count:ValidGPS"   />
         <Column name="eventSummary"    arg="Count:InvalidGPS" />
         <Column name="eventSummary"    arg="Elapsed:Moving"   />
         <Column name="eventSummary"    arg="Elapsed:Stopped"  />
         <Column name="eventSummary"    arg="Elapsed:Speeding" />
         <Column name="eventSummary"    arg="Elapsed:Ignition" />
         <Column name="eventSummary"    arg="Elapsed:Idle"     />
      </Columns>
      <Property key="summarizeByDriver">true</Property>
   </Report>

   <!-- ======================================================================================= -->
   <!-- ======================================================================================= -->
   <!-- device.performance ==================================================================== -->

   <!-- example device detail report which includes a MySQL 'where' query -->
   <Report name="EventSpeedOption" type="device.performance" 
        class="org.opengts.war.report.event.EventDetailReport"
        layout="org.opengts.war.report.event.EventDataLayout"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.eventSpeedOption.menu">Speeds over</MenuDescription>
      <Title i18n="ReportsXML.eventSpeedOption.title">Speeds over ${description}</Title>
      <Subtitle i18n="ReportsXML.eventSpeedOption.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"             arg="mapLink" ifTrue="columnIndexMapLink"/>
         <Column name="index"                           ifFalse="columnIndexMapLink"/>
         <Column name="date"                            />
         <Column name="time"                            />
         <Column name="statusDesc"          arg="color" />
         <Column name="pushpin"                         ifTrue="columnPushpin"/>
         <Column name="latitude"            arg="3"     ifTrue="columnLatLon"/>  <!-- "bestLatitude"  -->
         <Column name="longitude"           arg="3"     ifTrue="columnLatLon"/>  <!-- "bestLongitude" -->
         <Column name="speedH"                          />
         <Column name="speedLimit"          arg="0"     ifTrue="columnSpeedLimit"/>
         <Column name="address"                         />
      </Columns>
      <Options type="list">
         <Option name="45mph">
            <Description i18n="ReportsXML.eventSpeedOption.45mph">%{mph:45}</Description>
            <Property key="optSpeedKPH">72.405</Property>
            </Option>
         <Option name="50mph">
            <Description i18n="ReportsXML.eventSpeedOption.50mph">%{mph:50}</Description>
            <Property key="optSpeedKPH">80.4672</Property>
            </Option>
         <Option name="55mph">
            <Description i18n="ReportsXML.eventSpeedOption.55mph">%{mph:55}</Description>
            <Property key="optSpeedKPH">88.51392</Property>
            </Option>
         <Option name="60mph">
            <Description i18n="ReportsXML.eventSpeedOption.60mph">%{mph:60}</Description>
            <Property key="optSpeedKPH">96.56064</Property>
            </Option>
         <Option name="65mph">
            <Description i18n="ReportsXML.eventSpeedOption.65mph">%{mph:65}</Description>
            <Property key="optSpeedKPH">104.60736</Property>
            </Option>
         <Option name="70mph">
            <Description i18n="ReportsXML.eventSpeedOption.70mph">%{mph:70}</Description>
            <Property key="optSpeedKPH">112.65408</Property>
            </Option>
         <Option name="75mph">
            <Description i18n="ReportsXML.eventSpeedOption.75mph">%{mph:75}</Description>
            <Property key="optSpeedKPH">120.7008</Property>
            </Option>
      </Options>
      <Constraints>
         <TimeStart>-1</TimeStart>
         <TimeEnd>-1</TimeEnd>
         <ValidGPSRequired>true</ValidGPSRequired>
         <Where type="mysql"><![CDATA[ (speedKPH > ${optSpeedKPH}) ]]></Where>
         <SelectionLimit type="first">2000</SelectionLimit>
         <ReportLimit>2000</ReportLimit>
      </Constraints>
      <MapIconSelector ruleFactoryName="GTSRulesEngine,SecureENRE,ENRE">
        <!-- an installed "RuleFactory" implementation is required which can analyze this iconSelector -->
        <![CDATA[ ((speed<5)?"reddot":"heading") ]]>
      </MapIconSelector> 
      <Property key="gpsAgeColorRange">1200:#550000,3600:#BB0000</Property>
   </Report>

   <!-- EventData report showing "Excessive Speed" events -->
   <Report name="EventExcessSpeed" type="device.performance" 
        class="org.opengts.war.report.event.EventDetailReport"
        layout="org.opengts.war.report.event.EventDataLayout"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.eventExcessSpeed.menu">${i18n.Vehicle} Excess Speed</MenuDescription>
      <Title i18n="ReportsXML.eventExcessSpeed.title">${i18n.Vehicle} Excess Speed</Title>
      <Subtitle i18n="ReportsXML.eventExcessSpeed.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"             arg="mapLink" ifTrue="columnIndexMapLink"/>
         <Column name="index"                           ifFalse="columnIndexMapLink"/>
         <Column name="dateTime"                        />
         <Column name="statusDesc"          arg="color" />
         <Column name="pushpin"                         ifTrue="columnPushpin"/>
         <Column name="geoPoint"            arg="4"     ifTrue="columnLatLon"/>
         <Column name="speedH"                          />
         <Column name="speedLimit"          arg="0"     ifTrue="columnSpeedLimit"/>
         <Column name="address"                         />
      </Columns>
      <Constraints>
         <TimeStart>-1</TimeStart>
         <TimeEnd>-1</TimeEnd>
         <ValidGPSRequired>false</ValidGPSRequired>
         <Where type="mysql"><![CDATA[ ((statusCode = 0xF11A) || (statusCode = 0xF11B) || ((statusCode >= 0xF160) && (statusCode <= 0xF16F))) ]]></Where>
         <SelectionLimit type="first">1000</SelectionLimit>
         <ReportLimit>1000</ReportLimit>
      </Constraints>
      <MapIconSelector ruleFactoryName="GTSRulesEngine,SecureENRE,ENRE">
        <!-- an installed "RuleFactory" implementation is required which can analyze this iconSelector -->
        <![CDATA[ ("greenh") ]]>
      </MapIconSelector> 
      <Property key="gpsAgeColorRange">1200:#550000,3600:#BB0000</Property>
   </Report>

   <!-- event detail report for speeds greater than posted limit -->
   <!-- 'speedLimitPKH' must be defined in EventData, or an error will result -->
   <Report name="EventSpeedPosted" type="device.performance" 
        class="org.opengts.war.report.event.EventDetailReport"
        layout="org.opengts.war.report.event.EventDataLayout"
        modules="extra"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.eventSpeedPosted.menu">Exceeding Posted Speed</MenuDescription> 
      <Title i18n="ReportsXML.eventSpeedPosted.title">Exceeding Posted Speed (${description})</Title>
      <Subtitle i18n="ReportsXML.eventSpeedPosted.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"         arg="mapLink" ifTrue="columnIndexMapLink"/>
         <Column name="index"                       ifFalse="columnIndexMapLink"/>
         <Column name="date"                        />
         <Column name="time"                        />
         <Column name="geoPoint"            arg="4" ifTrue="columnLatLon"/>
         <Column name="speedH"                      />
         <Column name="speedLimit"                  />
         <Column name="overSpeedLimit"              />
         <Column name="address"                     />
      </Columns>
      <Options type="list">
         <Option name="default">
            <Description i18n="ReportsXML.eventSpeedPosted.0mph">over limit</Description>
            <Property key="overLimitKPH">0.00000</Property>
            </Option>
         <Option name="5mph">
            <Description i18n="ReportsXML.eventSpeedPosted.5mph">5mph over limit</Description>
            <Property key="overLimitKPH">8.04672</Property>
            </Option>
         <Option name="10mph">
            <Description i18n="ReportsXML.eventSpeedPosted.10mph">10mph over limit</Description>
            <Property key="overLimitKPH">16.09344</Property>
            </Option>
      </Options>
      <Constraints>
         <TimeStart>-1</TimeStart>
         <TimeEnd>-1</TimeEnd>
         <ValidGPSRequired>true</ValidGPSRequired>
         <Where type="mysql"><![CDATA[ ((speedLimitKPH > 0) AND (speedKPH > (speedLimitKPH + ${overLimitKPH}))) ]]></Where>
         <SelectionLimit type="first">3000</SelectionLimit>
         <ReportLimit>3000</ReportLimit>
      </Constraints>
      <MapIconSelector ruleFactoryName="GTSRulesEngine,SecureENRE,ENRE">
        <!-- an installed "RuleFactory" implementation is required which can analyze this iconSelector -->
        <![CDATA[ ("heading") ]]>
      </MapIconSelector> 
      <Property key="gpsAgeColorRange">1200:#550000,3600:#BB0000</Property>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- Impact Report -->
   <Report name="ImpactIncident" type="device.performance" 
        class="org.opengts.extra.war.report.impact.ImpactReport" 
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        optional="true"
        sortable="false"
        >
      <MenuDescription i18n="ReportsXML.impactIncident.menu">Impact (FNOL) Report</MenuDescription>
      <Title i18n="ReportsXML.impactIncident.title">Impact (FNOL) Report</Title>
      <Subtitle i18n="ReportsXML.impactIncident.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"                           />
         <Column name="dateTime"                        />
         <Column name="statusDesc"          arg="color" />
         <Column name="incidentDateTime"                />
         <Column name="geoPoint"            arg="4"     />
         <Column name="address"                         />
         <Column name="speedH"              arg="1"     />
         <Column name="driverID"                        />
         <Column name="accelMagnitude"      arg="G"     />
     <!-- Column name="boolean_1"           arg="Yes,No" >Has Detail</Column -->
         <Column name="graphLink"                        >Detail\nGraph</Column>
      </Columns>
   </Report>

   <!-- ======================================================================================= -->
   <!-- ======================================================================================= -->
   <!-- sysadmin.summary ====================================================================== -->

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- Account Last Login Report -->
   <Report name="AccountLastLogin" type="sysadmin.summary" 
        class="org.opengts.extra.war.report.field.AccountReport"
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        optional="true"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.accountLoginReport.menu">Account Login Report</MenuDescription>
      <Title i18n="ReportsXML.accountLoginReport.title">Account Login Report</Title>
      <Subtitle i18n="ReportsXML.accountLoginReport.subtitle"></Subtitle>
      <Columns>
         <Column name="index"                       />
         <Column name="accountId"                   />
         <Column name="accountDesc"                 />
         <Column name="accountActive"               />
         <Column name="deviceCount"                 />
         <Column name="smsCount"                    ifTrue="AccountLoginReport.smsCount" />
         <Column name="loginDateTime"               />
         <Column name="loginAge"                    />
      </Columns>
      <Property key="loginAgeColorRange">604800:#AA9700,2592000:#DD0000</Property>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- Report showing devices which have not yet been assigned to an account/device -->
   <Report name="UnassignedDevices" type="sysadmin.summary" 
        class="org.opengts.extra.war.report.field.UnassignedDevicesReport" 
        layout="org.opengts.war.report.field.FieldLayout"
        modules="extra"
        optional="true"
        sortable="true"
        >
      <MenuDescription i18n="ReportsXML.unassignedDevices.menu">Unassigned Devices</MenuDescription>
      <Title i18n="ReportsXML.unassignedDevices.title">Devices not yet assigned to an Account</Title>
      <Subtitle i18n="ReportsXML.unassignedDevices.subtitle">Timezone: ${timezone}</Subtitle>
      <Columns>
         <Column name="index"                       />
         <Column name="serverID"                    />
         <Column name="uniqueID"                    />
         <Column name="createDateTime"              i18n="ReportsXML.recvDateTime.column" >Received Time</Column>
         <Column name="dateTime"                    i18n="ReportsXML.eventDateTime.column">Event Time</Column>
         <Column name="geoPoint"            arg="5" />
         <Column name="ipAddress"                   />
         <Column name="isDuplex"                    />
      </Columns>
      <Constraints>
         <SelectionLimit type="last">1000</SelectionLimit>
         <ReportLimit>1000</ReportLimit>
      </Constraints>
   </Report>

   <!-- ======================================================================================= -->
   <!-- ======================================================================================= -->
   <!-- ifta.detail =========================================================================== -->

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- BorderCrossing report showing all state-line crossings -->
   <Report name="BCrossDetail" type="ifta.detail"
        class="org.opengts.bcross.war.report.StateMileageDetailReport" 
        layout="org.opengts.bcross.war.report.BCLayout"
        modules="bcross"
        optional="true"
        sortable="false"
        >
      <MenuDescription i18n="ReportsXML.borderCrossDetail.menu">State Border-Crossing Summary</MenuDescription>
      <Title i18n="ReportsXML.borderCrossDetail.title">State Border-Crossing Summary</Title>
      <Subtitle i18n="ReportsXML.borderCrossDetail.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"                       />
         <Column name="subdivision"                 />
         <Column name="subdivName"                  />
         <Column name="enterDateTime"               />
         <Column name="enterOdometer"       arg="1" />
         <Column name="exitDateTime"                />
         <Column name="exitOdometer"        arg="1" />
         <Column name="distanceTraveled"    arg="1" />
      </Columns>
      <MapIconSelector ruleFactoryName="GTSRulesEngine,SecureENRE,ENRE">
        <!-- an installed "RuleFactory" implementation is required which can analyze this iconSelector -->
        <![CDATA[ ((speed<5)?"reddot":"heading") ]]>
      </MapIconSelector> 
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- BorderCrossing report showing accumulated miles within states -->
   <Report name="BCrossSummary" type="ifta.detail"
        class="org.opengts.bcross.war.report.StateMileageSummaryReport" 
        layout="org.opengts.bcross.war.report.BCLayout"
        modules="bcross"
        optional="true"
        sortable="false"
        >
      <MenuDescription i18n="ReportsXML.borderCrossSummary.menu">State Mileage Summary</MenuDescription>
      <Title i18n="ReportsXML.borderCrossSummary.title">State Mileage Summary</Title>
      <Subtitle i18n="ReportsXML.borderCrossSummary.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"                       />
         <Column name="subdivision"                 />
         <Column name="subdivName"                  />
         <Column name="distanceTraveled"    arg="1" />
      </Columns>
   </Report>

   <!-- OPTIONAL REPORT: may not be supported in all releases -->
   <!-- BorderCrossing report showing accumulated miles within states by Group (support PENDING) -->
   <Report name="BCrossSummary_Group" type="fleet.detail"
        class="org.opengts.bcross.war.report.StateMileageSummaryReport" 
        layout="org.opengts.bcross.war.report.BCLayout"
        modules="bcross"
        optional="true"
        sortable="false"
        >
      <MenuDescription i18n="ReportsXML.borderCrossSummary.menu">State Mileage Summary (by Group)</MenuDescription>
      <Title i18n="ReportsXML.borderCrossSummary.title">State Mileage Summary (by Group)</Title>
      <Subtitle i18n="ReportsXML.borderCrossSummary.subtitle">${deviceDesc} [${deviceId}]\n${dateRange}</Subtitle>
      <Columns>
         <Column name="index"                       />
         <Column name="subdivision"                 />
         <Column name="subdivName"                  />
         <Column name="distanceTraveled"    arg="1" />
      </Columns>
   </Report>

   <!-- ======================================================================================= -->
   <!-- ======================================================================================= -->
   <!-- ReportJobs ============================================================================ -->

   <!-- OPTIONAL: may not be supported in this release -->
   <ReportJobs>
      <!-- 
       === NOTE: "crontab/crontab.xml" must define a matching entry for each of these specified tag-ids
       === Relative from/to time formats may be specified as in one of the following examples:
       ===   "-0s"   Now (0 seconds ago)
       ===   "-0h"   Now (0 hours ago)
       ===   "-1h"   One Hour Ago
       ===   "-0d"   Today
       ===   "-1d"   Yesterday
       ===   "-7d"   A week (7 days) ago
       ===   "-1m"   Last Month
       ===   "-Mon"  The most recent previous Monday
       ===   "-Fri"  The most recent previous Friday
       ===   "-DDD"  The most recent previous weekday (DDD is one of Sun,Mon,Tue,Wed,Thu,Fri,Sat).
       === "fromTime" will always select a time that represents the beginning of the day.
       === "toTime"   will always select a time that represents the end of the day.
       === Note: "fromTime"/"toTIme" parsed by "DateTime.parseDateTime(...)"
       -->
      <IntervalTag id="hourly"  fromTime="-1h"  toTime="-0h"  i18n="ReportsXML.reportJobInterval.hourly" >Hourly (Last Hour)</IntervalTag>
      <IntervalTag id="daily"   fromTime="-1d"  toTime="-1d"  i18n="ReportsXML.reportJobInterval.daily"  >Daily (Yesterday)</IntervalTag>
      <IntervalTag id="weekly"  fromTime="-7d"  toTime="-1d"  i18n="ReportsXML.reportJobInterval.weekly" >Weekly (Sunday through Saturday)</IntervalTag>
      <IntervalTag id="monfri"  fromTime="-Mon" toTime="-Fri" i18n="ReportsXML.reportJobInterval.monfri" >Last Monday through Friday</IntervalTag>
      <IntervalTag id="satsun"  fromTime="-Sat" toTime="-Sun" i18n="ReportsXML.reportJobInterval.satsun" >Last Weekend</IntervalTag>
      <IntervalTag id="monthly" fromTime="-1m"  toTime="-1m"  i18n="ReportsXML.reportJobInterval.monthly">Last Month</IntervalTag>
      <!-- - -> 
      <IntervalTag id="test"    fromTime="-1d"  toTime="-1d"  i18n="ReportsXML.reportJobInterval.test"   >Debug test only</IntervalTag> 
      <!- - -->
   </ReportJobs>

   <!-- ======================================================================================= -->
   <!-- <Include dir="." file="TestReport.xml" optional="true"/> -->
   <!-- ======================================================================================= -->

</ReportDefinition>
