[2025-12-26 02:39:43] [INFO] === STARTING MULTI-AGENCY ROUTING TEST ===
[2025-12-26 02:39:43] [INFO] Using Mailbox ID: 68920395733981a47
[2025-12-26 02:39:43] [INFO] Connected to real API: https://stationboss.net/login
[2025-12-26 02:39:43] [INFO] File size: 5855 bytes
[2025-12-26 02:39:43] [INFO] Loaded real mailbox: N/A
[2025-12-26 02:39:43] [INFO] Mailbox default saasclientId: 681942a25bc58c3ab
[2025-12-26 02:39:43] [INFO] Mailbox assigned agencies: ["681a1d681d6140e0c","681942a25bc58c3ab"]
[2025-12-26 02:39:43] [INFO] Mailbox dispatch stations: ["681a4332a2e490051","6819761cc9478253f"]
[2025-12-26 02:39:43] [INFO] MOCK: Would create FTPFiles record with ID: TEST_FTP_694df56fa5379
[2025-12-26 02:39:43] [INFO] About to extract fields from XML. File size: 5855 bytes
[2025-12-26 02:39:43] [INFO] Number of mappings: 24
[2025-12-26 02:39:43] [INFO] Starting XML parsing. Content length: 5855
[2025-12-26 02:39:43] [INFO] XML parsed successfully. Root element: CombinedIncidentVehicleData
[2025-12-26 02:39:43] [INFO] Processing 24 field mappings
[2025-12-26 02:39:43] [INFO] Mapping #1: Extracting 'IncidentData.ProblemName' => 'incidentTypeValue1'
[2025-12-26 02:39:43] [INFO]   -> Found value: FTEST-Fire Test Call
[2025-12-26 02:39:43] [INFO]   -> Set field 'incidentTypeValue1' = "FTEST-Fire Test Call"
[2025-12-26 02:39:43] [INFO] Mapping #2: Extracting 'IncidentData.LocationName' => 'businessName'
[2025-12-26 02:39:43] [INFO]   -> Found value: @MVFD Station 1
[2025-12-26 02:39:43] [INFO]   -> Set field 'businessName' = "@MVFD Station 1"
[2025-12-26 02:39:43] [INFO] Mapping #3: Extracting 'IncidentData.PostalCode' => 'nERISIncidentPostalCode'
[2025-12-26 02:39:43] [INFO]   -> Found value: 37379
[2025-12-26 02:39:43] [INFO]   -> Set field 'nERISIncidentPostalCode' = 37379
[2025-12-26 02:39:43] [INFO] Mapping #4: Extracting 'IncidentData.AddressHouseNumber' => 'incidentLocationStreetNumber'
[2025-12-26 02:39:43] [INFO]   -> Found value: 1705
[2025-12-26 02:39:43] [INFO]   -> Set field 'incidentLocationStreetNumber' = 1705
[2025-12-26 02:39:43] [INFO] Mapping #5: Extracting 'IncidentData.AddressStreetName' => 'streetName'
[2025-12-26 02:39:43] [INFO]   -> Found value: MOWBRAY
[2025-12-26 02:39:43] [INFO]   -> Set field 'streetName' = "MOWBRAY"
[2025-12-26 02:39:43] [INFO] Mapping #6: Extracting 'IncidentData.CrossStreet' => 'incidentLocationCross'
[2025-12-26 02:39:43] [INFO]   -> Found value: CAREY RD/ARNAT DR
[2025-12-26 02:39:43] [INFO]   -> Set field 'incidentLocationCross' = "CAREY RD\/ARNAT DR"
[2025-12-26 02:39:43] [INFO] Mapping #7: Extracting 'IncidentData.ResponseDate' => 'alarm'
[2025-12-26 02:39:43] [INFO]   -> Found value: 2025-12-24T07:40:27.91-05:00
[2025-12-26 02:39:43] [INFO]   -> Set field 'alarm' = "2025-12-24 12:40:27"
[2025-12-26 02:39:43] [INFO] Mapping #8: Extracting 'IncidentData.TimeFirstUnitEnroute' => 'enroute'
[2025-12-26 02:39:43] [INFO]   -> Found value: 0001-01-01T00:00:00
[2025-12-26 02:39:43] [INFO]   -> Set field 'enroute' = null
[2025-12-26 02:39:43] [INFO] Mapping #9: Extracting 'IncidentData.TimeFirstUnitArrived' => 'onScene'
[2025-12-26 02:39:43] [INFO]   -> Found value: 0001-01-01T00:00:00
[2025-12-26 02:39:43] [INFO]   -> Set field 'onScene' = null
[2025-12-26 02:39:43] [INFO] Mapping #10: Extracting 'IncidentData.TimeCallClosed' => ["cleared","inService"]
[2025-12-26 02:39:43] [INFO]   -> Found value: 0001-01-01T00:00:00
[2025-12-26 02:39:43] [INFO]   -> Set field 'cleared' = null
[2025-12-26 02:39:43] [INFO]   -> Set field 'inService' = null
[2025-12-26 02:39:43] [INFO] Mapping #11: Extracting 'IncidentData.Latitude' => 'nERISIncidentLatitude'
[2025-12-26 02:39:43] [INFO]   -> Found value: 35.274781
[2025-12-26 02:39:43] [INFO]   -> Set field 'nERISIncidentLatitude' = 35.27478099999999727742761024273931980133056640625
[2025-12-26 02:39:43] [INFO] Mapping #12: Extracting 'IncidentData.Longitude' => 'nERISIncidentLongitude'
[2025-12-26 02:39:43] [INFO]   -> Found value: -85.218002
[2025-12-26 02:39:43] [INFO]   -> Set field 'nERISIncidentLongitude' = -85.2180019999999984747773851267993450164794921875
[2025-12-26 02:39:43] [INFO] Mapping #13: Extracting 'IncidentData.TimeFirstUnitAssigned' => 'dispatched'
[2025-12-26 02:39:43] [INFO]   -> Found value: 0001-01-01T00:00:00
[2025-12-26 02:39:43] [INFO]   -> Set field 'dispatched' = null
[2025-12-26 02:39:43] [INFO] Mapping #14: Extracting 'Vehicles.VehicleData[0].UnitName' => ["cADVehicleID","name"]
[2025-12-26 02:39:43] [INFO]   -> No value found (null or empty)
[2025-12-26 02:39:43] [INFO] Mapping #15: Extracting 'Vehicles.VehicleData[0].TimeClearedCall' => 'timeunitclear'
[2025-12-26 02:39:43] [INFO]   -> No value found (null or empty)
[2025-12-26 02:39:43] [INFO] Mapping #16: Extracting 'Vehicles.VehicleData[0].TimeArrivedAtScene' => 'timeonscene'
[2025-12-26 02:39:43] [INFO]   -> No value found (null or empty)
[2025-12-26 02:39:43] [INFO] Mapping #17: Extracting 'Vehicles.VehicleData[0].TimeStaged' => 'timestaging'
[2025-12-26 02:39:43] [INFO]   -> No value found (null or empty)
[2025-12-26 02:39:43] [INFO] Mapping #18: Extracting 'Vehicles.VehicleData[0].TimeEnroute' => 'timeenroutetoscene'
[2025-12-26 02:39:43] [INFO]   -> No value found (null or empty)
[2025-12-26 02:39:43] [INFO] Mapping #19: Extracting 'Vehicles.VehicleData[0].TimeAssigned' => 'timedispatch'
[2025-12-26 02:39:43] [INFO]   -> No value found (null or empty)
[2025-12-26 02:39:43] [INFO] Mapping #20: Extracting 'IncidentData.AddressStreetType' => 'streetType'
[2025-12-26 02:39:43] [INFO]   -> Found value: PIKE
[2025-12-26 02:39:43] [INFO]   -> Set field 'streetType' = "PIKE"
[2025-12-26 02:39:43] [INFO] Mapping #21: Extracting 'IncidentData.UnitJurisdictionCaseNumber' => ["incidentInternalId","dispatchRunNumber"]
[2025-12-26 02:39:43] [INFO]   -> No value found (null or empty)
[2025-12-26 02:39:43] [INFO] Mapping #22: Extracting 'IncidentData.IncidentNumber' => ["policeReportNumber","cADNumber"]
[2025-12-26 02:39:43] [INFO]   -> Found value: 2025-12-33756
[2025-12-26 02:39:43] [INFO]   -> Set field 'policeReportNumber' = "2025-12-33756"
[2025-12-26 02:39:43] [INFO]   -> Set field 'cADNumber' = "2025-12-33756"
[2025-12-26 02:39:43] [INFO] Mapping #23: Extracting 'IncidentData.Comments.Comment' => ["dispatchNotes","cADLog"]
[2025-12-26 02:39:43] [INFO]   -> No value found (null or empty)
[2025-12-26 02:39:43] [INFO] Mapping #24: Extracting 'IncidentData.AgencyIdentifier' => 'cADAgencyIdentifier'
[2025-12-26 02:39:43] [INFO]   -> Found value: MFD
[2025-12-26 02:39:43] [INFO]   -> Set field 'cADAgencyIdentifier' = "MFD"
[2025-12-26 02:39:43] [INFO] Finished extracting fields. Total fields extracted: 18
[2025-12-26 02:39:43] [INFO] Concatenating street name and type
[2025-12-26 02:39:43] [INFO]   -> Combined street name: MOWBRAY PIKE
[2025-12-26 02:39:43] [INFO] Built locationCoordinates from lat/lng: 35.274781,-85.218002
[2025-12-26 02:39:43] [INFO] Extracted data: {
    "incidentTypeValue1": "FTEST-Fire Test Call",
    "businessName": "@MVFD Station 1",
    "nERISIncidentPostalCode": 37379,
    "incidentLocationStreetNumber": 1705,
    "streetName": "MOWBRAY PIKE",
    "incidentLocationCross": "CAREY RD\/ARNAT DR",
    "alarm": "2025-12-24 12:40:27",
    "enroute": null,
    "onScene": null,
    "cleared": null,
    "inService": null,
    "nERISIncidentLatitude": 35.27478099999999727742761024273931980133056640625,
    "nERISIncidentLongitude": -85.2180019999999984747773851267993450164794921875,
    "dispatched": null,
    "policeReportNumber": "2025-12-33756",
    "cADNumber": "2025-12-33756",
    "cADAgencyIdentifier": "MFD",
    "locationCoordinates": "35.274781,-85.218002"
}
[2025-12-26 02:39:43] [INFO] Number of extracted fields: 18
[2025-12-26 02:39:43] [INFO] MULTI-AGENCY: Extracted cADAgencyIdentifier = 'MFD'
[2025-12-26 02:39:43] [INFO] Multi-agency routing check: CAD Agency ID raw = 'MFD', Parsed IDs = ["MFD"], Non-empty count = 1, Total agency count = 1, Assigned Agencies count = 2
[2025-12-26 02:39:43] [INFO] Multi-agency mode detected. Checking AgencyCode values in order: ["MFD"]
[2025-12-26 02:39:43] [INFO] Attempting SAASClient lookup for AgencyCode 'MFD' (index 0) within mailbox's assigned agencies
[2025-12-26 02:39:43] [INFO] SUCCESS: Routed to agency 'Mowbray Volunteer Fire Department' (ID: 681942a25bc58c3ab) at INDEX 0 based on AgencyCode 'MFD'
[2025-12-26 02:39:43] [INFO] Fetched 1 stations from Stations module for agency 'Mowbray Volunteer Fire Department': ["6819761cc9478253f"]
[2025-12-26 02:39:43] [INFO] Final routing: saasclientId = 681942a25bc58c3ab, dispatchStationsIds = ["6819761cc9478253f"], matchedAgencyIndex = 0
[2025-12-26 02:39:43] [INFO] === DISPATCH DATA THAT WOULD BE CREATED ===
[2025-12-26 02:39:43] [INFO] {
    "assignedUserId": 1,
    "source": "FTP",
    "status": "New",
    "saasclientId": "681942a25bc58c3ab",
    "receivedFromMailboxId": "68920395733981a47",
    "dispatchTime": "2025-12-26 02:39:43",
    "dispatchedStationsIds": [
        "6819761cc9478253f"
    ],
    "fTPFilesId": "TEST_FTP_694df56fa5379",
    "incidentType": "FTEST-Fire Test Call",
    "locationCoordinates": "35.274781,-85.218002",
    "incidentAddressTextVersionStreet": "1705 MOWBRAY PIKE",
    "incidentAddressTextVersionCity": "",
    "incidentAddressTextVersionState": "",
    "incidentAddressTextVersionPostalCode": 37379,
    "cADNumber": "",
    "dispatchNotes": ""
}
[2025-12-26 02:39:44] [INFO] IncidentTypeMapping already exists: 690b740bbb3108fbf
[2025-12-26 02:39:44] [INFO] === TEST COMPLETED SUCCESSFULLY ===
[2025-12-26 04:10:38] [INFO] === STARTING MULTI-AGENCY ROUTING TEST ===
[2025-12-26 04:10:38] [INFO] Using Mailbox ID: 68920395733981a47
[2025-12-26 04:10:38] [INFO] Connected to real API: https://stationboss.net/login
[2025-12-26 04:10:38] [INFO] File size: 5855 bytes
[2025-12-26 04:10:38] [INFO] Loaded real mailbox: N/A
[2025-12-26 04:10:38] [INFO] Mailbox default saasclientId: 681942a25bc58c3ab
[2025-12-26 04:10:38] [INFO] Mailbox assigned agencies: ["681a1d681d6140e0c","681942a25bc58c3ab"]
[2025-12-26 04:10:38] [INFO] Mailbox dispatch stations: ["681a4332a2e490051","6819761cc9478253f"]
[2025-12-26 04:10:38] [INFO] MOCK: Would create FTPFiles record with ID: TEST_FTP_694e0abe9f543
[2025-12-26 04:10:38] [INFO] About to extract fields from XML. File size: 5855 bytes
[2025-12-26 04:10:38] [INFO] Number of mappings: 24
[2025-12-26 04:10:38] [INFO] Starting XML parsing. Content length: 5855
[2025-12-26 04:10:38] [INFO] XML parsed successfully. Root element: CombinedIncidentVehicleData
[2025-12-26 04:10:38] [INFO] Processing 24 field mappings
[2025-12-26 04:10:38] [INFO] Mapping #1: Extracting 'IncidentData.ProblemName' => 'incidentTypeValue1'
[2025-12-26 04:10:38] [INFO]   -> Found value: FTEST-Fire Test Call
[2025-12-26 04:10:38] [INFO]   -> Set field 'incidentTypeValue1' = "FTEST-Fire Test Call"
[2025-12-26 04:10:38] [INFO] Mapping #2: Extracting 'IncidentData.LocationName' => 'businessName'
[2025-12-26 04:10:38] [INFO]   -> Found value: @MVFD Station 1
[2025-12-26 04:10:38] [INFO]   -> Set field 'businessName' = "@MVFD Station 1"
[2025-12-26 04:10:38] [INFO] Mapping #3: Extracting 'IncidentData.PostalCode' => 'nERISIncidentPostalCode'
[2025-12-26 04:10:38] [INFO]   -> Found value: 37379
[2025-12-26 04:10:38] [INFO]   -> Set field 'nERISIncidentPostalCode' = 37379
[2025-12-26 04:10:38] [INFO] Mapping #4: Extracting 'IncidentData.AddressHouseNumber' => 'incidentLocationStreetNumber'
[2025-12-26 04:10:38] [INFO]   -> Found value: 1705
[2025-12-26 04:10:38] [INFO]   -> Set field 'incidentLocationStreetNumber' = 1705
[2025-12-26 04:10:38] [INFO] Mapping #5: Extracting 'IncidentData.AddressStreetName' => 'streetName'
[2025-12-26 04:10:38] [INFO]   -> Found value: MOWBRAY
[2025-12-26 04:10:38] [INFO]   -> Set field 'streetName' = "MOWBRAY"
[2025-12-26 04:10:38] [INFO] Mapping #6: Extracting 'IncidentData.CrossStreet' => 'incidentLocationCross'
[2025-12-26 04:10:38] [INFO]   -> Found value: CAREY RD/ARNAT DR
[2025-12-26 04:10:38] [INFO]   -> Set field 'incidentLocationCross' = "CAREY RD\/ARNAT DR"
[2025-12-26 04:10:38] [INFO] Mapping #7: Extracting 'IncidentData.ResponseDate' => 'alarm'
[2025-12-26 04:10:38] [INFO]   -> Found value: 2025-12-24T07:40:27.91-05:00
[2025-12-26 04:10:38] [INFO]   -> Set field 'alarm' = "2025-12-24 12:40:27"
[2025-12-26 04:10:38] [INFO] Mapping #8: Extracting 'IncidentData.TimeFirstUnitEnroute' => 'enroute'
[2025-12-26 04:10:38] [INFO]   -> Found value: 0001-01-01T00:00:00
[2025-12-26 04:10:38] [INFO]   -> Set field 'enroute' = null
[2025-12-26 04:10:38] [INFO] Mapping #9: Extracting 'IncidentData.TimeFirstUnitArrived' => 'onScene'
[2025-12-26 04:10:38] [INFO]   -> Found value: 0001-01-01T00:00:00
[2025-12-26 04:10:38] [INFO]   -> Set field 'onScene' = null
[2025-12-26 04:10:38] [INFO] Mapping #10: Extracting 'IncidentData.TimeCallClosed' => ["cleared","inService"]
[2025-12-26 04:10:38] [INFO]   -> Found value: 0001-01-01T00:00:00
[2025-12-26 04:10:38] [INFO]   -> Set field 'cleared' = null
[2025-12-26 04:10:38] [INFO]   -> Set field 'inService' = null
[2025-12-26 04:10:38] [INFO] Mapping #11: Extracting 'IncidentData.Latitude' => 'nERISIncidentLatitude'
[2025-12-26 04:10:38] [INFO]   -> Found value: 35.274781
[2025-12-26 04:10:38] [INFO]   -> Set field 'nERISIncidentLatitude' = 35.27478099999999727742761024273931980133056640625
[2025-12-26 04:10:38] [INFO] Mapping #12: Extracting 'IncidentData.Longitude' => 'nERISIncidentLongitude'
[2025-12-26 04:10:38] [INFO]   -> Found value: -85.218002
[2025-12-26 04:10:38] [INFO]   -> Set field 'nERISIncidentLongitude' = -85.2180019999999984747773851267993450164794921875
[2025-12-26 04:10:38] [INFO] Mapping #13: Extracting 'IncidentData.TimeFirstUnitAssigned' => 'dispatched'
[2025-12-26 04:10:38] [INFO]   -> Found value: 0001-01-01T00:00:00
[2025-12-26 04:10:38] [INFO]   -> Set field 'dispatched' = null
[2025-12-26 04:10:38] [INFO] Mapping #14: Extracting 'Vehicles.VehicleData[0].UnitName' => ["cADVehicleID","name"]
[2025-12-26 04:10:38] [INFO]   -> No value found (null or empty)
[2025-12-26 04:10:38] [INFO] Mapping #15: Extracting 'Vehicles.VehicleData[0].TimeClearedCall' => 'timeunitclear'
[2025-12-26 04:10:38] [INFO]   -> No value found (null or empty)
[2025-12-26 04:10:38] [INFO] Mapping #16: Extracting 'Vehicles.VehicleData[0].TimeArrivedAtScene' => 'timeonscene'
[2025-12-26 04:10:38] [INFO]   -> No value found (null or empty)
[2025-12-26 04:10:38] [INFO] Mapping #17: Extracting 'Vehicles.VehicleData[0].TimeStaged' => 'timestaging'
[2025-12-26 04:10:38] [INFO]   -> No value found (null or empty)
[2025-12-26 04:10:38] [INFO] Mapping #18: Extracting 'Vehicles.VehicleData[0].TimeEnroute' => 'timeenroutetoscene'
[2025-12-26 04:10:38] [INFO]   -> No value found (null or empty)
[2025-12-26 04:10:38] [INFO] Mapping #19: Extracting 'Vehicles.VehicleData[0].TimeAssigned' => 'timedispatch'
[2025-12-26 04:10:38] [INFO]   -> No value found (null or empty)
[2025-12-26 04:10:38] [INFO] Mapping #20: Extracting 'IncidentData.AddressStreetType' => 'streetType'
[2025-12-26 04:10:38] [INFO]   -> Found value: PIKE
[2025-12-26 04:10:38] [INFO]   -> Set field 'streetType' = "PIKE"
[2025-12-26 04:10:38] [INFO] Mapping #21: Extracting 'IncidentData.UnitJurisdictionCaseNumber' => ["incidentInternalId","dispatchRunNumber"]
[2025-12-26 04:10:38] [INFO]   -> No value found (null or empty)
[2025-12-26 04:10:38] [INFO] Mapping #22: Extracting 'IncidentData.IncidentNumber' => ["policeReportNumber","cADNumber"]
[2025-12-26 04:10:38] [INFO]   -> Found value: 2025-12-33756
[2025-12-26 04:10:38] [INFO]   -> Set field 'policeReportNumber' = "2025-12-33756"
[2025-12-26 04:10:38] [INFO]   -> Set field 'cADNumber' = "2025-12-33756"
[2025-12-26 04:10:38] [INFO] Mapping #23: Extracting 'IncidentData.Comments.Comment' => ["dispatchNotes","cADLog"]
[2025-12-26 04:10:38] [INFO]   -> No value found (null or empty)
[2025-12-26 04:10:38] [INFO] Mapping #24: Extracting 'IncidentData.AgencyIdentifier' => 'cADAgencyIdentifier'
[2025-12-26 04:10:38] [INFO]   -> Found value: MFD
[2025-12-26 04:10:38] [INFO]   -> Set field 'cADAgencyIdentifier' = "MFD"
[2025-12-26 04:10:38] [INFO] Finished extracting fields. Total fields extracted: 18
[2025-12-26 04:10:38] [INFO] Concatenating street name and type
[2025-12-26 04:10:38] [INFO]   -> Combined street name: MOWBRAY PIKE
[2025-12-26 04:10:38] [INFO] Built locationCoordinates from lat/lng: 35.274781,-85.218002
[2025-12-26 04:10:38] [INFO] Extracted data: {
    "incidentTypeValue1": "FTEST-Fire Test Call",
    "businessName": "@MVFD Station 1",
    "nERISIncidentPostalCode": 37379,
    "incidentLocationStreetNumber": 1705,
    "streetName": "MOWBRAY PIKE",
    "incidentLocationCross": "CAREY RD\/ARNAT DR",
    "alarm": "2025-12-24 12:40:27",
    "enroute": null,
    "onScene": null,
    "cleared": null,
    "inService": null,
    "nERISIncidentLatitude": 35.27478099999999727742761024273931980133056640625,
    "nERISIncidentLongitude": -85.2180019999999984747773851267993450164794921875,
    "dispatched": null,
    "policeReportNumber": "2025-12-33756",
    "cADNumber": "2025-12-33756",
    "cADAgencyIdentifier": "MFD",
    "locationCoordinates": "35.274781,-85.218002"
}
[2025-12-26 04:10:38] [INFO] Number of extracted fields: 18
[2025-12-26 04:10:38] [INFO] MULTI-AGENCY: Extracted cADAgencyIdentifier = 'MFD'
[2025-12-26 04:10:38] [INFO] Multi-agency routing check: CAD Agency ID raw = 'MFD', Parsed IDs = ["MFD"], Non-empty count = 1, Total agency count = 1, Assigned Agencies count = 2
[2025-12-26 04:10:38] [INFO] Multi-agency mode detected. Checking AgencyCode values in order: ["MFD"]
[2025-12-26 04:10:38] [INFO] Attempting SAASClient lookup for AgencyCode 'MFD' (index 0) within mailbox's assigned agencies
[2025-12-26 04:10:38] [INFO] SUCCESS: Routed to agency 'Mowbray Volunteer Fire Department' (ID: 681942a25bc58c3ab) at INDEX 0 based on AgencyCode 'MFD'
[2025-12-26 04:10:38] [INFO] Fetched 1 stations from Stations module for agency 'Mowbray Volunteer Fire Department': ["6819761cc9478253f"]
[2025-12-26 04:10:38] [INFO] Final routing: saasclientId = 681942a25bc58c3ab, dispatchStationsIds = ["6819761cc9478253f"], matchedAgencyIndex = 0
[2025-12-26 04:10:38] [INFO] === DISPATCH DATA THAT WOULD BE CREATED ===
[2025-12-26 04:10:38] [INFO] {
    "assignedUserId": 1,
    "source": "FTP",
    "status": "New",
    "saasclientId": "681942a25bc58c3ab",
    "receivedFromMailboxId": "68920395733981a47",
    "dispatchTime": "2025-12-26 04:10:38",
    "dispatchedStationsIds": [
        "6819761cc9478253f"
    ],
    "fTPFilesId": "TEST_FTP_694e0abe9f543",
    "incidentType": "FTEST-Fire Test Call",
    "locationCoordinates": "35.274781,-85.218002",
    "incidentAddressTextVersionStreet": "1705 MOWBRAY PIKE",
    "incidentAddressTextVersionCity": "",
    "incidentAddressTextVersionState": "",
    "incidentAddressTextVersionPostalCode": 37379,
    "cADNumber": "",
    "dispatchNotes": ""
}
[2025-12-26 04:10:39] [INFO] IncidentTypeMapping already exists: 690b740bbb3108fbf
[2025-12-26 04:10:39] [INFO] === TEST COMPLETED SUCCESSFULLY ===
[2025-12-26 06:19:31] [INFO] === STARTING MULTI-AGENCY ROUTING TEST ===
[2025-12-26 06:19:31] [INFO] Using Mailbox ID: 68920395733981a47
[2025-12-26 06:19:31] [INFO] Connected to real API: https://stationboss.net/login
[2025-12-26 06:19:31] [INFO] File size: 5855 bytes
[2025-12-26 06:19:31] [INFO] Loaded real mailbox: N/A
[2025-12-26 06:19:31] [INFO] Mailbox default saasclientId: 681942a25bc58c3ab
[2025-12-26 06:19:31] [INFO] Mailbox assigned agencies: ["681a1d681d6140e0c","681942a25bc58c3ab"]
[2025-12-26 06:19:31] [INFO] Mailbox dispatch stations: ["681a4332a2e490051","6819761cc9478253f"]
[2025-12-26 06:19:31] [INFO] MOCK: Would create FTPFiles record with ID: TEST_FTP_694e28f34a7b2
[2025-12-26 06:19:31] [INFO] About to extract fields from XML. File size: 5855 bytes
[2025-12-26 06:19:31] [INFO] Number of mappings: 24
[2025-12-26 06:19:31] [INFO] Starting XML parsing. Content length: 5855
[2025-12-26 06:19:31] [INFO] XML parsed successfully. Root element: CombinedIncidentVehicleData
[2025-12-26 06:19:31] [INFO] Processing 24 field mappings
[2025-12-26 06:19:31] [INFO] Mapping #1: Extracting 'IncidentData.ProblemName' => 'incidentTypeValue1'
[2025-12-26 06:19:31] [INFO]   -> Found value: FTEST-Fire Test Call
[2025-12-26 06:19:31] [INFO]   -> Set field 'incidentTypeValue1' = "FTEST-Fire Test Call"
[2025-12-26 06:19:31] [INFO] Mapping #2: Extracting 'IncidentData.LocationName' => 'businessName'
[2025-12-26 06:19:31] [INFO]   -> Found value: @MVFD Station 1
[2025-12-26 06:19:31] [INFO]   -> Set field 'businessName' = "@MVFD Station 1"
[2025-12-26 06:19:31] [INFO] Mapping #3: Extracting 'IncidentData.PostalCode' => 'nERISIncidentPostalCode'
[2025-12-26 06:19:31] [INFO]   -> Found value: 37379
[2025-12-26 06:19:31] [INFO]   -> Set field 'nERISIncidentPostalCode' = 37379
[2025-12-26 06:19:31] [INFO] Mapping #4: Extracting 'IncidentData.AddressHouseNumber' => 'incidentLocationStreetNumber'
[2025-12-26 06:19:31] [INFO]   -> Found value: 1705
[2025-12-26 06:19:31] [INFO]   -> Set field 'incidentLocationStreetNumber' = 1705
[2025-12-26 06:19:31] [INFO] Mapping #5: Extracting 'IncidentData.AddressStreetName' => 'streetName'
[2025-12-26 06:19:31] [INFO]   -> Found value: MOWBRAY
[2025-12-26 06:19:31] [INFO]   -> Set field 'streetName' = "MOWBRAY"
[2025-12-26 06:19:31] [INFO] Mapping #6: Extracting 'IncidentData.CrossStreet' => 'incidentLocationCross'
[2025-12-26 06:19:31] [INFO]   -> Found value: CAREY RD/ARNAT DR
[2025-12-26 06:19:31] [INFO]   -> Set field 'incidentLocationCross' = "CAREY RD\/ARNAT DR"
[2025-12-26 06:19:31] [INFO] Mapping #7: Extracting 'IncidentData.ResponseDate' => 'alarm'
[2025-12-26 06:19:31] [INFO]   -> Found value: 2025-12-24T07:40:27.91-05:00
[2025-12-26 06:19:31] [INFO]   -> Set field 'alarm' = "2025-12-24 12:40:27"
[2025-12-26 06:19:31] [INFO] Mapping #8: Extracting 'IncidentData.TimeFirstUnitEnroute' => 'enroute'
[2025-12-26 06:19:31] [INFO]   -> Found value: 0001-01-01T00:00:00
[2025-12-26 06:19:31] [INFO]   -> Set field 'enroute' = null
[2025-12-26 06:19:31] [INFO] Mapping #9: Extracting 'IncidentData.TimeFirstUnitArrived' => 'onScene'
[2025-12-26 06:19:31] [INFO]   -> Found value: 0001-01-01T00:00:00
[2025-12-26 06:19:31] [INFO]   -> Set field 'onScene' = null
[2025-12-26 06:19:31] [INFO] Mapping #10: Extracting 'IncidentData.TimeCallClosed' => ["cleared","inService"]
[2025-12-26 06:19:31] [INFO]   -> Found value: 0001-01-01T00:00:00
[2025-12-26 06:19:31] [INFO]   -> Set field 'cleared' = null
[2025-12-26 06:19:31] [INFO]   -> Set field 'inService' = null
[2025-12-26 06:19:31] [INFO] Mapping #11: Extracting 'IncidentData.Latitude' => 'nERISIncidentLatitude'
[2025-12-26 06:19:31] [INFO]   -> Found value: 35.274781
[2025-12-26 06:19:31] [INFO]   -> Set field 'nERISIncidentLatitude' = 35.27478099999999727742761024273931980133056640625
[2025-12-26 06:19:31] [INFO] Mapping #12: Extracting 'IncidentData.Longitude' => 'nERISIncidentLongitude'
[2025-12-26 06:19:31] [INFO]   -> Found value: -85.218002
[2025-12-26 06:19:31] [INFO]   -> Set field 'nERISIncidentLongitude' = -85.2180019999999984747773851267993450164794921875
[2025-12-26 06:19:31] [INFO] Mapping #13: Extracting 'IncidentData.TimeFirstUnitAssigned' => 'dispatched'
[2025-12-26 06:19:31] [INFO]   -> Found value: 0001-01-01T00:00:00
[2025-12-26 06:19:31] [INFO]   -> Set field 'dispatched' = null
[2025-12-26 06:19:31] [INFO] Mapping #14: Extracting 'Vehicles.VehicleData[0].UnitName' => ["cADVehicleID","name"]
[2025-12-26 06:19:31] [INFO]   -> No value found (null or empty)
[2025-12-26 06:19:31] [INFO] Mapping #15: Extracting 'Vehicles.VehicleData[0].TimeClearedCall' => 'timeunitclear'
[2025-12-26 06:19:31] [INFO]   -> No value found (null or empty)
[2025-12-26 06:19:31] [INFO] Mapping #16: Extracting 'Vehicles.VehicleData[0].TimeArrivedAtScene' => 'timeonscene'
[2025-12-26 06:19:31] [INFO]   -> No value found (null or empty)
[2025-12-26 06:19:31] [INFO] Mapping #17: Extracting 'Vehicles.VehicleData[0].TimeStaged' => 'timestaging'
[2025-12-26 06:19:31] [INFO]   -> No value found (null or empty)
[2025-12-26 06:19:31] [INFO] Mapping #18: Extracting 'Vehicles.VehicleData[0].TimeEnroute' => 'timeenroutetoscene'
[2025-12-26 06:19:31] [INFO]   -> No value found (null or empty)
[2025-12-26 06:19:31] [INFO] Mapping #19: Extracting 'Vehicles.VehicleData[0].TimeAssigned' => 'timedispatch'
[2025-12-26 06:19:31] [INFO]   -> No value found (null or empty)
[2025-12-26 06:19:31] [INFO] Mapping #20: Extracting 'IncidentData.AddressStreetType' => 'streetType'
[2025-12-26 06:19:31] [INFO]   -> Found value: PIKE
[2025-12-26 06:19:31] [INFO]   -> Set field 'streetType' = "PIKE"
[2025-12-26 06:19:31] [INFO] Mapping #21: Extracting 'IncidentData.UnitJurisdictionCaseNumber' => ["incidentInternalId","dispatchRunNumber"]
[2025-12-26 06:19:31] [INFO]   -> No value found (null or empty)
[2025-12-26 06:19:31] [INFO] Mapping #22: Extracting 'IncidentData.IncidentNumber' => ["policeReportNumber","cADNumber"]
[2025-12-26 06:19:31] [INFO]   -> Found value: 2025-12-33756
[2025-12-26 06:19:31] [INFO]   -> Set field 'policeReportNumber' = "2025-12-33756"
[2025-12-26 06:19:31] [INFO]   -> Set field 'cADNumber' = "2025-12-33756"
[2025-12-26 06:19:31] [INFO] Mapping #23: Extracting 'IncidentData.Comments.Comment' => ["dispatchNotes","cADLog"]
[2025-12-26 06:19:31] [INFO]   -> No value found (null or empty)
[2025-12-26 06:19:31] [INFO] Mapping #24: Extracting 'IncidentData.AgencyIdentifier' => 'cADAgencyIdentifier'
[2025-12-26 06:19:31] [INFO]   -> Found value: MFD
[2025-12-26 06:19:31] [INFO]   -> Set field 'cADAgencyIdentifier' = "MFD"
[2025-12-26 06:19:31] [INFO] Finished extracting fields. Total fields extracted: 18
[2025-12-26 06:19:31] [INFO] Concatenating street name and type
[2025-12-26 06:19:31] [INFO]   -> Combined street name: MOWBRAY PIKE
[2025-12-26 06:19:31] [INFO] Built locationCoordinates from lat/lng: 35.274781,-85.218002
[2025-12-26 06:19:31] [INFO] Extracted data: {
    "incidentTypeValue1": "FTEST-Fire Test Call",
    "businessName": "@MVFD Station 1",
    "nERISIncidentPostalCode": 37379,
    "incidentLocationStreetNumber": 1705,
    "streetName": "MOWBRAY PIKE",
    "incidentLocationCross": "CAREY RD\/ARNAT DR",
    "alarm": "2025-12-24 12:40:27",
    "enroute": null,
    "onScene": null,
    "cleared": null,
    "inService": null,
    "nERISIncidentLatitude": 35.27478099999999727742761024273931980133056640625,
    "nERISIncidentLongitude": -85.2180019999999984747773851267993450164794921875,
    "dispatched": null,
    "policeReportNumber": "2025-12-33756",
    "cADNumber": "2025-12-33756",
    "cADAgencyIdentifier": "MFD",
    "locationCoordinates": "35.274781,-85.218002"
}
[2025-12-26 06:19:31] [INFO] Number of extracted fields: 18
[2025-12-26 06:19:31] [INFO] MULTI-AGENCY: Extracted cADAgencyIdentifier = 'MFD'
[2025-12-26 06:19:31] [INFO] Multi-agency routing check: CAD Agency ID raw = 'MFD', Parsed IDs = ["MFD"], Non-empty count = 1, Total agency count = 1, Assigned Agencies count = 2
[2025-12-26 06:19:31] [INFO] Multi-agency mode detected. Checking AgencyCode values in order: ["MFD"]
[2025-12-26 06:19:31] [INFO] Attempting SAASClient lookup for AgencyCode 'MFD' (index 0) within mailbox's assigned agencies
[2025-12-26 06:19:31] [INFO] SUCCESS: Routed to agency 'Mowbray Volunteer Fire Department' (ID: 681942a25bc58c3ab) at INDEX 0 based on AgencyCode 'MFD'
[2025-12-26 06:19:31] [INFO] Fetched 1 stations from Stations module for agency 'Mowbray Volunteer Fire Department': ["6819761cc9478253f"]
[2025-12-26 06:19:31] [INFO] Final routing: saasclientId = 681942a25bc58c3ab, dispatchStationsIds = ["6819761cc9478253f"], matchedAgencyIndex = 0
[2025-12-26 06:19:31] [INFO] === DISPATCH DATA THAT WOULD BE CREATED ===
[2025-12-26 06:19:31] [INFO] {
    "assignedUserId": 1,
    "source": "FTP",
    "status": "New",
    "saasclientId": "681942a25bc58c3ab",
    "receivedFromMailboxId": "68920395733981a47",
    "dispatchTime": "2025-12-26 06:19:31",
    "dispatchedStationsIds": [
        "6819761cc9478253f"
    ],
    "fTPFilesId": "TEST_FTP_694e28f34a7b2",
    "incidentType": "FTEST-Fire Test Call",
    "locationCoordinates": "35.274781,-85.218002",
    "incidentAddressTextVersionStreet": "1705 MOWBRAY PIKE",
    "incidentAddressTextVersionCity": "",
    "incidentAddressTextVersionState": "",
    "incidentAddressTextVersionPostalCode": 37379,
    "cADNumber": "",
    "dispatchNotes": ""
}
[2025-12-26 06:19:31] [INFO] IncidentTypeMapping already exists: 690b740bbb3108fbf
[2025-12-26 06:19:31] [INFO] === TEST COMPLETED SUCCESSFULLY ===
[2025-12-26 15:52:29] [INFO] === STARTING MULTI-AGENCY ROUTING TEST ===
[2025-12-26 15:52:29] [INFO] Using Mailbox ID: 68920395733981a47
[2025-12-26 15:52:29] [INFO] Connected to real API: https://stationboss.net/login
[2025-12-26 15:52:29] [INFO] File size: 35818 bytes
[2025-12-26 15:52:29] [INFO] Loaded real mailbox: N/A
[2025-12-26 15:52:29] [INFO] Mailbox default saasclientId: 681942a25bc58c3ab
[2025-12-26 15:52:29] [INFO] Mailbox assigned agencies: ["681a1d681d6140e0c","681942a25bc58c3ab"]
[2025-12-26 15:52:29] [INFO] Mailbox dispatch stations: ["681a4332a2e490051","6819761cc9478253f"]
[2025-12-26 15:52:29] [INFO] MOCK: Would create FTPFiles record with ID: TEST_FTP_694eaf3de4ab4
[2025-12-26 15:52:29] [INFO] About to extract fields from XML. File size: 35818 bytes
[2025-12-26 15:52:29] [INFO] Number of mappings: 24
[2025-12-26 15:52:29] [INFO] Starting XML parsing. Content length: 35818
[2025-12-26 15:52:29] [INFO] XML parsed successfully. Root element: CADServiceCallDocument
[2025-12-26 15:52:29] [INFO] Processing 24 field mappings
[2025-12-26 15:52:29] [INFO] Mapping #1: Extracting 'IncidentData.ProblemName' => 'incidentTypeValue1'
[2025-12-26 15:52:29] [INFO]   -> No value found (null or empty)
[2025-12-26 15:52:29] [INFO] Mapping #2: Extracting 'IncidentData.LocationName' => 'businessName'
[2025-12-26 15:52:29] [INFO]   -> No value found (null or empty)
[2025-12-26 15:52:29] [INFO] Mapping #3: Extracting 'IncidentData.PostalCode' => 'nERISIncidentPostalCode'
[2025-12-26 15:52:29] [INFO]   -> No value found (null or empty)
[2025-12-26 15:52:29] [INFO] Mapping #4: Extracting 'IncidentData.AddressHouseNumber' => 'incidentLocationStreetNumber'
[2025-12-26 15:52:29] [INFO]   -> No value found (null or empty)
[2025-12-26 15:52:29] [INFO] Mapping #5: Extracting 'IncidentData.AddressStreetName' => 'streetName'
[2025-12-26 15:52:29] [INFO]   -> No value found (null or empty)
[2025-12-26 15:52:29] [INFO] Mapping #6: Extracting 'IncidentData.CrossStreet' => 'incidentLocationCross'
[2025-12-26 15:52:29] [INFO]   -> No value found (null or empty)
[2025-12-26 15:52:29] [INFO] Mapping #7: Extracting 'IncidentData.ResponseDate' => 'alarm'
[2025-12-26 15:52:29] [INFO]   -> No value found (null or empty)
[2025-12-26 15:52:29] [INFO] Mapping #8: Extracting 'IncidentData.TimeFirstUnitEnroute' => 'enroute'
[2025-12-26 15:52:29] [INFO]   -> No value found (null or empty)
[2025-12-26 15:52:29] [INFO] Mapping #9: Extracting 'IncidentData.TimeFirstUnitArrived' => 'onScene'
[2025-12-26 15:52:29] [INFO]   -> No value found (null or empty)
[2025-12-26 15:52:29] [INFO] Mapping #10: Extracting 'IncidentData.TimeCallClosed' => ["cleared","inService"]
[2025-12-26 15:52:29] [INFO]   -> No value found (null or empty)
[2025-12-26 15:52:29] [INFO] Mapping #11: Extracting 'IncidentData.Latitude' => 'nERISIncidentLatitude'
[2025-12-26 15:52:29] [INFO]   -> No value found (null or empty)
[2025-12-26 15:52:29] [INFO] Mapping #12: Extracting 'IncidentData.Longitude' => 'nERISIncidentLongitude'
[2025-12-26 15:52:29] [INFO]   -> No value found (null or empty)
[2025-12-26 15:52:29] [INFO] Mapping #13: Extracting 'IncidentData.TimeFirstUnitAssigned' => 'dispatched'
[2025-12-26 15:52:29] [INFO]   -> No value found (null or empty)
[2025-12-26 15:52:29] [INFO] Mapping #14: Extracting 'Vehicles.VehicleData[0].UnitName' => ["cADVehicleID","name"]
[2025-12-26 15:52:29] [INFO]   -> No value found (null or empty)
[2025-12-26 15:52:29] [INFO] Mapping #15: Extracting 'Vehicles.VehicleData[0].TimeClearedCall' => 'timeunitclear'
[2025-12-26 15:52:29] [INFO]   -> No value found (null or empty)
[2025-12-26 15:52:29] [INFO] Mapping #16: Extracting 'Vehicles.VehicleData[0].TimeArrivedAtScene' => 'timeonscene'
[2025-12-26 15:52:29] [INFO]   -> No value found (null or empty)
[2025-12-26 15:52:29] [INFO] Mapping #17: Extracting 'Vehicles.VehicleData[0].TimeStaged' => 'timestaging'
[2025-12-26 15:52:29] [INFO]   -> No value found (null or empty)
[2025-12-26 15:52:29] [INFO] Mapping #18: Extracting 'Vehicles.VehicleData[0].TimeEnroute' => 'timeenroutetoscene'
[2025-12-26 15:52:29] [INFO]   -> No value found (null or empty)
[2025-12-26 15:52:29] [INFO] Mapping #19: Extracting 'Vehicles.VehicleData[0].TimeAssigned' => 'timedispatch'
[2025-12-26 15:52:29] [INFO]   -> No value found (null or empty)
[2025-12-26 15:52:29] [INFO] Mapping #20: Extracting 'IncidentData.AddressStreetType' => 'streetType'
[2025-12-26 15:52:29] [INFO]   -> No value found (null or empty)
[2025-12-26 15:52:29] [INFO] Mapping #21: Extracting 'IncidentData.UnitJurisdictionCaseNumber' => ["incidentInternalId","dispatchRunNumber"]
[2025-12-26 15:52:29] [INFO]   -> No value found (null or empty)
[2025-12-26 15:52:29] [INFO] Mapping #22: Extracting 'IncidentData.IncidentNumber' => ["policeReportNumber","cADNumber"]
[2025-12-26 15:52:29] [INFO]   -> No value found (null or empty)
[2025-12-26 15:52:29] [INFO] Mapping #23: Extracting 'IncidentData.Comments.Comment' => ["dispatchNotes","cADLog"]
[2025-12-26 15:52:29] [INFO]   -> No value found (null or empty)
[2025-12-26 15:52:29] [INFO] Mapping #24: Extracting 'IncidentData.AgencyIdentifier' => 'cADAgencyIdentifier'
[2025-12-26 15:52:29] [INFO]   -> No value found (null or empty)
[2025-12-26 15:52:29] [INFO] Finished extracting fields. Total fields extracted: 0
[2025-12-26 15:52:29] [INFO] Extracted data: []
[2025-12-26 15:52:29] [INFO] Number of extracted fields: 0
[2025-12-26 15:52:29] [INFO] MULTI-AGENCY: No cADAgencyIdentifier found in extracted data
[2025-12-26 15:52:29] [INFO] Multi-agency routing check: CAD Agency ID raw = 'NULL', Parsed IDs = [], Non-empty count = 0, Total agency count = 0, Assigned Agencies count = 2
[2025-12-26 15:52:29] [WARNING] WARNING: Multi-agency mailbox (2 agencies) received dispatch WITHOUT cADAgencyIdentifier. This dispatch will use mailbox default agency. Check XML field mapping for cADAgencyIdentifier.
[2025-12-26 15:52:29] [INFO] Single-agency mode: Using mailbox saasclientId: 681942a25bc58c3ab
[2025-12-26 15:52:29] [INFO] Final routing: saasclientId = 681942a25bc58c3ab, dispatchStationsIds = ["681a4332a2e490051","6819761cc9478253f"], matchedAgencyIndex = 0
[2025-12-26 15:52:29] [INFO] === DISPATCH DATA THAT WOULD BE CREATED ===
[2025-12-26 15:52:29] [INFO] {
    "assignedUserId": 1,
    "source": "FTP",
    "status": "New",
    "saasclientId": "681942a25bc58c3ab",
    "receivedFromMailboxId": "68920395733981a47",
    "dispatchTime": "2025-12-26 15:52:29",
    "dispatchedStationsIds": [
        "681a4332a2e490051",
        "6819761cc9478253f"
    ],
    "fTPFilesId": "TEST_FTP_694eaf3de4ab4",
    "incidentType": "",
    "locationCoordinates": "",
    "incidentAddressTextVersionStreet": "",
    "incidentAddressTextVersionCity": "",
    "incidentAddressTextVersionState": "",
    "incidentAddressTextVersionPostalCode": "",
    "cADNumber": "",
    "dispatchNotes": ""
}
[2025-12-26 15:52:29] [INFO] === TEST COMPLETED SUCCESSFULLY ===
[2025-12-26 15:53:57] [INFO] === STARTING MULTI-AGENCY ROUTING TEST ===
[2025-12-26 15:53:57] [INFO] Using Mailbox ID: 66a7b78a47817ab30
[2025-12-26 15:53:57] [INFO] Connected to real API: https://stationboss.net/login
[2025-12-26 15:53:57] [INFO] File size: 35818 bytes
[2025-12-26 15:53:57] [INFO] Loaded real mailbox: N/A
[2025-12-26 15:53:57] [INFO] Mailbox default saasclientId: 653ad9b50d6738006
[2025-12-26 15:53:57] [INFO] Mailbox assigned agencies: ["653ad9b50d6738006"]
[2025-12-26 15:53:57] [INFO] Mailbox dispatch stations: ["657eac8334fb835a4"]
[2025-12-26 15:53:57] [INFO] MOCK: Would create FTPFiles record with ID: TEST_FTP_694eaf95505fe
[2025-12-26 15:53:57] [INFO] About to extract fields from XML. File size: 35818 bytes
[2025-12-26 15:53:57] [INFO] Number of mappings: 14
[2025-12-26 15:53:57] [INFO] Starting XML parsing. Content length: 35818
[2025-12-26 15:53:57] [INFO] XML parsed successfully. Root element: CADServiceCallDocument
[2025-12-26 15:53:57] [INFO] Processing 14 field mappings
[2025-12-26 15:53:57] [INFO] Mapping #1: Extracting 'CADServiceCall.ServiceCallResponseLocation.LocationAddress.StructuredAddress.LocationStreet.StreetNumberText' => 'incidentLocationStreetNumber'
[2025-12-26 15:53:57] [INFO]   -> Found value: 200
[2025-12-26 15:53:57] [INFO]   -> Set field 'incidentLocationStreetNumber' = 200
[2025-12-26 15:53:57] [INFO] Mapping #2: Extracting 'CADServiceCall.ServiceCallResponseLocation.LocationAddress.StructuredAddress.LocationStreet.StreetFullText' => 'streetName'
[2025-12-26 15:53:57] [INFO]   -> Found value: SHADTOWN RD
[2025-12-26 15:53:57] [INFO]   -> Set field 'streetName' = "SHADTOWN RD"
[2025-12-26 15:53:57] [INFO] Mapping #3: Extracting 'CADServiceCall.ServiceCallResponseLocation.LocationAddress.StructuredAddress.LocationCityName' => 'incidentLocationCity'
[2025-12-26 15:53:57] [INFO]   -> Found value: MARTIN
[2025-12-26 15:53:57] [INFO]   -> Set field 'incidentLocationCity' = "MARTIN"
[2025-12-26 15:53:57] [INFO] Mapping #4: Extracting 'CADServiceCall.ServiceCallResponseLocation.LocationAddress.StructuredAddress.LocationStateName' => 'incidentLocationStateName'
[2025-12-26 15:53:57] [INFO]   -> Found value: TN
[2025-12-26 15:53:57] [INFO]   -> Set field 'incidentLocationStateName' = "TN"
[2025-12-26 15:53:57] [INFO] Mapping #5: Extracting 'CADServiceCall.ServiceCallResponseLocation.LocationAddress.StructuredAddress.LocationPostalCode' => 'nERISIncidentPostalCode'
[2025-12-26 15:53:57] [INFO]   -> Found value: 38237
[2025-12-26 15:53:57] [INFO]   -> Set field 'nERISIncidentPostalCode' = 38237
[2025-12-26 15:53:57] [INFO] Mapping #6: Extracting 'CADServiceCall.ServiceCallResponseLocation.LocationTwoDimensionalGeographicCoordinate.GeographicCoordinateLatitude.LatitudeDegreeValue' => 'nERISIncidentLatitude'
[2025-12-26 15:53:57] [INFO]   -> Found value: 36.3417056320137
[2025-12-26 15:53:57] [INFO]   -> Set field 'nERISIncidentLatitude' = 36.3417056320136993008418357931077480316162109375
[2025-12-26 15:53:57] [INFO] Mapping #7: Extracting 'CADServiceCall.ServiceCallResponseLocation.LocationTwoDimensionalGeographicCoordinate.GeographicCoordinateLongitude.LongitudeDegreeValue' => 'nERISIncidentLongitude'
[2025-12-26 15:53:57] [INFO]   -> Found value: -88.93529034179
[2025-12-26 15:53:57] [INFO]   -> Set field 'nERISIncidentLongitude' = -88.93529034178999381765606813132762908935546875
[2025-12-26 15:53:57] [INFO] Mapping #8: Extracting 'CADServiceCall.CallInitiatedDateTime' => 'alarm'
[2025-12-26 15:53:57] [INFO] Found 6 elements for 'CallInitiatedDateTime', using FIRST value only (single-value path)
[2025-12-26 15:53:57] [INFO]   -> Found value: 2025-12-21T23:00:34Z
[2025-12-26 15:53:57] [INFO]   -> Set field 'alarm' = "2025-12-21 23:00:34"
[2025-12-26 15:53:57] [INFO] Mapping #9: Extracting 'CADServiceCall.UnitAssignment.UnitDispatchedDateTime' => ["dispatched","timedispatch"]
[2025-12-26 15:53:57] [INFO]   -> Found value: 2025-12-21T23:00:48Z
[2025-12-26 15:53:57] [INFO]   -> Set field 'dispatched' = "2025-12-21 23:00:48"
[2025-12-26 15:53:57] [INFO]   -> Set field 'timedispatch' = "2025-12-21 23:00:48"
[2025-12-26 15:53:57] [INFO] Mapping #10: Extracting 'CADServiceCall.AgencyEventID' => ["cADNumber","dispatchRunNumber"]
[2025-12-26 15:53:57] [INFO] Found 6 elements for 'AgencyEventID', using FIRST value only (single-value path)
[2025-12-26 15:53:57] [INFO]   -> Found value: CAD25-049734
[2025-12-26 15:53:57] [INFO]   -> Set field 'cADNumber' = "CAD25-049734"
[2025-12-26 15:53:57] [INFO]   -> Set field 'dispatchRunNumber' = "CAD25-049734"
[2025-12-26 15:53:57] [INFO] Mapping #11: Extracting 'CADServiceCall.Note[0].CallNoteText' => 'dispatchNotes'
[2025-12-26 15:53:57] [INFO]   -> Found value: EVENT ENTRY INITIATED AT 12/21/2025 23:00:34.222
[2025-12-26 15:53:57] [INFO]   -> Set field 'dispatchNotes' = "EVENT ENTRY INITIATED AT 12\/21\/2025 23:00:34.222"
[2025-12-26 15:53:57] [INFO] Mapping #12: Extracting 'CADServiceCall.CallInitialNatureCodeDescriptionText' => 'incidentTypeValue1'
[2025-12-26 15:53:57] [INFO]   -> Found value: PROPERTY CHECK
[2025-12-26 15:53:57] [INFO]   -> Set field 'incidentTypeValue1' = "PROPERTY CHECK"
[2025-12-26 15:53:57] [INFO] Mapping #13: Extracting 'CADServiceCall.UnitAssignment.UnitNo' => 'cADVehicleID'
[2025-12-26 15:53:57] [INFO]   -> Found value: DE1
[2025-12-26 15:53:57] [INFO]   -> Set field 'cADVehicleID' = "DE1"
[2025-12-26 15:53:57] [INFO] Mapping #14: Extracting 'CADServiceCall.CallUnitOnscene' => 'timeonscene'
[2025-12-26 15:53:57] [INFO]   -> Found value: False
[2025-12-26 15:53:57] [ERROR] Error formatting datetime 'False': Failed to parse time string (False) at position 0 (F): The timezone could not be found in the database
[2025-12-26 15:53:57] [INFO]   -> Set field 'timeonscene' = null
[2025-12-26 15:53:57] [INFO] Finished extracting fields. Total fields extracted: 16
[2025-12-26 15:53:57] [INFO] Built locationCoordinates from lat/lng: 36.341705632014,-88.93529034179
[2025-12-26 15:53:57] [INFO] Extracted data: {
    "incidentLocationStreetNumber": 200,
    "streetName": "SHADTOWN RD",
    "incidentLocationCity": "MARTIN",
    "incidentLocationStateName": "TN",
    "nERISIncidentPostalCode": 38237,
    "nERISIncidentLatitude": 36.3417056320136993008418357931077480316162109375,
    "nERISIncidentLongitude": -88.93529034178999381765606813132762908935546875,
    "alarm": "2025-12-21 23:00:34",
    "dispatched": "2025-12-21 23:00:48",
    "timedispatch": "2025-12-21 23:00:48",
    "cADNumber": "CAD25-049734",
    "dispatchRunNumber": "CAD25-049734",
    "dispatchNotes": "EVENT ENTRY INITIATED AT 12\/21\/2025 23:00:34.222",
    "incidentTypeValue1": "PROPERTY CHECK",
    "cADVehicleID": "DE1",
    "timeonscene": null,
    "locationCoordinates": "36.341705632014,-88.93529034179"
}
[2025-12-26 15:53:57] [INFO] Number of extracted fields: 17
[2025-12-26 15:53:57] [INFO] MULTI-AGENCY: No cADAgencyIdentifier found in extracted data
[2025-12-26 15:53:57] [INFO] Multi-agency routing check: CAD Agency ID raw = 'NULL', Parsed IDs = [], Non-empty count = 0, Total agency count = 0, Assigned Agencies count = 1
[2025-12-26 15:53:57] [WARNING] WARNING: Multi-agency mailbox (1 agencies) received dispatch WITHOUT cADAgencyIdentifier. This dispatch will use mailbox default agency. Check XML field mapping for cADAgencyIdentifier.
[2025-12-26 15:53:57] [INFO] Single-agency mode: Using mailbox saasclientId: 653ad9b50d6738006
[2025-12-26 15:53:57] [INFO] Final routing: saasclientId = 653ad9b50d6738006, dispatchStationsIds = ["657eac8334fb835a4"], matchedAgencyIndex = 0
[2025-12-26 15:53:57] [INFO] === DISPATCH DATA THAT WOULD BE CREATED ===
[2025-12-26 15:53:57] [INFO] {
    "assignedUserId": 1,
    "source": "FTP",
    "status": "New",
    "saasclientId": "653ad9b50d6738006",
    "receivedFromMailboxId": "66a7b78a47817ab30",
    "dispatchTime": "2025-12-26 15:53:57",
    "dispatchedStationsIds": [
        "657eac8334fb835a4"
    ],
    "fTPFilesId": "TEST_FTP_694eaf95505fe",
    "incidentType": "PROPERTY CHECK",
    "locationCoordinates": "36.341705632014,-88.93529034179",
    "incidentAddressTextVersionStreet": "200 SHADTOWN RD",
    "incidentAddressTextVersionCity": "MARTIN",
    "incidentAddressTextVersionState": "TN",
    "incidentAddressTextVersionPostalCode": 38237,
    "cADNumber": "CAD25-049734",
    "dispatchNotes": "EVENT ENTRY INITIATED AT 12\/21\/2025 23:00:34.222"
}
[2025-12-26 15:53:57] [INFO] MOCK: Would create IncidentTypeMapping: {"cADIncidentType":"PROPERTY CHECK","saasclientId":"653ad9b50d6738006","name":"PROPERTY CHECK"}
[2025-12-26 15:53:57] [INFO] MOCK: Would CREATE new Dispatch record
[2025-12-26 15:53:57] [INFO] === TEST COMPLETED SUCCESSFULLY ===
[2025-12-26 17:14:06] [INFO] === STARTING MULTI-AGENCY ROUTING TEST ===
[2025-12-26 17:14:06] [INFO] Using Mailbox ID: 66a7b78a47817ab30
[2025-12-26 17:14:06] [INFO] Connected to real API: https://stationboss.net/login
[2025-12-26 17:14:06] [INFO] File size: 35818 bytes
[2025-12-26 17:14:06] [INFO] Loaded real mailbox: N/A
[2025-12-26 17:14:06] [INFO] Mailbox default saasclientId: 653ad9b50d6738006
[2025-12-26 17:14:06] [INFO] Mailbox assigned agencies: ["653ad9b50d6738006"]
[2025-12-26 17:14:06] [INFO] Mailbox dispatch stations: ["657eac8334fb835a4"]
[2025-12-26 17:14:06] [INFO] MOCK: Would create FTPFiles record with ID: TEST_FTP_694ec25eba709
[2025-12-26 17:14:06] [INFO] About to extract fields from XML. File size: 35818 bytes
[2025-12-26 17:14:06] [INFO] Number of mappings: 14
[2025-12-26 17:14:06] [INFO] Starting XML parsing. Content length: 35818
[2025-12-26 17:14:06] [INFO] XML parsed successfully. Root element: CADServiceCallDocument
[2025-12-26 17:14:06] [INFO] Processing 14 field mappings
[2025-12-26 17:14:06] [INFO] Mapping #1: Extracting 'CADServiceCall.ServiceCallResponseLocation.LocationAddress.StructuredAddress.LocationStreet.StreetNumberText' => 'incidentLocationStreetNumber'
[2025-12-26 17:14:06] [INFO]   -> Found value: 200
[2025-12-26 17:14:06] [INFO]   -> Set field 'incidentLocationStreetNumber' = 200
[2025-12-26 17:14:06] [INFO] Mapping #2: Extracting 'CADServiceCall.ServiceCallResponseLocation.LocationAddress.StructuredAddress.LocationStreet.StreetFullText' => 'streetName'
[2025-12-26 17:14:06] [INFO]   -> Found value: SHADTOWN RD
[2025-12-26 17:14:06] [INFO]   -> Set field 'streetName' = "SHADTOWN RD"
[2025-12-26 17:14:06] [INFO] Mapping #3: Extracting 'CADServiceCall.ServiceCallResponseLocation.LocationAddress.StructuredAddress.LocationCityName' => 'incidentLocationCity'
[2025-12-26 17:14:06] [INFO]   -> Found value: MARTIN
[2025-12-26 17:14:06] [INFO]   -> Set field 'incidentLocationCity' = "MARTIN"
[2025-12-26 17:14:06] [INFO] Mapping #4: Extracting 'CADServiceCall.ServiceCallResponseLocation.LocationAddress.StructuredAddress.LocationStateName' => 'incidentLocationStateName'
[2025-12-26 17:14:06] [INFO]   -> Found value: TN
[2025-12-26 17:14:06] [INFO]   -> Set field 'incidentLocationStateName' = "TN"
[2025-12-26 17:14:06] [INFO] Mapping #5: Extracting 'CADServiceCall.ServiceCallResponseLocation.LocationAddress.StructuredAddress.LocationPostalCode' => 'nERISIncidentPostalCode'
[2025-12-26 17:14:06] [INFO]   -> Found value: 38237
[2025-12-26 17:14:06] [INFO]   -> Set field 'nERISIncidentPostalCode' = 38237
[2025-12-26 17:14:06] [INFO] Mapping #6: Extracting 'CADServiceCall.ServiceCallResponseLocation.LocationTwoDimensionalGeographicCoordinate.GeographicCoordinateLatitude.LatitudeDegreeValue' => 'nERISIncidentLatitude'
[2025-12-26 17:14:06] [INFO]   -> Found value: 36.3417056320137
[2025-12-26 17:14:06] [INFO]   -> Set field 'nERISIncidentLatitude' = 36.3417056320136993008418357931077480316162109375
[2025-12-26 17:14:06] [INFO] Mapping #7: Extracting 'CADServiceCall.ServiceCallResponseLocation.LocationTwoDimensionalGeographicCoordinate.GeographicCoordinateLongitude.LongitudeDegreeValue' => 'nERISIncidentLongitude'
[2025-12-26 17:14:06] [INFO]   -> Found value: -88.93529034179
[2025-12-26 17:14:06] [INFO]   -> Set field 'nERISIncidentLongitude' = -88.93529034178999381765606813132762908935546875
[2025-12-26 17:14:06] [INFO] Mapping #8: Extracting 'CADServiceCall.CallInitiatedDateTime' => 'alarm'
[2025-12-26 17:14:06] [INFO] Found 6 elements for 'CallInitiatedDateTime', using FIRST value only
[2025-12-26 17:14:06] [INFO]   -> Found value: 2025-12-21T23:00:34Z
[2025-12-26 17:14:06] [INFO]   -> Set field 'alarm' = "2025-12-21 23:00:34"
[2025-12-26 17:14:06] [INFO] Mapping #9: Extracting 'CADServiceCall.UnitAssignment.UnitDispatchedDateTime' => ["dispatched","timedispatch"]
[2025-12-26 17:14:06] [INFO]   -> Found value: 2025-12-21T23:00:48Z
[2025-12-26 17:14:06] [INFO]   -> Set field 'dispatched' = "2025-12-21 23:00:48"
[2025-12-26 17:14:06] [INFO]   -> Set field 'timedispatch' = "2025-12-21 23:00:48"
[2025-12-26 17:14:06] [INFO] Mapping #10: Extracting 'CADServiceCall.AgencyEventID' => ["cADNumber","dispatchRunNumber"]
[2025-12-26 17:14:06] [INFO] Found 6 elements for 'AgencyEventID', using FIRST value only
[2025-12-26 17:14:06] [INFO]   -> Found value: CAD25-049734
[2025-12-26 17:14:06] [INFO]   -> Set field 'cADNumber' = "CAD25-049734"
[2025-12-26 17:14:06] [INFO]   -> Set field 'dispatchRunNumber' = "CAD25-049734"
[2025-12-26 17:14:06] [INFO] Mapping #11: Extracting 'CADServiceCall.Note[0].CallNoteText' => 'dispatchNotes'
[2025-12-26 17:14:06] [INFO]   -> Found value: EVENT ENTRY INITIATED AT 12/21/2025 23:00:34.222
[2025-12-26 17:14:06] [INFO]   -> Set field 'dispatchNotes' = "EVENT ENTRY INITIATED AT 12\/21\/2025 23:00:34.222"
[2025-12-26 17:14:06] [INFO] Mapping #12: Extracting 'CADServiceCall.CallInitialNatureCodeDescriptionText' => 'incidentTypeValue1'
[2025-12-26 17:14:06] [INFO]   -> Found value: PROPERTY CHECK
[2025-12-26 17:14:06] [INFO]   -> Set field 'incidentTypeValue1' = "PROPERTY CHECK"
[2025-12-26 17:14:06] [INFO] Mapping #13: Extracting 'CADServiceCall.UnitAssignment.UnitNo' => 'cADVehicleID'
[2025-12-26 17:14:06] [INFO]   -> Found value: DE1
[2025-12-26 17:14:06] [INFO]   -> Set field 'cADVehicleID' = "DE1"
[2025-12-26 17:14:06] [INFO] Mapping #14: Extracting 'CADServiceCall.CallUnitOnscene' => 'timeonscene'
[2025-12-26 17:14:06] [INFO]   -> Found value: False
[2025-12-26 17:14:06] [ERROR] Error formatting datetime 'False': Failed to parse time string (False) at position 0 (F): The timezone could not be found in the database
[2025-12-26 17:14:06] [INFO]   -> Set field 'timeonscene' = null
[2025-12-26 17:14:06] [INFO] Finished extracting fields. Total fields extracted: 16
[2025-12-26 17:14:06] [INFO] Built locationCoordinates from lat/lng: 36.341705632014,-88.93529034179
[2025-12-26 17:14:06] [INFO] Extracted data: {
    "incidentLocationStreetNumber": 200,
    "streetName": "SHADTOWN RD",
    "incidentLocationCity": "MARTIN",
    "incidentLocationStateName": "TN",
    "nERISIncidentPostalCode": 38237,
    "nERISIncidentLatitude": 36.3417056320136993008418357931077480316162109375,
    "nERISIncidentLongitude": -88.93529034178999381765606813132762908935546875,
    "alarm": "2025-12-21 23:00:34",
    "dispatched": "2025-12-21 23:00:48",
    "timedispatch": "2025-12-21 23:00:48",
    "cADNumber": "CAD25-049734",
    "dispatchRunNumber": "CAD25-049734",
    "dispatchNotes": "EVENT ENTRY INITIATED AT 12\/21\/2025 23:00:34.222",
    "incidentTypeValue1": "PROPERTY CHECK",
    "cADVehicleID": "DE1",
    "timeonscene": null,
    "locationCoordinates": "36.341705632014,-88.93529034179"
}
[2025-12-26 17:14:06] [INFO] Number of extracted fields: 17
[2025-12-26 17:14:06] [INFO] MULTI-AGENCY: No cADAgencyIdentifier found in extracted data
[2025-12-26 17:14:06] [INFO] Multi-agency routing check: CAD Agency ID raw = 'NULL', Parsed IDs = [], Non-empty count = 0, Total agency count = 0, Assigned Agencies count = 1
[2025-12-26 17:14:06] [WARNING] WARNING: Multi-agency mailbox (1 agencies) received dispatch WITHOUT cADAgencyIdentifier. This dispatch will use mailbox default agency. Check XML field mapping for cADAgencyIdentifier.
[2025-12-26 17:14:06] [INFO] Single-agency mode: Using mailbox saasclientId: 653ad9b50d6738006
[2025-12-26 17:14:06] [INFO] Final routing: saasclientId = 653ad9b50d6738006, dispatchStationsIds = ["657eac8334fb835a4"], matchedAgencyIndex = 0
[2025-12-26 17:14:06] [INFO] === DISPATCH DATA THAT WOULD BE CREATED ===
[2025-12-26 17:14:06] [INFO] {
    "assignedUserId": 1,
    "source": "FTP",
    "status": "New",
    "saasclientId": "653ad9b50d6738006",
    "receivedFromMailboxId": "66a7b78a47817ab30",
    "dispatchTime": "2025-12-26 17:14:06",
    "dispatchedStationsIds": [
        "657eac8334fb835a4"
    ],
    "fTPFilesId": "TEST_FTP_694ec25eba709",
    "incidentType": "PROPERTY CHECK",
    "locationCoordinates": "36.341705632014,-88.93529034179",
    "incidentAddressTextVersionStreet": "200 SHADTOWN RD",
    "incidentAddressTextVersionCity": "MARTIN",
    "incidentAddressTextVersionState": "TN",
    "incidentAddressTextVersionPostalCode": 38237,
    "cADNumber": "CAD25-049734",
    "dispatchNotes": "EVENT ENTRY INITIATED AT 12\/21\/2025 23:00:34.222"
}
[2025-12-26 17:14:06] [INFO] MOCK: Would create IncidentTypeMapping: {"cADIncidentType":"PROPERTY CHECK","saasclientId":"653ad9b50d6738006","name":"PROPERTY CHECK"}
[2025-12-26 17:14:07] [INFO] MOCK: Would CREATE new Dispatch record
[2025-12-26 17:14:07] [INFO] === TEST COMPLETED SUCCESSFULLY ===
[2025-12-26 17:24:33] [INFO] === STARTING MULTI-AGENCY ROUTING TEST ===
[2025-12-26 17:24:33] [INFO] Using Mailbox ID: 66a7b78a47817ab30
[2025-12-26 17:24:33] [INFO] Connected to real API: https://stationboss.net/login
[2025-12-26 17:24:33] [INFO] File size: 35818 bytes
[2025-12-26 17:24:34] [INFO] Loaded real mailbox: N/A
[2025-12-26 17:24:34] [INFO] Mailbox default saasclientId: 653ad9b50d6738006
[2025-12-26 17:24:34] [INFO] Mailbox assigned agencies: ["653ad9b50d6738006"]
[2025-12-26 17:24:34] [INFO] Mailbox dispatch stations: ["657eac8334fb835a4"]
[2025-12-26 17:24:34] [INFO] MOCK: Would create FTPFiles record with ID: TEST_FTP_694ec4d242cc2
[2025-12-26 17:24:34] [INFO] About to extract fields from XML. File size: 35818 bytes
[2025-12-26 17:24:34] [INFO] Number of mappings: 14
[2025-12-26 17:24:34] [INFO] Starting XML parsing. Content length: 35818
[2025-12-26 17:24:34] [INFO] XML parsed successfully. Root element: CADServiceCallDocument
[2025-12-26 17:24:34] [INFO] Processing 14 field mappings
[2025-12-26 17:24:34] [INFO] Mapping #1: Extracting 'CADServiceCall.ServiceCallResponseLocation.LocationAddress.StructuredAddress.LocationStreet.StreetNumberText' => 'incidentLocationStreetNumber'
[2025-12-26 17:24:34] [INFO]   -> Found value: 200
[2025-12-26 17:24:34] [INFO]   -> Set field 'incidentLocationStreetNumber' = 200
[2025-12-26 17:24:34] [INFO] Mapping #2: Extracting 'CADServiceCall.ServiceCallResponseLocation.LocationAddress.StructuredAddress.LocationStreet.StreetFullText' => 'streetName'
[2025-12-26 17:24:34] [INFO]   -> Found value: SHADTOWN RD
[2025-12-26 17:24:34] [INFO]   -> Set field 'streetName' = "SHADTOWN RD"
[2025-12-26 17:24:34] [INFO] Mapping #3: Extracting 'CADServiceCall.ServiceCallResponseLocation.LocationAddress.StructuredAddress.LocationCityName' => 'incidentLocationCity'
[2025-12-26 17:24:34] [INFO]   -> Found value: MARTIN
[2025-12-26 17:24:34] [INFO]   -> Set field 'incidentLocationCity' = "MARTIN"
[2025-12-26 17:24:34] [INFO] Mapping #4: Extracting 'CADServiceCall.ServiceCallResponseLocation.LocationAddress.StructuredAddress.LocationStateName' => 'incidentLocationStateName'
[2025-12-26 17:24:34] [INFO]   -> Found value: TN
[2025-12-26 17:24:34] [INFO]   -> Set field 'incidentLocationStateName' = "TN"
[2025-12-26 17:24:34] [INFO] Mapping #5: Extracting 'CADServiceCall.ServiceCallResponseLocation.LocationAddress.StructuredAddress.LocationPostalCode' => 'nERISIncidentPostalCode'
[2025-12-26 17:24:34] [INFO]   -> Found value: 38237
[2025-12-26 17:24:34] [INFO]   -> Set field 'nERISIncidentPostalCode' = 38237
[2025-12-26 17:24:34] [INFO] Mapping #6: Extracting 'CADServiceCall.ServiceCallResponseLocation.LocationTwoDimensionalGeographicCoordinate.GeographicCoordinateLatitude.LatitudeDegreeValue' => 'nERISIncidentLatitude'
[2025-12-26 17:24:34] [INFO]   -> Found value: 36.3417056320137
[2025-12-26 17:24:34] [INFO]   -> Set field 'nERISIncidentLatitude' = 36.3417056320136993008418357931077480316162109375
[2025-12-26 17:24:34] [INFO] Mapping #7: Extracting 'CADServiceCall.ServiceCallResponseLocation.LocationTwoDimensionalGeographicCoordinate.GeographicCoordinateLongitude.LongitudeDegreeValue' => 'nERISIncidentLongitude'
[2025-12-26 17:24:34] [INFO]   -> Found value: -88.93529034179
[2025-12-26 17:24:34] [INFO]   -> Set field 'nERISIncidentLongitude' = -88.93529034178999381765606813132762908935546875
[2025-12-26 17:24:34] [INFO] Mapping #8: Extracting 'CADServiceCall.CallInitiatedDateTime' => 'alarm'
[2025-12-26 17:24:34] [INFO] Found 6 elements for 'CallInitiatedDateTime', using FIRST value only
[2025-12-26 17:24:34] [INFO]   -> Found value: 2025-12-21T23:00:34Z
[2025-12-26 17:24:34] [INFO]   -> Set field 'alarm' = "2025-12-21 23:00:34"
[2025-12-26 17:24:34] [INFO] Mapping #9: Extracting 'CADServiceCall.UnitAssignment.UnitDispatchedDateTime' => ["dispatched","timedispatch"]
[2025-12-26 17:24:34] [INFO]   -> Found value: 2025-12-21T23:00:48Z
[2025-12-26 17:24:34] [INFO]   -> Set field 'dispatched' = "2025-12-21 23:00:48"
[2025-12-26 17:24:34] [INFO]   -> Set field 'timedispatch' = "2025-12-21 23:00:48"
[2025-12-26 17:24:34] [INFO] Mapping #10: Extracting 'CADServiceCall.AgencyEventID' => ["cADNumber","dispatchRunNumber"]
[2025-12-26 17:24:34] [INFO] Found 6 elements for 'AgencyEventID', using FIRST value only
[2025-12-26 17:24:34] [INFO]   -> Found value: CAD25-049734
[2025-12-26 17:24:34] [INFO]   -> Set field 'cADNumber' = "CAD25-049734"
[2025-12-26 17:24:34] [INFO]   -> Set field 'dispatchRunNumber' = "CAD25-049734"
[2025-12-26 17:24:34] [INFO] Mapping #11: Extracting 'CADServiceCall.Note[0].CallNoteText' => 'dispatchNotes'
[2025-12-26 17:24:34] [INFO] Target field 'dispatchNotes' is in concatenateFields - will extract ALL array elements
[2025-12-26 17:24:34] [EXCEPTION] UNCAUGHT EXCEPTION: explode(): Argument #2 ($string) must be of type string, array given in /home/dodom2/public_html/ftp.stationboss.net/ftp_process_upload_test.php on line 251
[2025-12-26 17:24:34] [EXCEPTION] Exception trace: #0 /home/dodom2/public_html/ftp.stationboss.net/ftp_process_upload_test.php(251): explode('.', Array)
#1 /home/dodom2/public_html/ftp.stationboss.net/ftp_process_upload_test.php(338): extractNestedValue(Object(DOMElement), Array)
#2 /home/dodom2/public_html/ftp.stationboss.net/ftp_process_upload_test.php(168): extractXMLValueWithArrays(Object(DOMDocument), 'CADServiceCall....', Array)
#3 /home/dodom2/public_html/ftp.stationboss.net/ftp_process_upload_test.php(111): extractXMLValue(Object(DOMDocument), 'CADServiceCall....', Array)
#4 /home/dodom2/public_html/ftp.stationboss.net/ftp_process_upload_test.php(1331): extractMappedFieldsFromXML('<CADServiceCall...', Array)
#5 {main}
[2025-12-26 17:28:38] [INFO] === STARTING MULTI-AGENCY ROUTING TEST ===
[2025-12-26 17:28:38] [INFO] Using Mailbox ID: 66a7b78a47817ab30
[2025-12-26 17:28:38] [INFO] Connected to real API: https://stationboss.net/login
[2025-12-26 17:28:38] [INFO] File size: 35818 bytes
[2025-12-26 17:28:39] [INFO] Loaded real mailbox: N/A
[2025-12-26 17:28:39] [INFO] Mailbox default saasclientId: 653ad9b50d6738006
[2025-12-26 17:28:39] [INFO] Mailbox assigned agencies: ["653ad9b50d6738006"]
[2025-12-26 17:28:39] [INFO] Mailbox dispatch stations: ["657eac8334fb835a4"]
[2025-12-26 17:28:39] [INFO] MOCK: Would create FTPFiles record with ID: TEST_FTP_694ec5c71c666
[2025-12-26 17:28:39] [INFO] About to extract fields from XML. File size: 35818 bytes
[2025-12-26 17:28:39] [INFO] Number of mappings: 14
[2025-12-26 17:28:39] [INFO] Starting XML parsing. Content length: 35818
[2025-12-26 17:28:39] [INFO] XML parsed successfully. Root element: CADServiceCallDocument
[2025-12-26 17:28:39] [INFO] Processing 14 field mappings
[2025-12-26 17:28:39] [INFO] Mapping #1: Extracting 'CADServiceCall.ServiceCallResponseLocation.LocationAddress.StructuredAddress.LocationStreet.StreetNumberText' => 'incidentLocationStreetNumber'
[2025-12-26 17:28:39] [INFO]   -> Found value: 200
[2025-12-26 17:28:39] [INFO]   -> Set field 'incidentLocationStreetNumber' = 200
[2025-12-26 17:28:39] [INFO] Mapping #2: Extracting 'CADServiceCall.ServiceCallResponseLocation.LocationAddress.StructuredAddress.LocationStreet.StreetFullText' => 'streetName'
[2025-12-26 17:28:39] [INFO]   -> Found value: SHADTOWN RD
[2025-12-26 17:28:39] [INFO]   -> Set field 'streetName' = "SHADTOWN RD"
[2025-12-26 17:28:39] [INFO] Mapping #3: Extracting 'CADServiceCall.ServiceCallResponseLocation.LocationAddress.StructuredAddress.LocationCityName' => 'incidentLocationCity'
[2025-12-26 17:28:39] [INFO]   -> Found value: MARTIN
[2025-12-26 17:28:39] [INFO]   -> Set field 'incidentLocationCity' = "MARTIN"
[2025-12-26 17:28:39] [INFO] Mapping #4: Extracting 'CADServiceCall.ServiceCallResponseLocation.LocationAddress.StructuredAddress.LocationStateName' => 'incidentLocationStateName'
[2025-12-26 17:28:39] [INFO]   -> Found value: TN
[2025-12-26 17:28:39] [INFO]   -> Set field 'incidentLocationStateName' = "TN"
[2025-12-26 17:28:39] [INFO] Mapping #5: Extracting 'CADServiceCall.ServiceCallResponseLocation.LocationAddress.StructuredAddress.LocationPostalCode' => 'nERISIncidentPostalCode'
[2025-12-26 17:28:39] [INFO]   -> Found value: 38237
[2025-12-26 17:28:39] [INFO]   -> Set field 'nERISIncidentPostalCode' = 38237
[2025-12-26 17:28:39] [INFO] Mapping #6: Extracting 'CADServiceCall.ServiceCallResponseLocation.LocationTwoDimensionalGeographicCoordinate.GeographicCoordinateLatitude.LatitudeDegreeValue' => 'nERISIncidentLatitude'
[2025-12-26 17:28:39] [INFO]   -> Found value: 36.3417056320137
[2025-12-26 17:28:39] [INFO]   -> Set field 'nERISIncidentLatitude' = 36.3417056320136993008418357931077480316162109375
[2025-12-26 17:28:39] [INFO] Mapping #7: Extracting 'CADServiceCall.ServiceCallResponseLocation.LocationTwoDimensionalGeographicCoordinate.GeographicCoordinateLongitude.LongitudeDegreeValue' => 'nERISIncidentLongitude'
[2025-12-26 17:28:39] [INFO]   -> Found value: -88.93529034179
[2025-12-26 17:28:39] [INFO]   -> Set field 'nERISIncidentLongitude' = -88.93529034178999381765606813132762908935546875
[2025-12-26 17:28:39] [INFO] Mapping #8: Extracting 'CADServiceCall.CallInitiatedDateTime' => 'alarm'
[2025-12-26 17:28:39] [INFO] Found 6 elements for 'CallInitiatedDateTime', using FIRST value only
[2025-12-26 17:28:39] [INFO]   -> Found value: 2025-12-21T23:00:34Z
[2025-12-26 17:28:39] [INFO]   -> Set field 'alarm' = "2025-12-21 23:00:34"
[2025-12-26 17:28:39] [INFO] Mapping #9: Extracting 'CADServiceCall.UnitAssignment.UnitDispatchedDateTime' => ["dispatched","timedispatch"]
[2025-12-26 17:28:39] [INFO]   -> Found value: 2025-12-21T23:00:48Z
[2025-12-26 17:28:39] [INFO]   -> Set field 'dispatched' = "2025-12-21 23:00:48"
[2025-12-26 17:28:39] [INFO]   -> Set field 'timedispatch' = "2025-12-21 23:00:48"
[2025-12-26 17:28:39] [INFO] Mapping #10: Extracting 'CADServiceCall.AgencyEventID' => ["cADNumber","dispatchRunNumber"]
[2025-12-26 17:28:39] [INFO] Found 6 elements for 'AgencyEventID', using FIRST value only
[2025-12-26 17:28:39] [INFO]   -> Found value: CAD25-049734
[2025-12-26 17:28:39] [INFO]   -> Set field 'cADNumber' = "CAD25-049734"
[2025-12-26 17:28:39] [INFO]   -> Set field 'dispatchRunNumber' = "CAD25-049734"
[2025-12-26 17:28:39] [INFO] Mapping #11: Extracting 'CADServiceCall.Note[0].CallNoteText' => 'dispatchNotes'
[2025-12-26 17:28:39] [INFO] Target field 'dispatchNotes' is in concatenateFields - will extract ALL array elements
[2025-12-26 17:28:39] [INFO] Concatenated 13 values from 'Note' array elements
[2025-12-26 17:28:39] [INFO]   -> Found value: EVENT ENTRY INITIATED AT 12/21/2025 23:00:34.222
AGENCY EVENT ID 'CAD25-049734' ISSUED
NEW EVENT SUB...
[2025-12-26 17:28:39] [INFO]   -> Set field 'dispatchNotes' = "EVENT ENTRY INITIATED AT 12\/21\/2025 23:00:34.222\nAGENCY EVENT ID 'CAD25-049734' ISSUED\nNEW EVENT SUBMITTED FOR DISPATCH GROUP 'WCSO'\nPENDING EVENT NOTIFICATION FOR GROUP WCSO RECEIVED AT STATION-2\nPENDING EVENT NOTIFICATION FOR GROUP WCSO RECEIVED AT WC911-17\nPENDING EVENT NOTIFICATION FOR GROUP WCSO RECEIVED AT WC-911-25\nEPAGE: CHRISTY.FULCHER\nSTATION PRE-TONE SENT TO: DFD\nSTATION DISPATCH RESPONSE SENT TO: DFD\nDISPATCHING UNIT 'DE1' FROM PD BEAT DFD - TONE SENT\nRIP & RUN REPORT SENT TO: DFD\nADDED REPORT $DFD25-000302 FOR UNIT DE1 (AUTO GENERATED)\nEPAGE: IAMRESPONDING-DFD"
[2025-12-26 17:28:39] [INFO] Mapping #12: Extracting 'CADServiceCall.CallInitialNatureCodeDescriptionText' => 'incidentTypeValue1'
[2025-12-26 17:28:39] [INFO]   -> Found value: PROPERTY CHECK
[2025-12-26 17:28:39] [INFO]   -> Set field 'incidentTypeValue1' = "PROPERTY CHECK"
[2025-12-26 17:28:39] [INFO] Mapping #13: Extracting 'CADServiceCall.UnitAssignment.UnitNo' => 'cADVehicleID'
[2025-12-26 17:28:39] [INFO]   -> Found value: DE1
[2025-12-26 17:28:39] [INFO]   -> Set field 'cADVehicleID' = "DE1"
[2025-12-26 17:28:39] [INFO] Mapping #14: Extracting 'CADServiceCall.CallUnitOnscene' => 'timeonscene'
[2025-12-26 17:28:39] [INFO]   -> Found value: False
[2025-12-26 17:28:39] [ERROR] Error formatting datetime 'False': Failed to parse time string (False) at position 0 (F): The timezone could not be found in the database
[2025-12-26 17:28:39] [INFO]   -> Set field 'timeonscene' = null
[2025-12-26 17:28:39] [INFO] Finished extracting fields. Total fields extracted: 16
[2025-12-26 17:28:39] [INFO] Built locationCoordinates from lat/lng: 36.341705632014,-88.93529034179
[2025-12-26 17:28:39] [INFO] Extracted data: {
    "incidentLocationStreetNumber": 200,
    "streetName": "SHADTOWN RD",
    "incidentLocationCity": "MARTIN",
    "incidentLocationStateName": "TN",
    "nERISIncidentPostalCode": 38237,
    "nERISIncidentLatitude": 36.3417056320136993008418357931077480316162109375,
    "nERISIncidentLongitude": -88.93529034178999381765606813132762908935546875,
    "alarm": "2025-12-21 23:00:34",
    "dispatched": "2025-12-21 23:00:48",
    "timedispatch": "2025-12-21 23:00:48",
    "cADNumber": "CAD25-049734",
    "dispatchRunNumber": "CAD25-049734",
    "dispatchNotes": "EVENT ENTRY INITIATED AT 12\/21\/2025 23:00:34.222\nAGENCY EVENT ID 'CAD25-049734' ISSUED\nNEW EVENT SUBMITTED FOR DISPATCH GROUP 'WCSO'\nPENDING EVENT NOTIFICATION FOR GROUP WCSO RECEIVED AT STATION-2\nPENDING EVENT NOTIFICATION FOR GROUP WCSO RECEIVED AT WC911-17\nPENDING EVENT NOTIFICATION FOR GROUP WCSO RECEIVED AT WC-911-25\nEPAGE: CHRISTY.FULCHER\nSTATION PRE-TONE SENT TO: DFD\nSTATION DISPATCH RESPONSE SENT TO: DFD\nDISPATCHING UNIT 'DE1' FROM PD BEAT DFD - TONE SENT\nRIP & RUN REPORT SENT TO: DFD\nADDED REPORT $DFD25-000302 FOR UNIT DE1 (AUTO GENERATED)\nEPAGE: IAMRESPONDING-DFD",
    "incidentTypeValue1": "PROPERTY CHECK",
    "cADVehicleID": "DE1",
    "timeonscene": null,
    "locationCoordinates": "36.341705632014,-88.93529034179"
}
[2025-12-26 17:28:39] [INFO] Number of extracted fields: 17
[2025-12-26 17:28:39] [INFO] MULTI-AGENCY: No cADAgencyIdentifier found in extracted data
[2025-12-26 17:28:39] [INFO] Multi-agency routing check: CAD Agency ID raw = 'NULL', Parsed IDs = [], Non-empty count = 0, Total agency count = 0, Assigned Agencies count = 1
[2025-12-26 17:28:39] [WARNING] WARNING: Multi-agency mailbox (1 agencies) received dispatch WITHOUT cADAgencyIdentifier. This dispatch will use mailbox default agency. Check XML field mapping for cADAgencyIdentifier.
[2025-12-26 17:28:39] [INFO] Single-agency mode: Using mailbox saasclientId: 653ad9b50d6738006
[2025-12-26 17:28:39] [INFO] Final routing: saasclientId = 653ad9b50d6738006, dispatchStationsIds = ["657eac8334fb835a4"], matchedAgencyIndex = 0
[2025-12-26 17:28:39] [INFO] === DISPATCH DATA THAT WOULD BE CREATED ===
[2025-12-26 17:28:39] [INFO] {
    "assignedUserId": 1,
    "source": "FTP",
    "status": "New",
    "saasclientId": "653ad9b50d6738006",
    "receivedFromMailboxId": "66a7b78a47817ab30",
    "dispatchTime": "2025-12-26 17:28:39",
    "dispatchedStationsIds": [
        "657eac8334fb835a4"
    ],
    "fTPFilesId": "TEST_FTP_694ec5c71c666",
    "incidentType": "PROPERTY CHECK",
    "locationCoordinates": "36.341705632014,-88.93529034179",
    "incidentAddressTextVersionStreet": "200 SHADTOWN RD",
    "incidentAddressTextVersionCity": "MARTIN",
    "incidentAddressTextVersionState": "TN",
    "incidentAddressTextVersionPostalCode": 38237,
    "cADNumber": "CAD25-049734",
    "dispatchNotes": "EVENT ENTRY INITIATED AT 12\/21\/2025 23:00:34.222\nAGENCY EVENT ID 'CAD25-049734' ISSUED\nNEW EVENT SUBMITTED FOR DISPATCH GROUP 'WCSO'\nPENDING EVENT NOTIFICATION FOR GROUP WCSO RECEIVED AT STATION-2\nPENDING EVENT NOTIFICATION FOR GROUP WCSO RECEIVED AT WC911-17\nPENDING EVENT NOTIFICATION FOR GROUP WCSO RECEIVED AT WC-911-25\nEPAGE: CHRISTY.FULCHER\nSTATION PRE-TONE SENT TO: DFD\nSTATION DISPATCH RESPONSE SENT TO: DFD\nDISPATCHING UNIT 'DE1' FROM PD BEAT DFD - TONE SENT\nRIP & RUN REPORT SENT TO: DFD\nADDED REPORT $DFD25-000302 FOR UNIT DE1 (AUTO GENERATED)\nEPAGE: IAMRESPONDING-DFD"
}
[2025-12-26 17:28:39] [INFO] MOCK: Would create IncidentTypeMapping: {"cADIncidentType":"PROPERTY CHECK","saasclientId":"653ad9b50d6738006","name":"PROPERTY CHECK"}
[2025-12-26 17:28:39] [INFO] MOCK: Would CREATE new Dispatch record
[2025-12-26 17:28:39] [INFO] === TEST COMPLETED SUCCESSFULLY ===
[2025-12-26 18:13:15] [INFO] === STARTING MULTI-AGENCY ROUTING TEST ===
[2025-12-26 18:13:15] [INFO] Using Mailbox ID: 69320e6a9e3e5ef71
[2025-12-26 18:13:15] [INFO] Connected to real API: https://stationboss.net/login
[2025-12-26 18:13:15] [INFO] File size: 35818 bytes
[2025-12-26 18:13:15] [INFO] Loaded real mailbox: N/A
[2025-12-26 18:13:15] [INFO] Mailbox default saasclientId: 663145d0ca7ec1c20
[2025-12-26 18:13:15] [INFO] Mailbox assigned agencies: ["663145d0ca7ec1c20"]
[2025-12-26 18:13:15] [INFO] Mailbox dispatch stations: ["681cb07b7cb5bcf9d","681cb0589b40e5b54"]
[2025-12-26 18:13:15] [INFO] MOCK: Would create FTPFiles record with ID: TEST_FTP_694ed03b6a113
[2025-12-26 18:13:15] [ERROR] Test failed: Failed to decode parsing rules JSON
[2025-12-26 18:13:15] [INFO] Error at: /home/dodom2/public_html/ftp.stationboss.net/ftp_process_upload_test.php:1558
[2025-12-26 18:17:09] [INFO] === STARTING MULTI-AGENCY ROUTING TEST ===
[2025-12-26 18:17:09] [INFO] Using Mailbox ID: 68f1466aed072ad4a
[2025-12-26 18:17:09] [INFO] Connected to real API: https://stationboss.net/login
[2025-12-26 18:17:09] [INFO] File size: 4979 bytes
[2025-12-26 18:17:09] [INFO] Loaded real mailbox: N/A
[2025-12-26 18:17:09] [INFO] Mailbox default saasclientId: 68eeb686225c40db4
[2025-12-26 18:17:09] [INFO] Mailbox assigned agencies: ["68eeb686225c40db4","68e67aaba2bb4565e","68d1820f7ad4dadbd","68910627445d6e167"]
[2025-12-26 18:17:09] [INFO] Mailbox dispatch stations: ["68ffbebde83509b7c","68ffd433577d1ee1e","68ffbe83793eb4521","68eef9302d19f85fc","68ffbe45d3567d442","68ffbe0e8c5fa650f","68eef77e6a5b1e9d6","68ffbde067a9b162c","68ffbda5d8ebd5468","68ffbd6b1db8d8daa","68ffbd4220b20a872","68ffbcfb8b8911e4e","68eef6ffc8105af4e","68eeca5d553dc8756","68d1884332e5f169b","68ffe49c256b67300","68922bda7fe89f7ff"]
[2025-12-26 18:17:09] [INFO] MOCK: Would create FTPFiles record with ID: TEST_FTP_694ed12540683
[2025-12-26 18:17:09] [INFO] About to extract fields from XML. File size: 4979 bytes
[2025-12-26 18:17:09] [INFO] Number of mappings: 28
[2025-12-26 18:17:09] [INFO] Starting XML parsing. Content length: 4979
[2025-12-26 18:17:09] [INFO] XML parsed successfully. Root element: CADExport
[2025-12-26 18:17:09] [INFO] Processing 28 field mappings
[2025-12-26 18:17:09] [INFO] Mapping #1: Extracting 'EventDetails.AgencyCode' => 'cADAgencyIdentifier'
[2025-12-26 18:17:09] [INFO]   -> Found value: PCFD
[2025-12-26 18:17:09] [INFO]   -> Set field 'cADAgencyIdentifier' = "PCFD"
[2025-12-26 18:17:09] [INFO] Mapping #2: Extracting 'EventDetails.ReportNumber' => ["incidentInternalId","dispatchRunNumber"]
[2025-12-26 18:17:09] [INFO]   -> Found value: 2025003172
[2025-12-26 18:17:09] [INFO]   -> Set field 'incidentInternalId' = "2025003172"
[2025-12-26 18:17:09] [INFO]   -> Set field 'dispatchRunNumber' = "2025003172"
[2025-12-26 18:17:09] [INFO] Mapping #3: Extracting 'EventDetails.NatureDescription' => 'incidentTypeValue1'
[2025-12-26 18:17:09] [INFO]   -> Found value: FIRE INVESTIGATION
[2025-12-26 18:17:09] [INFO]   -> Set field 'incidentTypeValue1' = "FIRE INVESTIGATION"
[2025-12-26 18:17:09] [INFO] Mapping #4: Extracting 'EventDetails.StreetNumber' => 'incidentLocationStreetNumber'
[2025-12-26 18:17:09] [INFO]   -> Found value: 3445
[2025-12-26 18:17:09] [INFO]   -> Set field 'incidentLocationStreetNumber' = 3445
[2025-12-26 18:17:09] [INFO] Mapping #5: Extracting 'EventDetails.State' => 'incidentLocationStateName'
[2025-12-26 18:17:09] [INFO]   -> Found value: TN
[2025-12-26 18:17:09] [INFO]   -> Set field 'incidentLocationStateName' = "TN"
[2025-12-26 18:17:09] [INFO] Mapping #6: Extracting 'EventDetails.ZipCode' => 'nERISIncidentPostalCode'
[2025-12-26 18:17:09] [INFO]   -> Found value: 38506
[2025-12-26 18:17:09] [INFO]   -> Set field 'nERISIncidentPostalCode' = 38506
[2025-12-26 18:17:09] [INFO] Mapping #7: Extracting 'EventDetails.SiteName' => 'businessName'
[2025-12-26 18:17:09] [INFO]   -> No value found (null or empty)
[2025-12-26 18:17:09] [INFO] Mapping #8: Extracting 'EventDetails.ApartmentSuite' => 'incidentLocationApt'
[2025-12-26 18:17:09] [INFO]   -> No value found (null or empty)
[2025-12-26 18:17:09] [INFO] Mapping #9: Extracting 'EventDetails.EventLatitude' => 'nERISIncidentLatitude'
[2025-12-26 18:17:09] [INFO]   -> Found value: 36.24345
[2025-12-26 18:17:09] [INFO]   -> Set field 'nERISIncidentLatitude' = 36.24345000000000283080225926823914051055908203125
[2025-12-26 18:17:09] [INFO] Mapping #10: Extracting 'EventDetails.EventLongitude' => 'nERISIncidentLongitude'
[2025-12-26 18:17:09] [INFO]   -> Found value: -85.45659
[2025-12-26 18:17:09] [INFO]   -> Set field 'nERISIncidentLongitude' = -85.456590000000005602487362921237945556640625
[2025-12-26 18:17:09] [INFO] Mapping #11: Extracting 'EventDetails.EventStartTime' => 'alarm'
[2025-12-26 18:17:09] [INFO]   -> Found value: 2025-12-26 12:01:44
[2025-12-26 18:17:09] [INFO]   -> Set field 'alarm' = "2025-12-26 12:01:44"
[2025-12-26 18:17:09] [INFO] Mapping #12: Extracting 'EventDetails.FirstDispatchTime' => 'dispatched'
[2025-12-26 18:17:09] [INFO]   -> Found value: 2025-12-26 12:04:04
[2025-12-26 18:17:09] [INFO]   -> Set field 'dispatched' = "2025-12-26 12:04:04"
[2025-12-26 18:17:09] [INFO] Mapping #13: Extracting 'EventDetails.FirstEnrouteTime' => 'enroute'
[2025-12-26 18:17:09] [INFO]   -> No value found (null or empty)
[2025-12-26 18:17:09] [INFO] Mapping #14: Extracting 'EventDetails.FirstOnSceneTime' => 'onScene'
[2025-12-26 18:17:09] [INFO]   -> No value found (null or empty)
[2025-12-26 18:17:09] [INFO] Mapping #15: Extracting 'EventDetails.LastUnitClearTime' => ["cleared","inService"]
[2025-12-26 18:17:09] [INFO]   -> No value found (null or empty)
[2025-12-26 18:17:09] [INFO] Mapping #16: Extracting 'EventDetails.CrossStreets' => 'incidentLocationCross'
[2025-12-26 18:17:09] [INFO]   -> Found value: PARAN RD/BEAR CREEK LN
[2025-12-26 18:17:09] [INFO]   -> Set field 'incidentLocationCross' = "PARAN RD\/BEAR CREEK LN"
[2025-12-26 18:17:09] [INFO] Mapping #17: Extracting 'EventUnits.Unit[0].UnitCode' => 'cADVehicleID'
[2025-12-26 18:17:09] [INFO]   -> Found value: TK12
[2025-12-26 18:17:09] [INFO]   -> Set field 'cADVehicleID' = "TK12"
[2025-12-26 18:17:09] [INFO] Mapping #18: Extracting 'EventUnits.Unit[0].DispatchTime' => 'timedispatch'
[2025-12-26 18:17:09] [INFO]   -> Found value: 2025-12-26 12:04:04
[2025-12-26 18:17:09] [INFO]   -> Set field 'timedispatch' = "2025-12-26 12:04:04"
[2025-12-26 18:17:09] [INFO] Mapping #19: Extracting 'EventUnits.Unit[0].EnRouteTime' => 'timeenroutetoscene'
[2025-12-26 18:17:09] [INFO]   -> No value found (null or empty)
[2025-12-26 18:17:09] [INFO] Mapping #20: Extracting 'EventUnits.Unit[0].ArriveTime' => 'timeonscene'
[2025-12-26 18:17:09] [INFO]   -> No value found (null or empty)
[2025-12-26 18:17:09] [INFO] Mapping #21: Extracting 'EventUnits.Unit[0].ReturnToServiceTime' => 'timeunitclear'
[2025-12-26 18:17:09] [INFO]   -> No value found (null or empty)
[2025-12-26 18:17:09] [INFO] Mapping #22: Extracting 'EventUnits.Unit[0].CancelTime' => 'timecanceledenroute'
[2025-12-26 18:17:09] [INFO]   -> No value found (null or empty)
[2025-12-26 18:17:09] [INFO] Mapping #23: Extracting 'EventDetails.CadInciNumber' => 'policeReportNumber'
[2025-12-26 18:17:09] [INFO]   -> Found value: 20250141441
[2025-12-26 18:17:09] [INFO]   -> Set field 'policeReportNumber' = "20250141441"
[2025-12-26 18:17:09] [INFO] Mapping #24: Extracting 'EventDetails.CadNotes' => ["dispatchNotes","cADLog"]
[2025-12-26 18:17:09] [INFO]   -> Found value: THE DEAD TREE IS FARTHER AWAY FROM THE BRUSH PILE AND IS CONCERNED ABOUT IT SMOKING  STATES HE IS UN...
[2025-12-26 18:17:09] [INFO]   -> Set field 'dispatchNotes' = "THE DEAD TREE IS FARTHER AWAY FROM THE BRUSH PILE AND IS CONCERNED ABOUT IT SMOKING  STATES HE IS UNSURE HOW IT STARTED AND WOULD LIKE TO MAKE SURE IT DOESN`T SPREAK  [12\/26\/25 12:04:01 KHILL] DOES HAVE A BRUSH PILE BURNING WITH A PERMIT AND HAS GOTTEN A DEAD TREE SMOKING  [12\/26\/25 12:03:05 KHILL]"
[2025-12-26 18:17:09] [INFO]   -> Set field 'cADLog' = "THE DEAD TREE IS FARTHER AWAY FROM THE BRUSH PILE AND IS CONCERNED ABOUT IT SMOKING  STATES HE IS UNSURE HOW IT STARTED AND WOULD LIKE TO MAKE SURE IT DOESN`T SPREAK  [12\/26\/25 12:04:01 KHILL] DOES HAVE A BRUSH PILE BURNING WITH A PERMIT AND HAS GOTTEN A DEAD TREE SMOKING  [12\/26\/25 12:03:05 KHILL]"
[2025-12-26 18:17:09] [INFO] Mapping #25: Extracting 'EventDetails.CityCodeDescription' => 'incidentLocationCity'
[2025-12-26 18:17:09] [INFO]   -> Found value: COOKEVILLE
[2025-12-26 18:17:09] [INFO]   -> Set field 'incidentLocationCity' = "COOKEVILLE"
[2025-12-26 18:17:09] [INFO] Mapping #26: Extracting 'EventDetails.StreetName' => 'streetName'
[2025-12-26 18:17:09] [INFO]   -> Found value: J ROBINSON
[2025-12-26 18:17:09] [INFO]   -> Set field 'streetName' = "J ROBINSON"
[2025-12-26 18:17:09] [INFO] Mapping #27: Extracting 'EventDetails.StreetType' => 'streetType'
[2025-12-26 18:17:09] [INFO]   -> Found value: RD
[2025-12-26 18:17:09] [INFO]   -> Set field 'streetType' = "RD"
[2025-12-26 18:17:09] [INFO] Mapping #28: Extracting 'EventDetails.FullAddress' => 'incidentAddressTextVersionStreet'
[2025-12-26 18:17:09] [INFO]   -> Found value: 3445 W J ROBINSON RD
[2025-12-26 18:17:09] [INFO]   -> Set field 'incidentAddressTextVersionStreet' = "3445 W J ROBINSON RD"
[2025-12-26 18:17:09] [INFO] Finished extracting fields. Total fields extracted: 21
[2025-12-26 18:17:09] [INFO] Concatenating street name and type
[2025-12-26 18:17:09] [INFO]   -> Combined street name: J ROBINSON RD
[2025-12-26 18:17:09] [INFO] Built locationCoordinates from lat/lng: 36.24345,-85.45659
[2025-12-26 18:17:09] [INFO] Extracted data: {
    "cADAgencyIdentifier": "PCFD",
    "incidentInternalId": "2025003172",
    "dispatchRunNumber": "2025003172",
    "incidentTypeValue1": "FIRE INVESTIGATION",
    "incidentLocationStreetNumber": 3445,
    "incidentLocationStateName": "TN",
    "nERISIncidentPostalCode": 38506,
    "nERISIncidentLatitude": 36.24345000000000283080225926823914051055908203125,
    "nERISIncidentLongitude": -85.456590000000005602487362921237945556640625,
    "alarm": "2025-12-26 12:01:44",
    "dispatched": "2025-12-26 12:04:04",
    "incidentLocationCross": "PARAN RD\/BEAR CREEK LN",
    "cADVehicleID": "TK12",
    "timedispatch": "2025-12-26 12:04:04",
    "policeReportNumber": "20250141441",
    "dispatchNotes": "THE DEAD TREE IS FARTHER AWAY FROM THE BRUSH PILE AND IS CONCERNED ABOUT IT SMOKING  STATES HE IS UNSURE HOW IT STARTED AND WOULD LIKE TO MAKE SURE IT DOESN`T SPREAK  [12\/26\/25 12:04:01 KHILL] DOES HAVE A BRUSH PILE BURNING WITH A PERMIT AND HAS GOTTEN A DEAD TREE SMOKING  [12\/26\/25 12:03:05 KHILL]",
    "cADLog": "THE DEAD TREE IS FARTHER AWAY FROM THE BRUSH PILE AND IS CONCERNED ABOUT IT SMOKING  STATES HE IS UNSURE HOW IT STARTED AND WOULD LIKE TO MAKE SURE IT DOESN`T SPREAK  [12\/26\/25 12:04:01 KHILL] DOES HAVE A BRUSH PILE BURNING WITH A PERMIT AND HAS GOTTEN A DEAD TREE SMOKING  [12\/26\/25 12:03:05 KHILL]",
    "incidentLocationCity": "COOKEVILLE",
    "streetName": "J ROBINSON RD",
    "incidentAddressTextVersionStreet": "3445 W J ROBINSON RD",
    "locationCoordinates": "36.24345,-85.45659"
}
[2025-12-26 18:17:09] [INFO] Number of extracted fields: 21
[2025-12-26 18:17:09] [INFO] MULTI-AGENCY: Extracted cADAgencyIdentifier = 'PCFD'
[2025-12-26 18:17:09] [INFO] Multi-agency routing check: CAD Agency ID raw = 'PCFD', Parsed IDs = ["PCFD"], Non-empty count = 1, Total agency count = 1, Assigned Agencies count = 4
[2025-12-26 18:17:09] [INFO] Multi-agency mode detected. Checking AgencyCode values in order: ["PCFD"]
[2025-12-26 18:17:09] [INFO] Attempting SAASClient lookup for AgencyCode 'PCFD' (index 0) within mailbox's assigned agencies
[2025-12-26 18:17:09] [INFO] SUCCESS: Routed to agency 'Putnam County Fire Department' (ID: 68eeb686225c40db4) at INDEX 0 based on AgencyCode 'PCFD'
[2025-12-26 18:17:09] [INFO] Fetched 14 stations from Stations module for agency 'Putnam County Fire Department': ["68ffbebde83509b7c","68ffd433577d1ee1e","68ffbe83793eb4521","68eef9302d19f85fc","68ffbe45d3567d442","68ffbe0e8c5fa650f","68eef77e6a5b1e9d6","68ffbde067a9b162c","68ffbda5d8ebd5468","68ffbd6b1db8d8daa","68ffbd4220b20a872","68ffbcfb8b8911e4e","68eef6ffc8105af4e","68eeca5d553dc8756"]
[2025-12-26 18:17:09] [INFO] Final routing: saasclientId = 68eeb686225c40db4, dispatchStationsIds = ["68ffbebde83509b7c","68ffd433577d1ee1e","68ffbe83793eb4521","68eef9302d19f85fc","68ffbe45d3567d442","68ffbe0e8c5fa650f","68eef77e6a5b1e9d6","68ffbde067a9b162c","68ffbda5d8ebd5468","68ffbd6b1db8d8daa","68ffbd4220b20a872","68ffbcfb8b8911e4e","68eef6ffc8105af4e","68eeca5d553dc8756"], matchedAgencyIndex = 0
[2025-12-26 18:17:09] [INFO] === DISPATCH DATA THAT WOULD BE CREATED ===
[2025-12-26 18:17:09] [INFO] {
    "assignedUserId": 1,
    "source": "FTP",
    "status": "New",
    "saasclientId": "68eeb686225c40db4",
    "receivedFromMailboxId": "68f1466aed072ad4a",
    "dispatchTime": "2025-12-26 18:17:09",
    "dispatchedStationsIds": [
        "68ffbebde83509b7c",
        "68ffd433577d1ee1e",
        "68ffbe83793eb4521",
        "68eef9302d19f85fc",
        "68ffbe45d3567d442",
        "68ffbe0e8c5fa650f",
        "68eef77e6a5b1e9d6",
        "68ffbde067a9b162c",
        "68ffbda5d8ebd5468",
        "68ffbd6b1db8d8daa",
        "68ffbd4220b20a872",
        "68ffbcfb8b8911e4e",
        "68eef6ffc8105af4e",
        "68eeca5d553dc8756"
    ],
    "fTPFilesId": "TEST_FTP_694ed12540683",
    "incidentType": "FIRE INVESTIGATION",
    "locationCoordinates": "36.24345,-85.45659",
    "incidentAddressTextVersionStreet": "3445 J ROBINSON RD",
    "incidentAddressTextVersionCity": "COOKEVILLE",
    "incidentAddressTextVersionState": "TN",
    "incidentAddressTextVersionPostalCode": 38506,
    "cADNumber": "2025003172",
    "dispatchNotes": "THE DEAD TREE IS FARTHER AWAY FROM THE BRUSH PILE AND IS CONCERNED ABOUT IT SMOKING  STATES HE IS UNSURE HOW IT STARTED AND WOULD LIKE TO MAKE SURE IT DOESN`T SPREAK  [12\/26\/25 12:04:01 KHILL] DOES HAVE A BRUSH PILE BURNING WITH A PERMIT AND HAS GOTTEN A DEAD TREE SMOKING  [12\/26\/25 12:03:05 KHILL]"
}
[2025-12-26 18:17:09] [INFO] IncidentTypeMapping already exists: 693fd3603dbcab356
[2025-12-26 18:17:09] [INFO] MOCK: Would UPDATE existing Dispatch record ID: 694ece1e1ea691b22
[2025-12-26 18:17:09] [INFO] === TEST COMPLETED SUCCESSFULLY ===
[2025-12-26 19:57:42] [INFO] === STARTING MULTI-AGENCY ROUTING TEST ===
[2025-12-26 19:57:42] [INFO] Using Mailbox ID: 68f1466aed072ad4a
[2025-12-26 19:57:42] [INFO] Connected to real API: https://stationboss.net/login
[2025-12-26 19:57:42] [INFO] File size: 4979 bytes
[2025-12-26 19:57:43] [INFO] Loaded real mailbox: N/A
[2025-12-26 19:57:43] [INFO] Mailbox default saasclientId: 68eeb686225c40db4
[2025-12-26 19:57:43] [INFO] Mailbox assigned agencies: ["68eeb686225c40db4","68e67aaba2bb4565e","68d1820f7ad4dadbd","68910627445d6e167"]
[2025-12-26 19:57:43] [INFO] Mailbox dispatch stations: ["68ffbebde83509b7c","68ffd433577d1ee1e","68ffbe83793eb4521","68eef9302d19f85fc","68ffbe45d3567d442","68ffbe0e8c5fa650f","68eef77e6a5b1e9d6","68ffbde067a9b162c","68ffbda5d8ebd5468","68ffbd6b1db8d8daa","68ffbd4220b20a872","68ffbcfb8b8911e4e","68eef6ffc8105af4e","68eeca5d553dc8756","68d1884332e5f169b","68ffe49c256b67300","68922bda7fe89f7ff"]
[2025-12-26 19:57:43] [INFO] MOCK: Would create FTPFiles record with ID: TEST_FTP_694ee8b71473d
[2025-12-26 19:57:43] [INFO] About to extract fields from XML. File size: 4979 bytes
[2025-12-26 19:57:43] [INFO] Number of mappings: 28
[2025-12-26 19:57:43] [INFO] Starting XML parsing. Content length: 4979
[2025-12-26 19:57:43] [INFO] XML parsed successfully. Root element: CADExport
[2025-12-26 19:57:43] [INFO] Processing 28 field mappings
[2025-12-26 19:57:43] [INFO] Mapping #1: Extracting 'EventDetails.AgencyCode' => 'cADAgencyIdentifier'
[2025-12-26 19:57:43] [INFO]   -> Found value: PCFD
[2025-12-26 19:57:43] [INFO]   -> Set field 'cADAgencyIdentifier' = "PCFD"
[2025-12-26 19:57:43] [INFO] Mapping #2: Extracting 'EventDetails.ReportNumber' => ["incidentInternalId","dispatchRunNumber"]
[2025-12-26 19:57:43] [INFO]   -> Found value: 2025003172
[2025-12-26 19:57:43] [INFO]   -> Set field 'incidentInternalId' = "2025003172"
[2025-12-26 19:57:43] [INFO]   -> Set field 'dispatchRunNumber' = "2025003172"
[2025-12-26 19:57:43] [INFO] Mapping #3: Extracting 'EventDetails.NatureDescription' => 'incidentTypeValue1'
[2025-12-26 19:57:43] [INFO]   -> Found value: FIRE INVESTIGATION
[2025-12-26 19:57:43] [INFO]   -> Set field 'incidentTypeValue1' = "FIRE INVESTIGATION"
[2025-12-26 19:57:43] [INFO] Mapping #4: Extracting 'EventDetails.StreetNumber' => 'incidentLocationStreetNumber'
[2025-12-26 19:57:43] [INFO]   -> Found value: 3445
[2025-12-26 19:57:43] [INFO]   -> Set field 'incidentLocationStreetNumber' = 3445
[2025-12-26 19:57:43] [INFO] Mapping #5: Extracting 'EventDetails.State' => 'incidentLocationStateName'
[2025-12-26 19:57:43] [INFO]   -> Found value: TN
[2025-12-26 19:57:43] [INFO]   -> Set field 'incidentLocationStateName' = "TN"
[2025-12-26 19:57:43] [INFO] Mapping #6: Extracting 'EventDetails.ZipCode' => 'nERISIncidentPostalCode'
[2025-12-26 19:57:43] [INFO]   -> Found value: 38506
[2025-12-26 19:57:43] [INFO]   -> Set field 'nERISIncidentPostalCode' = 38506
[2025-12-26 19:57:43] [INFO] Mapping #7: Extracting 'EventDetails.SiteName' => 'businessName'
[2025-12-26 19:57:43] [INFO]   -> No value found (null or empty)
[2025-12-26 19:57:43] [INFO] Mapping #8: Extracting 'EventDetails.ApartmentSuite' => 'incidentLocationApt'
[2025-12-26 19:57:43] [INFO]   -> No value found (null or empty)
[2025-12-26 19:57:43] [INFO] Mapping #9: Extracting 'EventDetails.EventLatitude' => 'nERISIncidentLatitude'
[2025-12-26 19:57:43] [INFO]   -> Found value: 36.24345
[2025-12-26 19:57:43] [INFO]   -> Set field 'nERISIncidentLatitude' = 36.24345000000000283080225926823914051055908203125
[2025-12-26 19:57:43] [INFO] Mapping #10: Extracting 'EventDetails.EventLongitude' => 'nERISIncidentLongitude'
[2025-12-26 19:57:43] [INFO]   -> Found value: -85.45659
[2025-12-26 19:57:43] [INFO]   -> Set field 'nERISIncidentLongitude' = -85.456590000000005602487362921237945556640625
[2025-12-26 19:57:43] [INFO] Mapping #11: Extracting 'EventDetails.EventStartTime' => 'alarm'
[2025-12-26 19:57:43] [INFO]   -> Found value: 2025-12-26 12:01:44
[2025-12-26 19:57:43] [INFO]   -> Set field 'alarm' = "2025-12-26 12:01:44"
[2025-12-26 19:57:43] [INFO] Mapping #12: Extracting 'EventDetails.FirstDispatchTime' => 'dispatched'
[2025-12-26 19:57:43] [INFO]   -> Found value: 2025-12-26 12:04:04
[2025-12-26 19:57:43] [INFO]   -> Set field 'dispatched' = "2025-12-26 12:04:04"
[2025-12-26 19:57:43] [INFO] Mapping #13: Extracting 'EventDetails.FirstEnrouteTime' => 'enroute'
[2025-12-26 19:57:43] [INFO]   -> No value found (null or empty)
[2025-12-26 19:57:43] [INFO] Mapping #14: Extracting 'EventDetails.FirstOnSceneTime' => 'onScene'
[2025-12-26 19:57:43] [INFO]   -> No value found (null or empty)
[2025-12-26 19:57:43] [INFO] Mapping #15: Extracting 'EventDetails.LastUnitClearTime' => ["cleared","inService"]
[2025-12-26 19:57:43] [INFO]   -> No value found (null or empty)
[2025-12-26 19:57:43] [INFO] Mapping #16: Extracting 'EventDetails.CrossStreets' => 'incidentLocationCross'
[2025-12-26 19:57:43] [INFO]   -> Found value: PARAN RD/BEAR CREEK LN
[2025-12-26 19:57:43] [INFO]   -> Set field 'incidentLocationCross' = "PARAN RD\/BEAR CREEK LN"
[2025-12-26 19:57:43] [INFO] Mapping #17: Extracting 'EventUnits.Unit[0].UnitCode' => 'cADVehicleID'
[2025-12-26 19:57:43] [INFO]   -> Found value: TK12
[2025-12-26 19:57:43] [INFO]   -> Set field 'cADVehicleID' = "TK12"
[2025-12-26 19:57:43] [INFO] Mapping #18: Extracting 'EventUnits.Unit[0].DispatchTime' => 'timedispatch'
[2025-12-26 19:57:43] [INFO]   -> Found value: 2025-12-26 12:04:04
[2025-12-26 19:57:43] [INFO]   -> Set field 'timedispatch' = "2025-12-26 12:04:04"
[2025-12-26 19:57:43] [INFO] Mapping #19: Extracting 'EventUnits.Unit[0].EnRouteTime' => 'timeenroutetoscene'
[2025-12-26 19:57:43] [INFO]   -> No value found (null or empty)
[2025-12-26 19:57:43] [INFO] Mapping #20: Extracting 'EventUnits.Unit[0].ArriveTime' => 'timeonscene'
[2025-12-26 19:57:43] [INFO]   -> No value found (null or empty)
[2025-12-26 19:57:43] [INFO] Mapping #21: Extracting 'EventUnits.Unit[0].ReturnToServiceTime' => 'timeunitclear'
[2025-12-26 19:57:43] [INFO]   -> No value found (null or empty)
[2025-12-26 19:57:43] [INFO] Mapping #22: Extracting 'EventUnits.Unit[0].CancelTime' => 'timecanceledenroute'
[2025-12-26 19:57:43] [INFO]   -> No value found (null or empty)
[2025-12-26 19:57:43] [INFO] Mapping #23: Extracting 'EventDetails.CadInciNumber' => 'policeReportNumber'
[2025-12-26 19:57:43] [INFO]   -> Found value: 20250141441
[2025-12-26 19:57:43] [INFO]   -> Set field 'policeReportNumber' = "20250141441"
[2025-12-26 19:57:43] [INFO] Mapping #24: Extracting 'EventDetails.CadNotes' => ["dispatchNotes","cADLog"]
[2025-12-26 19:57:43] [INFO]   -> Found value: THE DEAD TREE IS FARTHER AWAY FROM THE BRUSH PILE AND IS CONCERNED ABOUT IT SMOKING  STATES HE IS UN...
[2025-12-26 19:57:43] [INFO]   -> Set field 'dispatchNotes' = "THE DEAD TREE IS FARTHER AWAY FROM THE BRUSH PILE AND IS CONCERNED ABOUT IT SMOKING  STATES HE IS UNSURE HOW IT STARTED AND WOULD LIKE TO MAKE SURE IT DOESN`T SPREAK  [12\/26\/25 12:04:01 KHILL] DOES HAVE A BRUSH PILE BURNING WITH A PERMIT AND HAS GOTTEN A DEAD TREE SMOKING  [12\/26\/25 12:03:05 KHILL]"
[2025-12-26 19:57:43] [INFO]   -> Set field 'cADLog' = "THE DEAD TREE IS FARTHER AWAY FROM THE BRUSH PILE AND IS CONCERNED ABOUT IT SMOKING  STATES HE IS UNSURE HOW IT STARTED AND WOULD LIKE TO MAKE SURE IT DOESN`T SPREAK  [12\/26\/25 12:04:01 KHILL] DOES HAVE A BRUSH PILE BURNING WITH A PERMIT AND HAS GOTTEN A DEAD TREE SMOKING  [12\/26\/25 12:03:05 KHILL]"
[2025-12-26 19:57:43] [INFO] Mapping #25: Extracting 'EventDetails.CityCodeDescription' => 'incidentLocationCity'
[2025-12-26 19:57:43] [INFO]   -> Found value: COOKEVILLE
[2025-12-26 19:57:43] [INFO]   -> Set field 'incidentLocationCity' = "COOKEVILLE"
[2025-12-26 19:57:43] [INFO] Mapping #26: Extracting 'EventDetails.StreetName' => 'streetName'
[2025-12-26 19:57:43] [INFO]   -> Found value: J ROBINSON
[2025-12-26 19:57:43] [INFO]   -> Set field 'streetName' = "J ROBINSON"
[2025-12-26 19:57:43] [INFO] Mapping #27: Extracting 'EventDetails.StreetType' => 'streetType'
[2025-12-26 19:57:43] [INFO]   -> Found value: RD
[2025-12-26 19:57:43] [INFO]   -> Set field 'streetType' = "RD"
[2025-12-26 19:57:43] [INFO] Mapping #28: Extracting 'EventDetails.FullAddress' => 'incidentAddressTextVersionStreet'
[2025-12-26 19:57:43] [INFO]   -> Found value: 3445 W J ROBINSON RD
[2025-12-26 19:57:43] [INFO]   -> Set field 'incidentAddressTextVersionStreet' = "3445 W J ROBINSON RD"
[2025-12-26 19:57:43] [INFO] Finished extracting fields. Total fields extracted: 21
[2025-12-26 19:57:43] [INFO] Concatenating street name and type
[2025-12-26 19:57:43] [INFO]   -> Combined street name: J ROBINSON RD
[2025-12-26 19:57:43] [INFO] Built locationCoordinates from lat/lng: 36.24345,-85.45659
[2025-12-26 19:57:43] [INFO] Extracted data: {
    "cADAgencyIdentifier": "PCFD",
    "incidentInternalId": "2025003172",
    "dispatchRunNumber": "2025003172",
    "incidentTypeValue1": "FIRE INVESTIGATION",
    "incidentLocationStreetNumber": 3445,
    "incidentLocationStateName": "TN",
    "nERISIncidentPostalCode": 38506,
    "nERISIncidentLatitude": 36.24345000000000283080225926823914051055908203125,
    "nERISIncidentLongitude": -85.456590000000005602487362921237945556640625,
    "alarm": "2025-12-26 12:01:44",
    "dispatched": "2025-12-26 12:04:04",
    "incidentLocationCross": "PARAN RD\/BEAR CREEK LN",
    "cADVehicleID": "TK12",
    "timedispatch": "2025-12-26 12:04:04",
    "policeReportNumber": "20250141441",
    "dispatchNotes": "THE DEAD TREE IS FARTHER AWAY FROM THE BRUSH PILE AND IS CONCERNED ABOUT IT SMOKING  STATES HE IS UNSURE HOW IT STARTED AND WOULD LIKE TO MAKE SURE IT DOESN`T SPREAK  [12\/26\/25 12:04:01 KHILL] DOES HAVE A BRUSH PILE BURNING WITH A PERMIT AND HAS GOTTEN A DEAD TREE SMOKING  [12\/26\/25 12:03:05 KHILL]",
    "cADLog": "THE DEAD TREE IS FARTHER AWAY FROM THE BRUSH PILE AND IS CONCERNED ABOUT IT SMOKING  STATES HE IS UNSURE HOW IT STARTED AND WOULD LIKE TO MAKE SURE IT DOESN`T SPREAK  [12\/26\/25 12:04:01 KHILL] DOES HAVE A BRUSH PILE BURNING WITH A PERMIT AND HAS GOTTEN A DEAD TREE SMOKING  [12\/26\/25 12:03:05 KHILL]",
    "incidentLocationCity": "COOKEVILLE",
    "streetName": "J ROBINSON RD",
    "incidentAddressTextVersionStreet": "3445 W J ROBINSON RD",
    "locationCoordinates": "36.24345,-85.45659"
}
[2025-12-26 19:57:43] [INFO] Number of extracted fields: 21
[2025-12-26 19:57:43] [INFO] MULTI-AGENCY: Extracted cADAgencyIdentifier = 'PCFD'
[2025-12-26 19:57:43] [INFO] Multi-agency routing check: CAD Agency ID raw = 'PCFD', Parsed IDs = ["PCFD"], Non-empty count = 1, Total agency count = 1, Assigned Agencies count = 4
[2025-12-26 19:57:43] [INFO] Multi-agency mode detected. Checking AgencyCode values in order: ["PCFD"]
[2025-12-26 19:57:43] [INFO] Attempting SAASClient lookup for AgencyCode 'PCFD' (index 0) within mailbox's assigned agencies
[2025-12-26 19:57:43] [INFO] SUCCESS: Routed to agency 'Putnam County Fire Department' (ID: 68eeb686225c40db4) at INDEX 0 based on AgencyCode 'PCFD'
[2025-12-26 19:57:43] [INFO] Fetched 14 stations from Stations module for agency 'Putnam County Fire Department': ["68ffbebde83509b7c","68ffd433577d1ee1e","68ffbe83793eb4521","68eef9302d19f85fc","68ffbe45d3567d442","68ffbe0e8c5fa650f","68eef77e6a5b1e9d6","68ffbde067a9b162c","68ffbda5d8ebd5468","68ffbd6b1db8d8daa","68ffbd4220b20a872","68ffbcfb8b8911e4e","68eef6ffc8105af4e","68eeca5d553dc8756"]
[2025-12-26 19:57:43] [INFO] Final routing: saasclientId = 68eeb686225c40db4, dispatchStationsIds = ["68ffbebde83509b7c","68ffd433577d1ee1e","68ffbe83793eb4521","68eef9302d19f85fc","68ffbe45d3567d442","68ffbe0e8c5fa650f","68eef77e6a5b1e9d6","68ffbde067a9b162c","68ffbda5d8ebd5468","68ffbd6b1db8d8daa","68ffbd4220b20a872","68ffbcfb8b8911e4e","68eef6ffc8105af4e","68eeca5d553dc8756"], matchedAgencyIndex = 0
[2025-12-26 19:57:43] [INFO] === DISPATCH DATA THAT WOULD BE CREATED ===
[2025-12-26 19:57:43] [INFO] {
    "assignedUserId": 1,
    "source": "FTP",
    "status": "New",
    "saasclientId": "68eeb686225c40db4",
    "receivedFromMailboxId": "68f1466aed072ad4a",
    "dispatchTime": "2025-12-26 19:57:43",
    "dispatchedStationsIds": [
        "68ffbebde83509b7c",
        "68ffd433577d1ee1e",
        "68ffbe83793eb4521",
        "68eef9302d19f85fc",
        "68ffbe45d3567d442",
        "68ffbe0e8c5fa650f",
        "68eef77e6a5b1e9d6",
        "68ffbde067a9b162c",
        "68ffbda5d8ebd5468",
        "68ffbd6b1db8d8daa",
        "68ffbd4220b20a872",
        "68ffbcfb8b8911e4e",
        "68eef6ffc8105af4e",
        "68eeca5d553dc8756"
    ],
    "fTPFilesId": "TEST_FTP_694ee8b71473d",
    "incidentType": "FIRE INVESTIGATION",
    "locationCoordinates": "36.24345,-85.45659",
    "incidentAddressTextVersionStreet": "3445 J ROBINSON RD",
    "incidentAddressTextVersionCity": "COOKEVILLE",
    "incidentAddressTextVersionState": "TN",
    "incidentAddressTextVersionPostalCode": 38506,
    "cADNumber": "2025003172",
    "dispatchNotes": "THE DEAD TREE IS FARTHER AWAY FROM THE BRUSH PILE AND IS CONCERNED ABOUT IT SMOKING  STATES HE IS UNSURE HOW IT STARTED AND WOULD LIKE TO MAKE SURE IT DOESN`T SPREAK  [12\/26\/25 12:04:01 KHILL] DOES HAVE A BRUSH PILE BURNING WITH A PERMIT AND HAS GOTTEN A DEAD TREE SMOKING  [12\/26\/25 12:03:05 KHILL]"
}
[2025-12-26 19:57:43] [INFO] IncidentTypeMapping already exists: 693fd3603dbcab356
[2025-12-26 19:57:44] [INFO] MOCK: Would UPDATE existing Dispatch record ID: 694ece1e1ea691b22
[2025-12-26 19:57:44] [INFO] === TEST COMPLETED SUCCESSFULLY ===
[2025-12-26 23:10:03] [INFO] === STARTING MULTI-AGENCY ROUTING TEST ===
[2025-12-26 23:10:03] [INFO] Using Mailbox ID: 68f1466aed072ad4a
[2025-12-26 23:10:03] [INFO] Connected to real API: https://stationboss.net/login
[2025-12-26 23:10:03] [INFO] File size: 4979 bytes
[2025-12-26 23:10:03] [INFO] Loaded real mailbox: N/A
[2025-12-26 23:10:03] [INFO] Mailbox default saasclientId: 68eeb686225c40db4
[2025-12-26 23:10:03] [INFO] Mailbox assigned agencies: ["68eeb686225c40db4","68e67aaba2bb4565e","68d1820f7ad4dadbd","68910627445d6e167"]
[2025-12-26 23:10:03] [INFO] Mailbox dispatch stations: ["68ffbebde83509b7c","68ffd433577d1ee1e","68ffbe83793eb4521","68eef9302d19f85fc","68ffbe45d3567d442","68ffbe0e8c5fa650f","68eef77e6a5b1e9d6","68ffbde067a9b162c","68ffbda5d8ebd5468","68ffbd6b1db8d8daa","68ffbd4220b20a872","68ffbcfb8b8911e4e","68eef6ffc8105af4e","68eeca5d553dc8756","68d1884332e5f169b","68ffe49c256b67300","68922bda7fe89f7ff"]
[2025-12-26 23:10:03] [INFO] MOCK: Would create FTPFiles record with ID: TEST_FTP_694f15cb3f701
[2025-12-26 23:10:03] [INFO] About to extract fields from XML. File size: 4979 bytes
[2025-12-26 23:10:03] [INFO] Number of mappings: 28
[2025-12-26 23:10:03] [INFO] Starting XML parsing. Content length: 4979
[2025-12-26 23:10:03] [INFO] XML parsed successfully. Root element: CADExport
[2025-12-26 23:10:03] [INFO] Processing 28 field mappings
[2025-12-26 23:10:03] [INFO] Mapping #1: Extracting 'EventDetails.AgencyCode' => 'cADAgencyIdentifier'
[2025-12-26 23:10:03] [INFO]   -> Found value: PCFD
[2025-12-26 23:10:03] [INFO]   -> Set field 'cADAgencyIdentifier' = "PCFD"
[2025-12-26 23:10:03] [INFO] Mapping #2: Extracting 'EventDetails.ReportNumber' => ["incidentInternalId","dispatchRunNumber"]
[2025-12-26 23:10:03] [INFO]   -> Found value: 2025003172
[2025-12-26 23:10:03] [INFO]   -> Set field 'incidentInternalId' = "2025003172"
[2025-12-26 23:10:03] [INFO]   -> Set field 'dispatchRunNumber' = "2025003172"
[2025-12-26 23:10:03] [INFO] Mapping #3: Extracting 'EventDetails.NatureDescription' => 'incidentTypeValue1'
[2025-12-26 23:10:03] [INFO]   -> Found value: FIRE INVESTIGATION
[2025-12-26 23:10:03] [INFO]   -> Set field 'incidentTypeValue1' = "FIRE INVESTIGATION"
[2025-12-26 23:10:03] [INFO] Mapping #4: Extracting 'EventDetails.StreetNumber' => 'incidentLocationStreetNumber'
[2025-12-26 23:10:03] [INFO]   -> Found value: 3445
[2025-12-26 23:10:03] [INFO]   -> Set field 'incidentLocationStreetNumber' = 3445
[2025-12-26 23:10:03] [INFO] Mapping #5: Extracting 'EventDetails.State' => 'incidentLocationStateName'
[2025-12-26 23:10:03] [INFO]   -> Found value: TN
[2025-12-26 23:10:03] [INFO]   -> Set field 'incidentLocationStateName' = "TN"
[2025-12-26 23:10:03] [INFO] Mapping #6: Extracting 'EventDetails.ZipCode' => 'nERISIncidentPostalCode'
[2025-12-26 23:10:03] [INFO]   -> Found value: 38506
[2025-12-26 23:10:03] [INFO]   -> Set field 'nERISIncidentPostalCode' = 38506
[2025-12-26 23:10:03] [INFO] Mapping #7: Extracting 'EventDetails.SiteName' => 'businessName'
[2025-12-26 23:10:03] [INFO]   -> No value found (null or empty)
[2025-12-26 23:10:03] [INFO] Mapping #8: Extracting 'EventDetails.ApartmentSuite' => 'incidentLocationApt'
[2025-12-26 23:10:03] [INFO]   -> No value found (null or empty)
[2025-12-26 23:10:03] [INFO] Mapping #9: Extracting 'EventDetails.EventLatitude' => 'nERISIncidentLatitude'
[2025-12-26 23:10:03] [INFO]   -> Found value: 36.24345
[2025-12-26 23:10:03] [INFO]   -> Set field 'nERISIncidentLatitude' = 36.24345000000000283080225926823914051055908203125
[2025-12-26 23:10:03] [INFO] Mapping #10: Extracting 'EventDetails.EventLongitude' => 'nERISIncidentLongitude'
[2025-12-26 23:10:03] [INFO]   -> Found value: -85.45659
[2025-12-26 23:10:03] [INFO]   -> Set field 'nERISIncidentLongitude' = -85.456590000000005602487362921237945556640625
[2025-12-26 23:10:03] [INFO] Mapping #11: Extracting 'EventDetails.EventStartTime' => 'alarm'
[2025-12-26 23:10:03] [INFO]   -> Found value: 2025-12-26 12:01:44
[2025-12-26 23:10:03] [INFO]   -> Set field 'alarm' = "2025-12-26 12:01:44"
[2025-12-26 23:10:03] [INFO] Mapping #12: Extracting 'EventDetails.FirstDispatchTime' => 'dispatched'
[2025-12-26 23:10:03] [INFO]   -> Found value: 2025-12-26 12:04:04
[2025-12-26 23:10:03] [INFO]   -> Set field 'dispatched' = "2025-12-26 12:04:04"
[2025-12-26 23:10:03] [INFO] Mapping #13: Extracting 'EventDetails.FirstEnrouteTime' => 'enroute'
[2025-12-26 23:10:03] [INFO]   -> No value found (null or empty)
[2025-12-26 23:10:03] [INFO] Mapping #14: Extracting 'EventDetails.FirstOnSceneTime' => 'onScene'
[2025-12-26 23:10:03] [INFO]   -> No value found (null or empty)
[2025-12-26 23:10:03] [INFO] Mapping #15: Extracting 'EventDetails.LastUnitClearTime' => ["cleared","inService"]
[2025-12-26 23:10:03] [INFO]   -> No value found (null or empty)
[2025-12-26 23:10:03] [INFO] Mapping #16: Extracting 'EventDetails.CrossStreets' => 'incidentLocationCross'
[2025-12-26 23:10:03] [INFO]   -> Found value: PARAN RD/BEAR CREEK LN
[2025-12-26 23:10:03] [INFO]   -> Set field 'incidentLocationCross' = "PARAN RD\/BEAR CREEK LN"
[2025-12-26 23:10:03] [INFO] Mapping #17: Extracting 'EventUnits.Unit[0].UnitCode' => 'cADVehicleID'
[2025-12-26 23:10:03] [INFO]   -> Found value: TK12
[2025-12-26 23:10:03] [INFO]   -> Set field 'cADVehicleID' = "TK12"
[2025-12-26 23:10:03] [INFO] Mapping #18: Extracting 'EventUnits.Unit[0].DispatchTime' => 'timedispatch'
[2025-12-26 23:10:03] [INFO]   -> Found value: 2025-12-26 12:04:04
[2025-12-26 23:10:03] [INFO]   -> Set field 'timedispatch' = "2025-12-26 12:04:04"
[2025-12-26 23:10:03] [INFO] Mapping #19: Extracting 'EventUnits.Unit[0].EnRouteTime' => 'timeenroutetoscene'
[2025-12-26 23:10:03] [INFO]   -> No value found (null or empty)
[2025-12-26 23:10:03] [INFO] Mapping #20: Extracting 'EventUnits.Unit[0].ArriveTime' => 'timeonscene'
[2025-12-26 23:10:03] [INFO]   -> No value found (null or empty)
[2025-12-26 23:10:03] [INFO] Mapping #21: Extracting 'EventUnits.Unit[0].ReturnToServiceTime' => 'timeunitclear'
[2025-12-26 23:10:03] [INFO]   -> No value found (null or empty)
[2025-12-26 23:10:03] [INFO] Mapping #22: Extracting 'EventUnits.Unit[0].CancelTime' => 'timecanceledenroute'
[2025-12-26 23:10:03] [INFO]   -> No value found (null or empty)
[2025-12-26 23:10:03] [INFO] Mapping #23: Extracting 'EventDetails.CadInciNumber' => 'policeReportNumber'
[2025-12-26 23:10:03] [INFO]   -> Found value: 20250141441
[2025-12-26 23:10:03] [INFO]   -> Set field 'policeReportNumber' = "20250141441"
[2025-12-26 23:10:03] [INFO] Mapping #24: Extracting 'EventDetails.CadNotes' => ["dispatchNotes","cADLog"]
[2025-12-26 23:10:03] [INFO]   -> Found value: THE DEAD TREE IS FARTHER AWAY FROM THE BRUSH PILE AND IS CONCERNED ABOUT IT SMOKING  STATES HE IS UN...
[2025-12-26 23:10:03] [INFO]   -> Set field 'dispatchNotes' = "THE DEAD TREE IS FARTHER AWAY FROM THE BRUSH PILE AND IS CONCERNED ABOUT IT SMOKING  STATES HE IS UNSURE HOW IT STARTED AND WOULD LIKE TO MAKE SURE IT DOESN`T SPREAK  [12\/26\/25 12:04:01 KHILL] DOES HAVE A BRUSH PILE BURNING WITH A PERMIT AND HAS GOTTEN A DEAD TREE SMOKING  [12\/26\/25 12:03:05 KHILL]"
[2025-12-26 23:10:03] [INFO]   -> Set field 'cADLog' = "THE DEAD TREE IS FARTHER AWAY FROM THE BRUSH PILE AND IS CONCERNED ABOUT IT SMOKING  STATES HE IS UNSURE HOW IT STARTED AND WOULD LIKE TO MAKE SURE IT DOESN`T SPREAK  [12\/26\/25 12:04:01 KHILL] DOES HAVE A BRUSH PILE BURNING WITH A PERMIT AND HAS GOTTEN A DEAD TREE SMOKING  [12\/26\/25 12:03:05 KHILL]"
[2025-12-26 23:10:03] [INFO] Mapping #25: Extracting 'EventDetails.CityCodeDescription' => 'incidentLocationCity'
[2025-12-26 23:10:03] [INFO]   -> Found value: COOKEVILLE
[2025-12-26 23:10:03] [INFO]   -> Set field 'incidentLocationCity' = "COOKEVILLE"
[2025-12-26 23:10:03] [INFO] Mapping #26: Extracting 'EventDetails.StreetName' => 'streetName'
[2025-12-26 23:10:03] [INFO]   -> Found value: J ROBINSON
[2025-12-26 23:10:03] [INFO]   -> Set field 'streetName' = "J ROBINSON"
[2025-12-26 23:10:03] [INFO] Mapping #27: Extracting 'EventDetails.StreetType' => 'streetType'
[2025-12-26 23:10:03] [INFO]   -> Found value: RD
[2025-12-26 23:10:03] [INFO]   -> Set field 'streetType' = "RD"
[2025-12-26 23:10:03] [INFO] Mapping #28: Extracting 'EventDetails.FullAddress' => 'incidentAddressTextVersionStreet'
[2025-12-26 23:10:03] [INFO]   -> Found value: 3445 W J ROBINSON RD
[2025-12-26 23:10:03] [INFO]   -> Set field 'incidentAddressTextVersionStreet' = "3445 W J ROBINSON RD"
[2025-12-26 23:10:03] [INFO] Finished extracting fields. Total fields extracted: 21
[2025-12-26 23:10:03] [INFO] Concatenating street name and type
[2025-12-26 23:10:03] [INFO]   -> Combined street name: J ROBINSON RD
[2025-12-26 23:10:03] [INFO] Built locationCoordinates from lat/lng: 36.24345,-85.45659
[2025-12-26 23:10:03] [INFO] Extracted data: {
    "cADAgencyIdentifier": "PCFD",
    "incidentInternalId": "2025003172",
    "dispatchRunNumber": "2025003172",
    "incidentTypeValue1": "FIRE INVESTIGATION",
    "incidentLocationStreetNumber": 3445,
    "incidentLocationStateName": "TN",
    "nERISIncidentPostalCode": 38506,
    "nERISIncidentLatitude": 36.24345000000000283080225926823914051055908203125,
    "nERISIncidentLongitude": -85.456590000000005602487362921237945556640625,
    "alarm": "2025-12-26 12:01:44",
    "dispatched": "2025-12-26 12:04:04",
    "incidentLocationCross": "PARAN RD\/BEAR CREEK LN",
    "cADVehicleID": "TK12",
    "timedispatch": "2025-12-26 12:04:04",
    "policeReportNumber": "20250141441",
    "dispatchNotes": "THE DEAD TREE IS FARTHER AWAY FROM THE BRUSH PILE AND IS CONCERNED ABOUT IT SMOKING  STATES HE IS UNSURE HOW IT STARTED AND WOULD LIKE TO MAKE SURE IT DOESN`T SPREAK  [12\/26\/25 12:04:01 KHILL] DOES HAVE A BRUSH PILE BURNING WITH A PERMIT AND HAS GOTTEN A DEAD TREE SMOKING  [12\/26\/25 12:03:05 KHILL]",
    "cADLog": "THE DEAD TREE IS FARTHER AWAY FROM THE BRUSH PILE AND IS CONCERNED ABOUT IT SMOKING  STATES HE IS UNSURE HOW IT STARTED AND WOULD LIKE TO MAKE SURE IT DOESN`T SPREAK  [12\/26\/25 12:04:01 KHILL] DOES HAVE A BRUSH PILE BURNING WITH A PERMIT AND HAS GOTTEN A DEAD TREE SMOKING  [12\/26\/25 12:03:05 KHILL]",
    "incidentLocationCity": "COOKEVILLE",
    "streetName": "J ROBINSON RD",
    "incidentAddressTextVersionStreet": "3445 W J ROBINSON RD",
    "locationCoordinates": "36.24345,-85.45659"
}
[2025-12-26 23:10:03] [INFO] Number of extracted fields: 21
[2025-12-26 23:10:03] [INFO] MULTI-AGENCY: Extracted cADAgencyIdentifier = 'PCFD'
[2025-12-26 23:10:03] [INFO] Multi-agency routing check: CAD Agency ID raw = 'PCFD', Parsed IDs = ["PCFD"], Non-empty count = 1, Total agency count = 1, Assigned Agencies count = 4
[2025-12-26 23:10:03] [INFO] Multi-agency mode detected. Checking AgencyCode values in order: ["PCFD"]
[2025-12-26 23:10:03] [INFO] Attempting SAASClient lookup for AgencyCode 'PCFD' (index 0) within mailbox's assigned agencies
[2025-12-26 23:10:03] [INFO] SUCCESS: Routed to agency 'Putnam County Fire Department' (ID: 68eeb686225c40db4) at INDEX 0 based on AgencyCode 'PCFD'
[2025-12-26 23:10:03] [INFO] Fetched 14 stations from Stations module for agency 'Putnam County Fire Department': ["68ffbebde83509b7c","68ffd433577d1ee1e","68ffbe83793eb4521","68eef9302d19f85fc","68ffbe45d3567d442","68ffbe0e8c5fa650f","68eef77e6a5b1e9d6","68ffbde067a9b162c","68ffbda5d8ebd5468","68ffbd6b1db8d8daa","68ffbd4220b20a872","68ffbcfb8b8911e4e","68eef6ffc8105af4e","68eeca5d553dc8756"]
[2025-12-26 23:10:03] [INFO] Final routing: saasclientId = 68eeb686225c40db4, dispatchStationsIds = ["68ffbebde83509b7c","68ffd433577d1ee1e","68ffbe83793eb4521","68eef9302d19f85fc","68ffbe45d3567d442","68ffbe0e8c5fa650f","68eef77e6a5b1e9d6","68ffbde067a9b162c","68ffbda5d8ebd5468","68ffbd6b1db8d8daa","68ffbd4220b20a872","68ffbcfb8b8911e4e","68eef6ffc8105af4e","68eeca5d553dc8756"], matchedAgencyIndex = 0
[2025-12-26 23:10:03] [INFO] === DISPATCH DATA THAT WOULD BE CREATED ===
[2025-12-26 23:10:03] [INFO] {
    "assignedUserId": 1,
    "source": "FTP",
    "status": "New",
    "saasclientId": "68eeb686225c40db4",
    "receivedFromMailboxId": "68f1466aed072ad4a",
    "dispatchTime": "2025-12-26 23:10:03",
    "dispatchedStationsIds": [
        "68ffbebde83509b7c",
        "68ffd433577d1ee1e",
        "68ffbe83793eb4521",
        "68eef9302d19f85fc",
        "68ffbe45d3567d442",
        "68ffbe0e8c5fa650f",
        "68eef77e6a5b1e9d6",
        "68ffbde067a9b162c",
        "68ffbda5d8ebd5468",
        "68ffbd6b1db8d8daa",
        "68ffbd4220b20a872",
        "68ffbcfb8b8911e4e",
        "68eef6ffc8105af4e",
        "68eeca5d553dc8756"
    ],
    "fTPFilesId": "TEST_FTP_694f15cb3f701",
    "incidentType": "FIRE INVESTIGATION",
    "locationCoordinates": "36.24345,-85.45659",
    "incidentAddressTextVersionStreet": "3445 J ROBINSON RD",
    "incidentAddressTextVersionCity": "COOKEVILLE",
    "incidentAddressTextVersionState": "TN",
    "incidentAddressTextVersionPostalCode": 38506,
    "cADNumber": "2025003172",
    "dispatchNotes": "THE DEAD TREE IS FARTHER AWAY FROM THE BRUSH PILE AND IS CONCERNED ABOUT IT SMOKING  STATES HE IS UNSURE HOW IT STARTED AND WOULD LIKE TO MAKE SURE IT DOESN`T SPREAK  [12\/26\/25 12:04:01 KHILL] DOES HAVE A BRUSH PILE BURNING WITH A PERMIT AND HAS GOTTEN A DEAD TREE SMOKING  [12\/26\/25 12:03:05 KHILL]"
}
[2025-12-26 23:10:03] [INFO] IncidentTypeMapping already exists: 693fd3603dbcab356
[2025-12-26 23:10:03] [INFO] MOCK: Would UPDATE existing Dispatch record ID: 694ece1e1ea691b22
[2025-12-26 23:10:03] [INFO] === TEST COMPLETED SUCCESSFULLY ===
