{"service":"sagatoll","status":"ok","version":"phase-9","environment":"staging","timestamp":"2026-04-12T15:15:42.249Z","checks":{"database":{"status":"ok","latencyMs":2},"exchangeRates":{"status":"ok","rateDate":"2026-04-10","source":"ecb_reference_rates","quoteCount":29,"stale":false},"sourceMonitoring":{"status":"ok","monitoredSources":38,"pendingRateChanges":7,"recentFailedChecks":0},"markets":[{"country":"NO","tollPoints":542,"rateRules":2449,"latestImportRun":{"id":"c93ca787-8211-471f-b842-be355475ae55","country":"NO","source":"norway_official_market","mode":"import","status":"completed","summary":{"findings":[{"code":"AUTOPASS_FERRY_COMPLEX_STRETCHES_SKIPPED","source":"autopassferje:1014","message":"Skipped ferry pricing import for Hjelmeland - Skipavik - Nesvik because the source exposed multiple stretches with different price matrices.","severity":"warning"},{"code":"AUTOPASS_FERRY_COMPLEX_STRETCHES_SKIPPED","source":"autopassferje:1027","message":"Skipped ferry pricing import for Gjermundshamn - Varaldsøy - Årsnes because the source exposed multiple stretches with different price matrices.","severity":"warning"},{"code":"AUTOPASS_FERRY_COMPLEX_STRETCHES_SKIPPED","source":"autopassferje:1031","message":"Skipped ferry pricing import for Skånevik - Matre - Utåker because the source exposed multiple stretches with different price matrices.","severity":"warning"},{"code":"AUTOPASS_FERRY_COMPLEX_STRETCHES_SKIPPED","source":"autopassferje:1033","message":"Skipped ferry pricing import for Jektevik - Nordhuglo - Hodnanes because the source exposed multiple stretches with different price matrices.","severity":"warning"},{"code":"AUTOPASS_FERRY_COMPLEX_STRETCHES_SKIPPED","source":"autopassferje:1039","message":"Skipped ferry pricing import for Måløy - Husevågøy - Oldeide because the source exposed multiple stretches with different price matrices.","severity":"warning"},{"code":"AUTOPASS_FERRY_COMPLEX_STRETCHES_SKIPPED","source":"autopassferje:1046","message":"Skipped ferry pricing import for Vangsnes - Hella - Dragsvik because the source exposed multiple stretches with different price matrices.","severity":"warning"},{"code":"AUTOPASS_FERRY_COMPLEX_STRETCHES_SKIPPED","source":"autopassferje:1047","message":"Skipped ferry pricing import for Mannheller - Fodnes because the source exposed multiple stretches with different price matrices.","severity":"warning"},{"code":"AUTOPASS_FERRY_COMPLEX_STRETCHES_SKIPPED","source":"autopassferje:1066","message":"Skipped ferry pricing import for Larsnes - Åram - Voksa - Kvamsøya because the source exposed multiple stretches with different price matrices.","severity":"warning"},{"code":"AUTOPASS_FERRY_COMPLEX_STRETCHES_SKIPPED","source":"autopassferje:1078","message":"Skipped ferry pricing import for Hofles-Geisnes - Lund because the source exposed multiple stretches with different price matrices.","severity":"warning"},{"code":"AUTOPASS_FERRY_COMPLEX_STRETCHES_SKIPPED","source":"autopassferje:1106","message":"Skipped ferry pricing import for Bodø - Værøy - Røst - Moskenes because the source exposed multiple stretches with different price matrices.","severity":"warning"},{"code":"AUTOPASS_FERRY_COMPLEX_STRETCHES_SKIPPED","source":"autopassferje:1132","message":"Skipped ferry pricing import for Ortnevik - Måren - Nordeide because the source exposed multiple stretches with different price matrices.","severity":"warning"},{"code":"AUTOPASS_FERRY_COMPLEX_STRETCHES_SKIPPED","source":"autopassferje:1140","message":"Skipped ferry pricing import for Askvoll - Gjervik - Fure - Askvoll because the source exposed multiple stretches with different price matrices.","severity":"warning"},{"code":"AUTOPASS_FERRY_GEOMETRY_NOT_MATCHED","source":"autopassferje:1084","message":"Skipped ferry pricing import for Brønnøysund - Sauren/Stortorgnes because no matching NVDB Ferjesamband geometry was found.","severity":"warning"},{"code":"AUTOPASS_FERRY_GEOMETRY_NOT_MATCHED","source":"autopassferje:1092","message":"Skipped ferry pricing import for Ørnes - Vassdalsvik - Meløysund - Bolga - Støtt because no matching NVDB Ferjesamband geometry was found.","severity":"warning"},{"code":"AUTOPASS_FERRY_GEOMETRY_NOT_MATCHED","source":"autopassferje:1097","message":"Skipped ferry pricing import for Nordnesøy - Kilboghamn (Rødyøysambandet) because no matching NVDB Ferjesamband geometry was found.","severity":"warning"},{"code":"AUTOPASS_FERRY_GEOMETRY_NOT_MATCHED","source":"autopassferje:1120","message":"Skipped ferry pricing import for Brevikeidet - Svensby because no matching NVDB Ferjesamband geometry was found.","severity":"warning"},{"code":"AUTOPASS_FERRY_GEOMETRY_NOT_MATCHED","source":"autopassferje:1127","message":"Skipped ferry pricing import for Nyvoll - Korsfjord because no matching NVDB Ferjesamband geometry was found.","severity":"warning"},{"code":"AUTOPASS_FERRY_GEOMETRY_NOT_MATCHED","source":"autopassferje:1128","message":"Skipped ferry pricing import for Strømsnes - Kjerringholmen because no matching NVDB Ferjesamband geometry was found.","severity":"warning"},{"code":"AUTOPASS_FERRY_GEOMETRY_NOT_MATCHED","source":"autopassferje:1130","message":"Skipped ferry pricing import for Florabassenget because no matching NVDB Ferjesamband geometry was found.","severity":"warning"},{"code":"AUTOPASS_FERRY_GEOMETRY_NOT_MATCHED","source":"autopassferje:1136","message":"Skipped ferry pricing import for Standal - Trandal - Sæbø - Skår because no matching NVDB Ferjesamband geometry was found.","severity":"warning"},{"code":"AUTOPASS_FERRY_GEOMETRY_NOT_MATCHED","source":"autopassferje:1141","message":"Skipped ferry pricing import for Askvoll - Gjervik - Fure - Værlandet because no matching NVDB Ferjesamband geometry was found.","severity":"warning"},{"code":"NVDB_BOMSTASJON_FALLBACK_NAME","source":"no:nvdb:bomstasjon:1017518891","message":"NVDB bomstasjon 1017518891 is missing 'Navn bomstasjon', so a fallback display name was generated.","severity":"warning"},{"code":"NVDB_BOMSTASJON_FALLBACK_NAME","source":"no:nvdb:bomstasjon:1017518892","message":"NVDB bomstasjon 1017518892 is missing 'Navn bomstasjon', so a fallback display name was generated.","severity":"warning"},{"code":"NVDB_BOMSTASJON_FALLBACK_NAME","source":"no:nvdb:bomstasjon:1017518893","message":"NVDB bomstasjon 1017518893 is missing 'Navn bomstasjon', so a fallback display name was generated.","severity":"warning"},{"code":"NVDB_BOMSTASJON_FALLBACK_NAME","source":"no:nvdb:bomstasjon:1017518894","message":"NVDB bomstasjon 1017518894 is missing 'Navn bomstasjon', so a fallback display name was generated.","severity":"warning"},{"code":"NVDB_BOMSTASJON_FALLBACK_NAME","source":"no:nvdb:bomstasjon:1017518895","message":"NVDB bomstasjon 1017518895 is missing 'Navn bomstasjon', so a fallback display name was generated.","severity":"warning"},{"code":"NVDB_BOMSTASJON_FALLBACK_NAME","source":"no:nvdb:bomstasjon:1017518896","message":"NVDB bomstasjon 1017518896 is missing 'Navn bomstasjon', so a fallback display name was generated.","severity":"warning"},{"code":"NVDB_BOMSTASJON_FALLBACK_NAME","source":"no:nvdb:bomstasjon:1018355683","message":"NVDB bomstasjon 1018355683 is missing 'Navn bomstasjon', so a fallback display name was generated.","severity":"warning"},{"code":"NVDB_BOMSTASJON_FALLBACK_NAME","source":"no:nvdb:bomstasjon:1018355684","message":"NVDB bomstasjon 1018355684 is missing 'Navn bomstasjon', so a fallback display name was generated.","severity":"warning"},{"code":"NVDB_BOMSTASJON_FALLBACK_NAME","source":"no:nvdb:bomstasjon:1020999490","message":"NVDB bomstasjon 1020999490 is missing 'Navn bomstasjon', so a fallback display name was generated.","severity":"warning"},{"code":"NVDB_BOMSTASJON_FALLBACK_NAME","source":"no:nvdb:bomstasjon:1025249143","message":"NVDB bomstasjon 1025249143 is missing 'Navn bomstasjon', so a fallback display name was generated.","severity":"warning"},{"code":"NVDB_BOMSTASJON_FALLBACK_NAME","source":"no:nvdb:bomstasjon:1025249144","message":"NVDB bomstasjon 1025249144 is missing 'Navn bomstasjon', so a fallback display name was generated.","severity":"warning"},{"code":"NVDB_BOMSTASJON_FALLBACK_NAME","source":"no:nvdb:bomstasjon:1026090503","message":"NVDB bomstasjon 1026090503 is missing 'Navn bomstasjon', so a fallback display name was generated.","severity":"warning"},{"code":"NVDB_BOMSTASJON_FALLBACK_NAME","source":"no:nvdb:bomstasjon:668061181","message":"NVDB bomstasjon 668061181 is missing 'Navn bomstasjon', so a fallback display name was generated.","severity":"warning"},{"code":"NVDB_BOMSTASJON_FALLBACK_NAME","source":"no:nvdb:bomstasjon:983416562","message":"NVDB bomstasjon 983416562 is missing 'Navn bomstasjon', so a fallback display name was generated.","severity":"warning"},{"code":"NVDB_BOMSTASJON_MISSING_RATES","source":"no:nvdb:bomstasjon:1005382828","message":"NVDB bomstasjon 1005382828 did not expose any usable rate fields.","severity":"warning"},{"code":"NVDB_BOMSTASJON_MISSING_RATES","source":"no:nvdb:bomstasjon:1005382831","message":"NVDB bomstasjon 1005382831 did not expose any usable rate fields.","severity":"warning"},{"code":"NVDB_BOMSTASJON_MISSING_RATES","source":"no:nvdb:bomstasjon:1017518891","message":"NVDB bomstasjon 1017518891 did not expose any usable rate fields.","severity":"warning"},{"code":"NVDB_BOMSTASJON_MISSING_RATES","source":"no:nvdb:bomstasjon:1017518892","message":"NVDB bomstasjon 1017518892 did not expose any usable rate fields.","severity":"warning"},{"code":"NVDB_BOMSTASJON_MISSING_RATES","source":"no:nvdb:bomstasjon:1017518893","message":"NVDB bomstasjon 1017518893 did not expose any usable rate fields.","severity":"warning"},{"code":"NVDB_BOMSTASJON_MISSING_RATES","source":"no:nvdb:bomstasjon:1017518894","message":"NVDB bomstasjon 1017518894 did not expose any usable rate fields.","severity":"warning"},{"code":"NVDB_BOMSTASJON_MISSING_RATES","source":"no:nvdb:bomstasjon:1017518895","message":"NVDB bomstasjon 1017518895 did not expose any usable rate fields.","severity":"warning"},{"code":"NVDB_BOMSTASJON_MISSING_RATES","source":"no:nvdb:bomstasjon:1017518896","message":"NVDB bomstasjon 1017518896 did not expose any usable rate fields.","severity":"warning"},{"code":"NVDB_BOMSTASJON_MISSING_RATES","source":"no:nvdb:bomstasjon:1018355683","message":"NVDB bomstasjon 1018355683 did not expose any usable rate fields.","severity":"warning"},{"code":"NVDB_BOMSTASJON_MISSING_RATES","source":"no:nvdb:bomstasjon:1018355684","message":"NVDB bomstasjon 1018355684 did not expose any usable rate fields.","severity":"warning"},{"code":"NVDB_BOMSTASJON_MISSING_RATES","source":"no:nvdb:bomstasjon:1019031147","message":"NVDB bomstasjon 1019031147 did not expose any usable rate fields.","severity":"warning"},{"code":"NVDB_BOMSTASJON_MISSING_RATES","source":"no:nvdb:bomstasjon:1020999490","message":"NVDB bomstasjon 1020999490 did not expose any usable rate fields.","severity":"warning"},{"code":"NVDB_BOMSTASJON_MISSING_RATES","source":"no:nvdb:bomstasjon:668061181","message":"NVDB bomstasjon 668061181 did not expose any usable rate fields.","severity":"warning"},{"code":"NVDB_BOMSTASJON_MISSING_RATES","source":"no:nvdb:bomstasjon:983416562","message":"NVDB bomstasjon 983416562 did not expose any usable rate fields.","severity":"warning"},{"code":"NVDB_BOMSTASJON_RUSH_METADATA_INCOMPLETE","source":"no:nvdb:bomstasjon:536627059","message":"NVDB bomstasjon 536627059 advertised rush pricing, but one or more rush windows were incomplete so only base rates were imported.","severity":"warning"},{"code":"NVDB_BOMSTASJON_RUSH_METADATA_INCOMPLETE","source":"no:nvdb:bomstasjon:919262158","message":"NVDB bomstasjon 919262158 advertised rush pricing, but one or more rush windows were incomplete so only base rates were imported.","severity":"warning"},{"code":"TOLL_POINT_WITHOUT_RATE_RULES","source":"no:nvdb:bomstasjon:1005382828","message":"Toll point Sandvikvåg does not have any imported rate rules in this dataset.","severity":"warning"},{"code":"TOLL_POINT_WITHOUT_RATE_RULES","source":"no:nvdb:bomstasjon:1005382831","message":"Toll point Halhjem does not have any imported rate rules in this dataset.","severity":"warning"},{"code":"TOLL_POINT_WITHOUT_RATE_RULES","source":"no:nvdb:bomstasjon:1017518891","message":"Toll point Rv13 bomstasjon 1017518891 does not have any imported rate rules in this dataset.","severity":"warning"},{"code":"TOLL_POINT_WITHOUT_RATE_RULES","source":"no:nvdb:bomstasjon:1017518892","message":"Toll point Rv13 bomstasjon 1017518892 does not have any imported rate rules in this dataset.","severity":"warning"},{"code":"TOLL_POINT_WITHOUT_RATE_RULES","source":"no:nvdb:bomstasjon:1017518893","message":"Toll point Rv13 bomstasjon 1017518893 does not have any imported rate rules in this dataset.","severity":"warning"},{"code":"TOLL_POINT_WITHOUT_RATE_RULES","source":"no:nvdb:bomstasjon:1017518894","message":"Toll point Rv5 bomstasjon 1017518894 does not have any imported rate rules in this dataset.","severity":"warning"},{"code":"TOLL_POINT_WITHOUT_RATE_RULES","source":"no:nvdb:bomstasjon:1017518895","message":"Toll point Rv13 bomstasjon 1017518895 does not have any imported rate rules in this dataset.","severity":"warning"},{"code":"TOLL_POINT_WITHOUT_RATE_RULES","source":"no:nvdb:bomstasjon:1017518896","message":"Toll point Rv5 bomstasjon 1017518896 does not have any imported rate rules in this dataset.","severity":"warning"},{"code":"TOLL_POINT_WITHOUT_RATE_RULES","source":"no:nvdb:bomstasjon:1018355683","message":"Toll point E39 bomstasjon 1018355683 does not have any imported rate rules in this dataset.","severity":"warning"},{"code":"TOLL_POINT_WITHOUT_RATE_RULES","source":"no:nvdb:bomstasjon:1018355684","message":"Toll point E39 bomstasjon 1018355684 does not have any imported rate rules in this dataset.","severity":"warning"},{"code":"TOLL_POINT_WITHOUT_RATE_RULES","source":"no:nvdb:bomstasjon:1019031147","message":"Toll point Gåsbu does not have any imported rate rules in this dataset.","severity":"warning"},{"code":"TOLL_POINT_WITHOUT_RATE_RULES","source":"no:nvdb:bomstasjon:1020999490","message":"Toll point E39 bomstasjon 1020999490 does not have any imported rate rules in this dataset.","severity":"warning"},{"code":"TOLL_POINT_WITHOUT_RATE_RULES","source":"no:nvdb:bomstasjon:668061181","message":"Toll point Pv9203 bomstasjon 668061181 does not have any imported rate rules in this dataset.","severity":"warning"},{"code":"TOLL_POINT_WITHOUT_RATE_RULES","source":"no:nvdb:bomstasjon:983416562","message":"Toll point Fv61 bomstasjon 983416562 does not have any imported rate rules in this dataset.","severity":"warning"}],"persisted":{"importedAt":"2026-04-12T11:45:25.413Z","inactiveNorwayTollPoints":0},"rateRules":2449,"tollPoints":542,"pricedFerries":104,"ferryTollPoints":104,"bomstasjonTollPoints":438},"errorText":null,"startedAt":"2026-04-12T11:45:24.314Z","finishedAt":"2026-04-12T11:45:33.183Z"}},{"country":"SE","tollPoints":4,"rateRules":5,"latestImportRun":{"id":"089826a9-3140-45a6-940c-f6a7b937530d","country":"SE","source":"se_official_mvp_market","mode":"import","status":"completed","summary":{"notes":["Curated MVP snapshot covering congestion taxes and fixed bridge tolls.","Amounts are stored in SEK minor units and ready for FX conversion in trip settlement."],"persisted":{"importedAt":"2026-04-12T11:45:35.334Z"},"rateRules":5,"tollPoints":4,"sourceLabel":"Sweden MVP curated market dataset"},"errorText":null,"startedAt":"2026-04-12T11:45:35.319Z","finishedAt":"2026-04-12T11:45:35.405Z"}},{"country":"DK","tollPoints":2,"rateRules":4,"latestImportRun":{"id":"5b5cacc2-76af-4bd8-a924-bacee67f4418","country":"DK","source":"dk_official_mvp_market","mode":"import","status":"completed","summary":{"notes":["Curated MVP snapshot covering the two main Danish fixed-link bridge charges.","BroBizz-specific discounts are modeled as tag-dependent rules."],"persisted":{"importedAt":"2026-04-12T11:45:35.414Z"},"rateRules":4,"tollPoints":2,"sourceLabel":"Denmark MVP curated market dataset"},"errorText":null,"startedAt":"2026-04-12T11:45:35.410Z","finishedAt":"2026-04-12T11:45:35.455Z"}},{"country":"FI","tollPoints":0,"rateRules":0,"latestImportRun":{"id":"e16cad9e-83d8-4491-b6c7-7c31f13d3608","country":"FI","source":"fi_market_status","mode":"import","status":"completed","summary":{"notes":["Finland currently has no road-toll, bridge-toll, or congestion dataset in scope.","Phase 9 still tracks Finland as a supported Nordic market so multi-country routing and FX remain coherent."],"persisted":{"importedAt":"2026-04-12T11:45:35.468Z"},"rateRules":0,"tollPoints":0,"sourceLabel":"Finland market status dataset"},"errorText":null,"startedAt":"2026-04-12T11:45:35.460Z","finishedAt":"2026-04-12T11:45:35.474Z"}}]}}