[2025-12-29 02:30:11] [INFO] === STARTING MULTI-AGENCY ROUTING TEST ===
[2025-12-29 02:30:11] [INFO] Using Mailbox ID: 68f1466aed072ad4a
[2025-12-29 02:30:11] [INFO] Connected to real API: https://stationboss.net/login
[2025-12-29 02:30:11] [INFO] File size: 4979 bytes
[2025-12-29 02:30:12] [INFO] Loaded real mailbox: N/A
[2025-12-29 02:30:12] [INFO] Mailbox default saasclientId: 68eeb686225c40db4
[2025-12-29 02:30:12] [INFO] Mailbox assigned agencies: ["68eeb686225c40db4","68e67aaba2bb4565e","68d1820f7ad4dadbd","68910627445d6e167"]
[2025-12-29 02:30:12] [INFO] Mailbox dispatch stations: ["68ffbebde83509b7c","68ffd433577d1ee1e","68ffbe83793eb4521","68eef9302d19f85fc","68ffbe45d3567d442","68ffbe0e8c5fa650f","68eef77e6a5b1e9d6","68ffbde067a9b162c","68ffbda5d8ebd5468","68ffbd6b1db8d8daa","68ffbd4220b20a872","68ffbcfb8b8911e4e","68eef6ffc8105af4e","68eeca5d553dc8756","68d1884332e5f169b","68ffe49c256b67300","68922bda7fe89f7ff"]
[2025-12-29 02:30:12] [INFO] MOCK: Would create FTPFiles record with ID: TEST_FTP_6951e7b41203b
[2025-12-29 02:30:12] [INFO] About to extract fields from XML. File size: 4979 bytes
[2025-12-29 02:30:12] [INFO] Number of mappings: 28
[2025-12-29 02:30:12] [INFO] Starting XML parsing. Content length: 4979
[2025-12-29 02:30:12] [INFO] XML parsed successfully. Root element: CADExport
[2025-12-29 02:30:12] [INFO] Processing 28 field mappings
[2025-12-29 02:30:12] [INFO] Mapping #1: Extracting 'EventDetails.AgencyCode' => 'cADAgencyIdentifier'
[2025-12-29 02:30:12] [INFO]   -> Found value: PCFD
[2025-12-29 02:30:12] [INFO]   -> Set field 'cADAgencyIdentifier' = "PCFD"
[2025-12-29 02:30:12] [INFO] Mapping #2: Extracting 'EventDetails.ReportNumber' => ["incidentInternalId","dispatchRunNumber"]
[2025-12-29 02:30:12] [INFO]   -> Found value: 2025003172
[2025-12-29 02:30:12] [INFO]   -> Set field 'incidentInternalId' = "2025003172"
[2025-12-29 02:30:12] [INFO]   -> Set field 'dispatchRunNumber' = "2025003172"
[2025-12-29 02:30:12] [INFO] Mapping #3: Extracting 'EventDetails.NatureDescription' => 'incidentTypeValue1'
[2025-12-29 02:30:12] [INFO]   -> Found value: FIRE INVESTIGATION
[2025-12-29 02:30:12] [INFO]   -> Set field 'incidentTypeValue1' = "FIRE INVESTIGATION"
[2025-12-29 02:30:12] [INFO] Mapping #4: Extracting 'EventDetails.StreetNumber' => 'incidentLocationStreetNumber'
[2025-12-29 02:30:12] [INFO]   -> Found value: 3445
[2025-12-29 02:30:12] [INFO]   -> Set field 'incidentLocationStreetNumber' = 3445
[2025-12-29 02:30:12] [INFO] Mapping #5: Extracting 'EventDetails.State' => 'incidentLocationStateName'
[2025-12-29 02:30:12] [INFO]   -> Found value: TN
[2025-12-29 02:30:12] [INFO]   -> Set field 'incidentLocationStateName' = "TN"
[2025-12-29 02:30:12] [INFO] Mapping #6: Extracting 'EventDetails.ZipCode' => 'nERISIncidentPostalCode'
[2025-12-29 02:30:12] [INFO]   -> Found value: 38506
[2025-12-29 02:30:12] [INFO]   -> Set field 'nERISIncidentPostalCode' = 38506
[2025-12-29 02:30:12] [INFO] Mapping #7: Extracting 'EventDetails.SiteName' => 'businessName'
[2025-12-29 02:30:12] [INFO]   -> No value found (null or empty)
[2025-12-29 02:30:12] [INFO] Mapping #8: Extracting 'EventDetails.ApartmentSuite' => 'incidentLocationApt'
[2025-12-29 02:30:12] [INFO]   -> No value found (null or empty)
[2025-12-29 02:30:12] [INFO] Mapping #9: Extracting 'EventDetails.EventLatitude' => 'nERISIncidentLatitude'
[2025-12-29 02:30:12] [INFO]   -> Found value: 36.24345
[2025-12-29 02:30:12] [INFO]   -> Set field 'nERISIncidentLatitude' = 36.24345000000000283080225926823914051055908203125
[2025-12-29 02:30:12] [INFO] Mapping #10: Extracting 'EventDetails.EventLongitude' => 'nERISIncidentLongitude'
[2025-12-29 02:30:12] [INFO]   -> Found value: -85.45659
[2025-12-29 02:30:12] [INFO]   -> Set field 'nERISIncidentLongitude' = -85.456590000000005602487362921237945556640625
[2025-12-29 02:30:12] [INFO] Mapping #11: Extracting 'EventDetails.EventStartTime' => 'alarm'
[2025-12-29 02:30:12] [INFO]   -> Found value: 2025-12-26 12:01:44
[2025-12-29 02:30:12] [INFO]   -> Set field 'alarm' = "2025-12-26 12:01:44"
[2025-12-29 02:30:12] [INFO] Mapping #12: Extracting 'EventDetails.FirstDispatchTime' => 'dispatched'
[2025-12-29 02:30:12] [INFO]   -> Found value: 2025-12-26 12:04:04
[2025-12-29 02:30:12] [INFO]   -> Set field 'dispatched' = "2025-12-26 12:04:04"
[2025-12-29 02:30:12] [INFO] Mapping #13: Extracting 'EventDetails.FirstEnrouteTime' => 'enroute'
[2025-12-29 02:30:12] [INFO]   -> No value found (null or empty)
[2025-12-29 02:30:12] [INFO] Mapping #14: Extracting 'EventDetails.FirstOnSceneTime' => 'onScene'
[2025-12-29 02:30:12] [INFO]   -> No value found (null or empty)
[2025-12-29 02:30:12] [INFO] Mapping #15: Extracting 'EventDetails.LastUnitClearTime' => ["cleared","inService"]
[2025-12-29 02:30:12] [INFO]   -> No value found (null or empty)
[2025-12-29 02:30:12] [INFO] Mapping #16: Extracting 'EventDetails.CrossStreets' => 'incidentLocationCross'
[2025-12-29 02:30:12] [INFO]   -> Found value: PARAN RD/BEAR CREEK LN
[2025-12-29 02:30:12] [INFO]   -> Set field 'incidentLocationCross' = "PARAN RD\/BEAR CREEK LN"
[2025-12-29 02:30:12] [INFO] Mapping #17: Extracting 'EventUnits.Unit[0].UnitCode' => 'cADVehicleID'
[2025-12-29 02:30:12] [INFO]   -> Found value: TK12
[2025-12-29 02:30:12] [INFO]   -> Set field 'cADVehicleID' = "TK12"
[2025-12-29 02:30:12] [INFO] Mapping #18: Extracting 'EventUnits.Unit[0].DispatchTime' => 'timedispatch'
[2025-12-29 02:30:12] [INFO]   -> Found value: 2025-12-26 12:04:04
[2025-12-29 02:30:12] [INFO]   -> Set field 'timedispatch' = "2025-12-26 12:04:04"
[2025-12-29 02:30:12] [INFO] Mapping #19: Extracting 'EventUnits.Unit[0].EnRouteTime' => 'timeenroutetoscene'
[2025-12-29 02:30:12] [INFO]   -> No value found (null or empty)
[2025-12-29 02:30:12] [INFO] Mapping #20: Extracting 'EventUnits.Unit[0].ArriveTime' => 'timeonscene'
[2025-12-29 02:30:12] [INFO]   -> No value found (null or empty)
[2025-12-29 02:30:12] [INFO] Mapping #21: Extracting 'EventUnits.Unit[0].ReturnToServiceTime' => 'timeunitclear'
[2025-12-29 02:30:12] [INFO]   -> No value found (null or empty)
[2025-12-29 02:30:12] [INFO] Mapping #22: Extracting 'EventUnits.Unit[0].CancelTime' => 'timecanceledenroute'
[2025-12-29 02:30:12] [INFO]   -> No value found (null or empty)
[2025-12-29 02:30:12] [INFO] Mapping #23: Extracting 'EventDetails.CadInciNumber' => 'policeReportNumber'
[2025-12-29 02:30:12] [INFO]   -> Found value: 20250141441
[2025-12-29 02:30:12] [INFO]   -> Set field 'policeReportNumber' = "20250141441"
[2025-12-29 02:30:12] [INFO] Mapping #24: Extracting 'EventDetails.CadNotes' => ["dispatchNotes","cADLog"]
[2025-12-29 02:30:12] [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-29 02:30:12] [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-29 02:30:12] [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-29 02:30:12] [INFO] Mapping #25: Extracting 'EventDetails.CityCodeDescription' => 'incidentLocationCity'
[2025-12-29 02:30:12] [INFO]   -> Found value: COOKEVILLE
[2025-12-29 02:30:12] [INFO]   -> Set field 'incidentLocationCity' = "COOKEVILLE"
[2025-12-29 02:30:12] [INFO] Mapping #26: Extracting 'EventDetails.StreetName' => 'streetName'
[2025-12-29 02:30:12] [INFO]   -> Found value: J ROBINSON
[2025-12-29 02:30:12] [INFO]   -> Set field 'streetName' = "J ROBINSON"
[2025-12-29 02:30:12] [INFO] Mapping #27: Extracting 'EventDetails.StreetType' => 'streetType'
[2025-12-29 02:30:12] [INFO]   -> Found value: RD
[2025-12-29 02:30:12] [INFO]   -> Set field 'streetType' = "RD"
[2025-12-29 02:30:12] [INFO] Mapping #28: Extracting 'EventDetails.FullAddress' => 'incidentAddressTextVersionStreet'
[2025-12-29 02:30:12] [INFO]   -> Found value: 3445 W J ROBINSON RD
[2025-12-29 02:30:12] [INFO]   -> Set field 'incidentAddressTextVersionStreet' = "3445 W J ROBINSON RD"
[2025-12-29 02:30:12] [INFO] Finished extracting fields. Total fields extracted: 21
[2025-12-29 02:30:12] [INFO] Concatenating street name and type
[2025-12-29 02:30:12] [INFO]   -> Combined street name: J ROBINSON RD
[2025-12-29 02:30:12] [INFO] Built locationCoordinates from lat/lng: 36.24345,-85.45659
[2025-12-29 02:30:12] [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-29 02:30:12] [INFO] Number of extracted fields: 21
[2025-12-29 02:30:12] [INFO] MULTI-AGENCY: Extracted cADAgencyIdentifier = 'PCFD'
[2025-12-29 02:30:12] [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-29 02:30:12] [INFO] Multi-agency mode detected. Checking AgencyCode values in order: ["PCFD"]
[2025-12-29 02:30:12] [INFO] Attempting SAASClient lookup for AgencyCode 'PCFD' (index 0) within mailbox's assigned agencies
[2025-12-29 02:30:12] [INFO] SUCCESS: Routed to agency 'Putnam County Fire Department' (ID: 68eeb686225c40db4) at INDEX 0 based on AgencyCode 'PCFD'
[2025-12-29 02:30:12] [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-29 02:30:12] [INFO] Final routing: saasclientId = 68eeb686225c40db4, dispatchStationsIds = ["68ffbebde83509b7c","68ffd433577d1ee1e","68ffbe83793eb4521","68eef9302d19f85fc","68ffbe45d3567d442","68ffbe0e8c5fa650f","68eef77e6a5b1e9d6","68ffbde067a9b162c","68ffbda5d8ebd5468","68ffbd6b1db8d8daa","68ffbd4220b20a872","68ffbcfb8b8911e4e","68eef6ffc8105af4e","68eeca5d553dc8756"], matchedAgencyIndex = 0
[2025-12-29 02:30:12] [INFO] === DISPATCH DATA THAT WOULD BE CREATED ===
[2025-12-29 02:30:12] [INFO] {
    "assignedUserId": 1,
    "source": "FTP",
    "status": "New",
    "saasclientId": "68eeb686225c40db4",
    "receivedFromMailboxId": "68f1466aed072ad4a",
    "dispatchTime": "2025-12-29 02:30:12",
    "dispatchedStationsIds": [
        "68ffbebde83509b7c",
        "68ffd433577d1ee1e",
        "68ffbe83793eb4521",
        "68eef9302d19f85fc",
        "68ffbe45d3567d442",
        "68ffbe0e8c5fa650f",
        "68eef77e6a5b1e9d6",
        "68ffbde067a9b162c",
        "68ffbda5d8ebd5468",
        "68ffbd6b1db8d8daa",
        "68ffbd4220b20a872",
        "68ffbcfb8b8911e4e",
        "68eef6ffc8105af4e",
        "68eeca5d553dc8756"
    ],
    "fTPFilesId": "TEST_FTP_6951e7b41203b",
    "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-29 02:30:12] [INFO] IncidentTypeMapping already exists: 693fd3603dbcab356
[2025-12-29 02:30:12] [INFO] MOCK: Would UPDATE existing Dispatch record ID: 694ece1e1ea691b22
[2025-12-29 02:30:12] [INFO] === TEST COMPLETED SUCCESSFULLY ===
