@golemio/pid 5.8.3 → 5.8.4-dev.2436767567
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/db/example/13_http-propagate-delay.sql +3 -0
- package/db/migrations/postgresql/20260325161451-add-new-columns-to-precomputed-table.js +53 -0
- package/db/migrations/postgresql/20260407082406-add-new-columns-to-getDepartures().js +53 -0
- package/db/migrations/postgresql/sqls/20260325161451-add-new-columns-to-precomputed-table-down.sql +4 -0
- package/db/migrations/postgresql/sqls/20260325161451-add-new-columns-to-precomputed-table-up.sql +4 -0
- package/db/migrations/postgresql/sqls/20260407082406-add-new-columns-to-getDepartures()-down.sql +152 -0
- package/db/migrations/postgresql/sqls/20260407082406-add-new-columns-to-getDepartures()-up.sql +158 -0
- package/dist/integration-engine/ropid-gtfs/data-access/precomputed/DeparturesRepository.js +32 -3
- package/dist/integration-engine/ropid-gtfs/data-access/precomputed/DeparturesRepository.js.map +1 -1
- package/dist/integration-engine/vehicle-positions/workers/runs/transformations/CommonRunsMessagesTransformation.js +2 -2
- package/dist/integration-engine/vehicle-positions/workers/runs/transformations/CommonRunsMessagesTransformation.js.map +1 -1
- package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/data-access/helpers/PositionsMapper.js +3 -2
- package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/data-access/helpers/PositionsMapper.js.map +1 -1
- package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/helpers/compute-positions/strategy/CommonDelayAtStop.js +8 -2
- package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/helpers/compute-positions/strategy/CommonDelayAtStop.js.map +1 -1
- package/dist/output-gateway/pid/controllers/v2/V2DepartureBoardsController.js +1 -0
- package/dist/output-gateway/pid/controllers/v2/V2DepartureBoardsController.js.map +1 -1
- package/dist/output-gateway/pid/dto/DepartureBoardsDTO.d.ts +1 -0
- package/dist/output-gateway/pid/dto/DepartureBoardsDTO.js +4 -0
- package/dist/output-gateway/pid/dto/DepartureBoardsDTO.js.map +1 -1
- package/dist/output-gateway/pid/dto/interfaces/IDepartureBoardsQueryDTO.d.ts +1 -0
- package/dist/output-gateway/pid/helpers/DepartureBoardMapper.d.ts +2 -1
- package/dist/output-gateway/pid/helpers/DepartureBoardMapper.js +28 -4
- package/dist/output-gateway/pid/helpers/DepartureBoardMapper.js.map +1 -1
- package/dist/output-gateway/pid/interfaces/IPIDDeparture.d.ts +3 -0
- package/dist/output-gateway/pid/models/PIDDepartureBoardsModel.js +1 -0
- package/dist/output-gateway/pid/models/PIDDepartureBoardsModel.js.map +1 -1
- package/dist/output-gateway/pid/models/helpers/PIDDepartureModel.js +1 -1
- package/dist/output-gateway/pid/models/helpers/PIDDepartureModel.js.map +1 -1
- package/dist/output-gateway/pid/models/helpers/interfaces/IPIDDepartureQueryOptions.d.ts +1 -0
- package/dist/output-gateway/pid/models/interfaces/IGetDeparturesOptions.d.ts +1 -0
- package/dist/output-gateway/pid/routers/v2/V2PIDRouter.js +1 -0
- package/dist/output-gateway/pid/routers/v2/V2PIDRouter.js.map +1 -1
- package/dist/schema-definitions/ropid-gtfs/models/precomputed/DeparturesModel.d.ts +3 -0
- package/dist/schema-definitions/ropid-gtfs/models/precomputed/DeparturesModel.js +12 -0
- package/dist/schema-definitions/ropid-gtfs/models/precomputed/DeparturesModel.js.map +1 -1
- package/dist/schema-definitions/ropid-gtfs/models/precomputed/interfaces/IDeparturesModel.d.ts +3 -0
- package/docs/asyncapi.yaml +27 -4
- package/docs/cache/types/psql.md +3 -3
- package/docs/cache/types/redis.md +30 -2
- package/docs/implementation_documentation.md +96 -3
- package/docs/jis/index.md +17 -0
- package/docs/openapi-output.yaml +20 -3
- package/docs/processing/input_realtime_data/http_mpvnet.md +21 -0
- package/docs/processing/input_realtime_data/tcp_dpp_bus.md +3 -3
- package/docs/processing/input_realtime_data/tcp_dpp_tram.md +3 -3
- package/docs/processing/state_position_tracking/http_mpvnet.md +1 -0
- package/docs/processing/state_position_tracking/tcp_dpp_common.md +2 -1
- package/docs/processing/transferboards_filtering.md +312 -0
- package/package.json +1 -1
|
@@ -264,12 +264,14 @@ _:warning: Původním záměrem bylo využití OIS číselníku během zpracová
|
|
|
264
264
|
- baseUrl: module.pid.staticData.baseUrl
|
|
265
265
|
- departure directions url: module.pid.staticData.departuresDirection.path
|
|
266
266
|
- metro rail track url: module.pid.staticData.metroRailTracks.path
|
|
267
|
+
- not public vehicles url: module.pid.staticData.notPublicVehicles.path
|
|
267
268
|
- formát dat
|
|
268
269
|
- protokol: http
|
|
269
|
-
- datový typ: csv
|
|
270
|
+
- datový typ: csv (DeparturesDirection, MetroRailTrack), json (NotPublicVehicles)
|
|
270
271
|
- validační schéma:
|
|
271
272
|
- [MetroRailTrack](../src/schema-definitions/datasources/static-data/MetroRailTrackJsonSchema.ts)
|
|
272
273
|
- [DeparturesDirection](../src/schema-definitions/datasources/static-data/DeparturesDirectionsJsonSchema.ts)
|
|
274
|
+
- [NotPublicVehicles](../src/schema-definitions/datasources/static-data/interfaces/NotPublicVehiclesDataInterface.ts) – interface `INotPublicVehicles`
|
|
273
275
|
- příklad vstupnich dat: viz zdroj data
|
|
274
276
|
- frekvence stahování
|
|
275
277
|
- Po nacteni jizdnich radu (fronta: vehicle-positions.ropidgtfs.checkForNewData)
|
|
@@ -512,6 +514,9 @@ Všechny tabulky se nachází ve schématu `pid`
|
|
|
512
514
|
- [RopidGTFSRunNumbersTransformation](https://gitlab.com/operator-ict/golemio/code/modules/pid/-/blob/development/src/integration-engine/ropid-gtfs/transformations/RopidGTFSRunNumbersTransformation.ts)
|
|
513
515
|
- [RopidGtfsRouteSubAgencyTransformation](https://gitlab.com/operator-ict/golemio/code/modules/pid/-/blob/development/src/integration-engine/ropid-gtfs/transformations/RopidGtfsRouteSubAgencyTransformation.ts)
|
|
514
516
|
- on top of transformation functionality it also removes duplicates. Rule: If there are multiple rows with same `route_id` and `sub_agency_id` only the first with filled licence number is kept.
|
|
517
|
+
- rozšířené sloupce GTFS souborů (nestandardní rozšíření ROPID)
|
|
518
|
+
- `trips.txt` – sloupec `headsign_icons`: řetězec dvouznakových kódů ikon (např. `"MbSb"`), uložen do `ropidgtfs_trips.headsign_icons`
|
|
519
|
+
- `stop_times.txt` – sloupec `headsign_icons`: přepis na úrovni zastávky, uložen do `ropidgtfs_stop_times.headsign_icons`; má přednost před hodnotou z `trips.txt` pokud je zároveň vyplněn `stop_headsign`
|
|
515
520
|
- data modely
|
|
516
521
|
- RopidGTFSMetadataModel `ropidgtfs_metadata`
|
|
517
522
|
- RopidGTFSAgencyModel `ropidgtfs_agency`
|
|
@@ -562,6 +567,7 @@ Všechny tabulky se nachází ve schématu `pid`
|
|
|
562
567
|
- RopidGTFSPrecomputedMinMaxStopSequencesModel `ropidgtfs_precomputed_minmax_stop_sequences`
|
|
563
568
|
- RopidGTFSPrecomputedDeparturesModel `ropidgtfs_precomputed_departures`
|
|
564
569
|
- RopidGTFSPrecomputedTripScheduleModel `ropidgtfs_precomputed_trip_schedule`
|
|
570
|
+
- RopidGTFSPrecomputedTripConnectionsModel `ropidgtfs_precomputed_trip_connections`
|
|
565
571
|
|
|
566
572
|
#### task _RefreshPrecomputedTables_
|
|
567
573
|
|
|
@@ -581,6 +587,7 @@ Všechny tabulky se nachází ve schématu `pid`
|
|
|
581
587
|
- RopidGTFSPrecomputedMinMaxStopSequencesModel `ropidgtfs_precomputed_minmax_stop_sequences`
|
|
582
588
|
- RopidGTFSPrecomputedDeparturesModel `ropidgtfs_precomputed_departures`
|
|
583
589
|
- RopidGTFSPrecomputedTripScheduleModel `ropidgtfs_precomputed_trip_schedule`
|
|
590
|
+
- RopidGTFSPrecomputedTripConnectionsModel `ropidgtfs_precomputed_trip_connections`
|
|
584
591
|
|
|
585
592
|
#### task _RefreshPublicGtfsDepartureCacheTask_
|
|
586
593
|
|
|
@@ -596,8 +603,10 @@ Task se stará o aktualizaci cache pro public odjezdy. Pouští se pravidelně c
|
|
|
596
603
|
- ROPID FTP
|
|
597
604
|
- transformace
|
|
598
605
|
- [PublicDepartureCacheTransformation](../src/integration-engine/ropid-gtfs/transformations/PublicDepartureCacheTransformation.ts)
|
|
606
|
+
- výsledný cache záznam obsahuje pole `connections` (garantované přestupy – přednačtené z `ropidgtfs_precomputed_trip_connections`, původně z `transfers.txt` kde `transfer_type = 1`) a pole `wheelchair_accessible` (přístupnost vozidla pro vozíčkáře z GTFS `trips.txt`)
|
|
607
|
+
- pole `trip_headsign_icons`: pokud je pro danou zastávku spoje vyplněn `stop_headsign`, použije se `stop_headsign_icons` z `ropidgtfs_stop_times`; jinak se použije `headsign_icons` z `ropidgtfs_trips`; výsledek je řetězec dvouznakových kódů (např. `"MbMcSb"`) nebo `null`
|
|
599
608
|
- data modely
|
|
600
|
-
- RopidGTFSPrecomputedDeparturesModel `ropidgtfs_precomputed_departures`
|
|
609
|
+
- RopidGTFSPrecomputedDeparturesModel `ropidgtfs_precomputed_departures` (obsahuje JOIN na `ropidgtfs_precomputed_trip_connections_tmp` přes `to_trip_id` a `to_stop_id`)
|
|
601
610
|
|
|
602
611
|
#### task _SaveStaticData_
|
|
603
612
|
|
|
@@ -613,9 +622,19 @@ Task se stará o aktualizaci statickych dat. Pouští se po dokončení načten
|
|
|
613
622
|
- transformace
|
|
614
623
|
- [DeparturesDirectionTransformation](../src/integration-engine/ropid-gtfs/workers/timetables/tasks/transformations/DeparturesDirectionTransformation.ts)
|
|
615
624
|
- [MetroRailtrackDataTransformation](../src/integration-engine/ropid-gtfs/workers/timetables/tasks/transformations/MetroRailtrackDataTransformation.ts)
|
|
625
|
+
- `NotPublicVehicles` – data se ukládají přímo do cache klíče `config:notPublicVehicles` přes `NotPublicVehiclesRedisRepository` (žádná DB tabulka)
|
|
616
626
|
- data modely
|
|
617
627
|
- RopidDeparturesDirections `ropid_departures_directions`
|
|
618
628
|
- RopidGtfsMetroRailtrackGps `ropidgtfs_metro_railtrack_gps`
|
|
629
|
+
- Cache `config:notPublicVehicles` – JSON blob struktury `INotPublicVehicles`:
|
|
630
|
+
```json
|
|
631
|
+
{
|
|
632
|
+
"tram": { "registrationNumbers": ["string"] },
|
|
633
|
+
"road": { "registrationNumbers": ["string"] },
|
|
634
|
+
"routeIds": ["string"]
|
|
635
|
+
}
|
|
636
|
+
```
|
|
637
|
+
`road` pokrývá autobusy i trolejbusy (evidenční čísla se mohou překrývat s tramvajemi, proto jsou oddělena). `routeIds` je whitelist číselných identifikátorů náhradních nebo dočasných linek (např. náhradní autobus za metro při výluce nebo mimořádné události), které se mají zobrazovat i bez platného JŘ spoje.
|
|
619
638
|
|
|
620
639
|
#### task _EnsureCacheTask_
|
|
621
640
|
|
|
@@ -1086,6 +1105,18 @@ Worker má na starost generování souborů s realtime daty pro `gtfsrt` endpoin
|
|
|
1086
1105
|
- VPTripsModel `vehiclepositions_trips`
|
|
1087
1106
|
- VPPositionsModel `vehiclepositions_positions`
|
|
1088
1107
|
|
|
1108
|
+
**`wheelchairAccessible` ve VehicleDescriptor**
|
|
1109
|
+
|
|
1110
|
+
Pole `wheelchairAccessible` je součástí standardního `VehicleDescriptor` ve feedech `vehicle_positions.pb` a `pid_feed.pb`:
|
|
1111
|
+
|
|
1112
|
+
| Interní hodnota | Proto enum |
|
|
1113
|
+
|---|---|
|
|
1114
|
+
| `null` | `WHEELCHAIR_ACCESSIBLE_UNSPECIFIED = 0` |
|
|
1115
|
+
| `true` | `WHEELCHAIR_ACCESSIBLE = 1` |
|
|
1116
|
+
| `false` | `WHEELCHAIR_INACCESSIBLE = 2` |
|
|
1117
|
+
|
|
1118
|
+
Zdrojem je pole `wheelchair_accessible` z tabulky `vehiclepositions_trips` (přenášené přes `IGtfsRtTripDto`). Vedle standardního pole zůstává zachováno rozšíření `.transit_realtime.ovapiVehicleDescriptor.wheelchairAccessible` s původní boolean/null hodnotou.
|
|
1119
|
+
|
|
1089
1120
|
**Určení zpoždění v trip_updates.pb**
|
|
1090
1121
|
|
|
1091
1122
|
Predikce odjezdů probíhá podle vzorce:
|
|
@@ -1191,6 +1222,10 @@ Worker má na starost stahování VYMI (JIS) událostí a infotextů, jejich tra
|
|
|
1191
1222
|
- data modely
|
|
1192
1223
|
- JISEventsModel `jis_events`
|
|
1193
1224
|
- JISEventsRopidGTFSRoutesModel `jis_events_ropidgtfs_routes`
|
|
1225
|
+
- poznámky k datovému modelu
|
|
1226
|
+
- pole `effects` je pole až 3 unikátních řetězců; v GTFS-RT `Alert.effect` se použije pouze `effects[0]`, zbývající hodnoty jsou dostupné pouze v custom-format exportu
|
|
1227
|
+
- pole `cause_detail` je volný text zpřesňující příčinu události; může být `null`
|
|
1228
|
+
- pole `cause` obsahuje překlady do češtiny i angličtiny; anglické hodnoty jsou zahrnuty i ve výstupu GTFS-RT alert feedu
|
|
1194
1229
|
|
|
1195
1230
|
#### _task: RefreshJISInfotextsTask_
|
|
1196
1231
|
|
|
@@ -1285,7 +1320,7 @@ Worker má na starost stahování VYMI (JIS) událostí a infotextů, jejich tra
|
|
|
1285
1320
|
- retence dat
|
|
1286
1321
|
- jízdní řády se generují 1-2x denně na 14 dní dopředu
|
|
1287
1322
|
- polohová data si uchováváme 24 hodin (30 minut od poslední aktualizace, poté v historických tabulkách)
|
|
1288
|
-
- popis vozidel
|
|
1323
|
+
- popis vozidel se nepromazává – přetrvávají do přepsání novými daty (fixní TTL bylo odstraněno)
|
|
1289
1324
|
- preset logy si uchováváme 8 hodin
|
|
1290
1325
|
- JIS události a infotexty si uchováváme neomezeně
|
|
1291
1326
|
|
|
@@ -1428,6 +1463,12 @@ Worker má na starost stahování VYMI (JIS) událostí a infotextů, jejich tra
|
|
|
1428
1463
|
|
|
1429
1464
|
- zdrojové tabulky
|
|
1430
1465
|
- `ropidgtfs_precomputed_departures`, `ropidgtfs_stops`, `ropidgtfs_cis_stops`, `jis_infotexts`, `jis_infotexts_ropidgtfs_stops`, `ropid_departures_directions`, `vehiclepositions_positions`, `vehiclepositions_trips`
|
|
1466
|
+
- odpověď obsahuje hlavičku `X-Golemio-Preset-Metadata: airConditionPossible=0|1`
|
|
1467
|
+
- `1` pokud byl zadán query parametr `airCondition` s pravdivou hodnotou, `0` jinak
|
|
1468
|
+
- slouží monitorovacím systémům (preset systémy monitorovacího centra ROPID) k detekci aktivního filtrování dle klimatizace
|
|
1469
|
+
- kód nástupiště (`platform_code`)
|
|
1470
|
+
- **vlaky**: preferuje se CIS hodnota `cis_stop_platform_code` uložená z MPVNet zpráv (`PlatformCodeResolver`); MPVNet atribut `$.stan` je před uložením oříznut na první platný segment (viz [parsování `stan` u vlaků](../processing/input_realtime_data/http_mpvnet.md#parsování-stanoviště-stan-u-vlaků))
|
|
1471
|
+
- **ostatní typy**: používá se GTFS `platform_code` ze `stop_times.txt`
|
|
1431
1472
|
|
|
1432
1473
|
### PID Departure Boards v3
|
|
1433
1474
|
|
|
@@ -1435,6 +1476,42 @@ Worker má na starost stahování VYMI (JIS) událostí a infotextů, jejich tra
|
|
|
1435
1476
|
|
|
1436
1477
|
- načte odjezdy pro přestupní tabule ve vozidlech a aktivní infotexty exportované z aplikace VYMI (JIS) Infotexty
|
|
1437
1478
|
|
|
1479
|
+
### PID Departure Boards v4
|
|
1480
|
+
|
|
1481
|
+
#### _/v4/pid/transferboards_
|
|
1482
|
+
|
|
1483
|
+
- načte odjezdy pro přestupní tabule ve vozidlech na základě aktuální polohy vozidla a aktivní infotexty exportované z aplikace VYMI (JIS) Infotexty
|
|
1484
|
+
- parametry
|
|
1485
|
+
- `aswId` + `vehicleRegistrationNumber` + `routeType` – identifikace zastávky a vozidla přes ASW číselník (vzájemně se vylučuje s `cisId`+`tripNumber`)
|
|
1486
|
+
- `cisId` + `tripNumber` – identifikace zastávky a spoje přes CIS číselník (zatím neimplementováno, vrací 501)
|
|
1487
|
+
- `timeFrom` – volitelný ISO8601 čas příjezdu (pokud není zadán, použije se reálný čas příjezdu z RT dat)
|
|
1488
|
+
- `limit` – volitelný počet odjezdů (výchozí 8, max 30)
|
|
1489
|
+
- cachováno na 5 sekund (stale-while-revalidate 5 sekund)
|
|
1490
|
+
- zdrojové cache záznamy
|
|
1491
|
+
- `gtfsStopsCache:*` – převod ASW node ID na GTFS stop_id
|
|
1492
|
+
- `gtfsDelayComputation:*` – zjištění zastávek spoje a predikovaného času příjezdu
|
|
1493
|
+
- `vpPublicCache:*` – aktuální poloha a zpoždění vozidla
|
|
1494
|
+
- `gtfsPublicDepartureCache:*` – statické odjezdy ze zastávek (vč. `connections` a `wheelchair_accessible`)
|
|
1495
|
+
- `vpPublicStopTimeCache:*` – live zastávkové časy pro spoje se známou polohou
|
|
1496
|
+
- `jisCache:*` – aktivní infotexty pro dané zastávky
|
|
1497
|
+
- načítání odjezdů z cache (`gtfsPublicDepartureCache`)
|
|
1498
|
+
- z každé zastávky se načte `max(80, min(120, limit × 10))` položek v časovém okně `[plannedTimeFrom − 61 min, plannedTimeFrom + 60 min + delay]`; lookback 61 minut zajišťuje, že se zachytí i navazující spoj, jehož plánovaný odjezd je v minulosti, ale díky vlastnímu zpoždění (až 60 minut) dorazí na zastávku až po příjezdu aktuálního vozidla
|
|
1499
|
+
- ihned po načtení se aplikuje pre-filter: odjezdy autobusů, tramvají a trolejbusů ze zastávek s jiným názvem než aktuální zastávka jsou zahozeny; metro/vlak/přívoz/lanovka procházejí vždy; odjezdy s neprázdným polem `connections[]` jsou zachovány bez ohledu na název zastávky (potenciální garantovaný přestup)
|
|
1500
|
+
- garantované přestupy (`is_guaranteed_transfer`)
|
|
1501
|
+
- označují odjezdy, které na příjezd aktuálního spoje čekají – detekováno z pole `connections` v `gtfsPublicDepartureCache`, kde `from_trip_id` odpovídá aktuálnímu spoji a `arrivalTime < departure_datetime + max_wait_sec`
|
|
1502
|
+
- zobrazované minuty u garantovaného přestupu jsou nastaveny na čas příjezdu aktuálního spoje (ne na plánovaný odjezd navazujícího spoje)
|
|
1503
|
+
- garantované přestupy jsou vyjmuty z filtru opačného směru a filtru podskupiny linky – jsou přidány do `tripIdsToKeep` před spuštěním `findRelevantTripIdsFromLines`, takže projdou bez ohledu na zastávkovou sekvenci
|
|
1504
|
+
- typy "vždy zobrazit" (metro, vlak, přívoz, lanovka) filtr `findRelevantTripIdsFromLines` zcela přeskakují
|
|
1505
|
+
- dostupnost pro vozíčkáře (`is_wheelchair_accessible`)
|
|
1506
|
+
- **metro**: určeno výhradně podle `wheelchair_boarding` zastávky (hodnota `1` = přístupná)
|
|
1507
|
+
- **ostatní typy dopravy**: primárně z RT dat vozidla (`detailed_info.is_wheelchair_accessible`); pokud RT data nejsou k dispozici, použije se GTFS příznak `wheelchair_accessible` z `trips.txt` (`1` = přístupné vozidlo)
|
|
1508
|
+
- seskupování a omezení výstupu (`TransferDepartureCacheTransformation`)
|
|
1509
|
+
- **metro**: seskupuje se podle `route_short_name + stop_id`; na jeden záznam výstupu připadají až 2 hodnoty v poli `departure_timestamp.minutes[]`
|
|
1510
|
+
- **ostatní typy**: seskupuje se podle `route_short_name + direction_id`; na skupinu připadají nejvýše 2 samostatné záznamy odjezdů; `direction_id` se získává z cache poloh vozidel (klíč `route_short_name + trip_headsign`), výchozí hodnota je `0`
|
|
1511
|
+
- konfigurace filtrování opačného směru (backtracking)
|
|
1512
|
+
- `module.pid.vehicle-positions.transferboards.isOppositeDirectionFilterStopNameStrict` (boolean, výchozí `true`) – pokud `true`, zastávka je považována za "zpětnou" pouze pokud se shoduje `stop_id` i `stop_name`; pokud `false`, stačí shoda `stop_id`
|
|
1513
|
+
- `module.pid.vehicle-positions.transferboards.countPreviousStopsToAllow` (integer, výchozí `0`) – kolik předchozích zastávek aktuálního spoje smí kandidátní spoj sdílet ve svých nadcházejících zastávkách, než je považován za zpětný směr a odfiltrován; `0` znamená žádná shoda není povolena
|
|
1514
|
+
|
|
1438
1515
|
#### _/v3/pid/infotexts_
|
|
1439
1516
|
|
|
1440
1517
|
- načte aktivní infotexty exportované z aplikace VYMI (JIS) Infotexty
|
|
@@ -1482,4 +1559,20 @@ Worker má na starost stahování VYMI (JIS) událostí a infotextů, jejich tra
|
|
|
1482
1559
|
- podle názvů linek a jak daleko do budoucnosti se mají odjezdy navracet
|
|
1483
1560
|
- limitování počtu odjezdů v každé skupině
|
|
1484
1561
|
- EP je optimalizován pro vyšší zátěž z mobilní aplikace PID lítačka - požadavek do databáze z OG pouze v případě nutnosti obnovit cache s vehicle descriptory (klimatizace, usb nabíječky), jinak je vše z Redisu
|
|
1562
|
+
- deduplikace odjezdů (pro seskupení "jeden za linka+směr") se provádí podle klíče `route_id + trip_headsign + platform_code`; toto se liší od původního přístupu deduplikace podle `stop_id` a správně pokrývá situace, kdy jeden ASW uzel odpovídá více GTFS `stop_id`
|
|
1563
|
+
- dostupnost pro vozíčkáře (`is_wheelchair_accessible`) se určuje v pořadí priority:
|
|
1564
|
+
1. RT descriptor vozidla (`detailed_info.is_wheelchair_accessible` z vehicle positions)
|
|
1565
|
+
2. GTFS statický příznak `wheelchair_accessible` z `trips.txt` (`1` = přístupné), pokud RT data nejsou k dispozici
|
|
1485
1566
|
- je použit `CompressionByDefaultMiddleware` a odpovědi jsou tak na output gateway komprimovány i pokud klient explicitně nepovolí komprimaci vhodnou hodnotou hlavičky `Accept-Encoding` (lze však komprimaci explicitně zakázat hodnotou `identity`)
|
|
1567
|
+
|
|
1568
|
+
### JIS v1
|
|
1569
|
+
|
|
1570
|
+
#### _/v1/jis/events/custom-format_
|
|
1571
|
+
|
|
1572
|
+
- vrátí seznam publikovaných událostí ve vlastním formátu pro externí konzumenty (fallback endpoint pro webhooky)
|
|
1573
|
+
- parametry
|
|
1574
|
+
- `displayPeriodStart` / `displayPeriodEnd` – filtrování podle překryvu zobrazovacího okna události s požadovaným rozsahem (ISO 8601)
|
|
1575
|
+
- `organizationNames` – filtrování podle organizace (pole řetězců)
|
|
1576
|
+
- `type` – filtrování podle typu události (`INCIDENT`, `DISRUPTION`, `SERVICE_CHANGE`)
|
|
1577
|
+
- zdrojové tabulky: `jis_events`, `jis_events_ropidgtfs_routes`
|
|
1578
|
+
- formát odpovědi: viz schéma `EventCustomFormat` v [openapi-output.yaml](./openapi-output.yaml)
|
package/docs/jis/index.md
CHANGED
|
@@ -246,3 +246,20 @@ flowchart TB
|
|
|
246
246
|
```
|
|
247
247
|
|
|
248
248
|
Zdroj a formát dat pro aktivní stahování jsou dále více popsány v implementační dokumentaci ([události](../implementation_documentation.md#jis-events), [infotexty](../implementation_documentation.md#jis-infotexts)), stejně tak jako [worker a tasky](../implementation_documentation.md#jisworker) a popis [uložení dat](../implementation_documentation.md#uložení-dat) včetně databázového schema a popisu retence.
|
|
249
|
+
|
|
250
|
+
## Datový model událostí — vybraná pole
|
|
251
|
+
|
|
252
|
+
### `cause_detail`
|
|
253
|
+
|
|
254
|
+
Volitelné textové upřesnění příčiny události (`cause_detail`). Může být `null`. Dostupné v custom-format exportu (`/v1/jis/events/custom-format`) i v GTFS-RT alert feedu jako rozšíření. Struktura:
|
|
255
|
+
```json
|
|
256
|
+
{ "cs": "Nehoda na křižovatce", "en": null }
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
### `cause` — anglický překlad
|
|
260
|
+
|
|
261
|
+
Pole `cause` obsahuje překlad příčiny události do češtiny i do angličtiny. Anglická hodnota je zahrnuta i ve výstupu GTFS-RT alert feedu (pole `Alert.cause` v `pid_feed.pb` i `alerts.pb`).
|
|
262
|
+
|
|
263
|
+
### `effects` (pole příčin dopadu)
|
|
264
|
+
|
|
265
|
+
Pole `effects` může obsahovat 1–3 unikátní řetězcové hodnoty. Pouze `effects[0]` se mapuje na standardní GTFS-RT `Alert.effect`; zbývající hodnoty jsou dostupné výhradně v custom-format exportu.
|
package/docs/openapi-output.yaml
CHANGED
|
@@ -1022,6 +1022,16 @@ paths:
|
|
|
1022
1022
|
type: number
|
|
1023
1023
|
format: int64
|
|
1024
1024
|
example: 0
|
|
1025
|
+
- name: appendHeadsignsLimit
|
|
1026
|
+
in: query
|
|
1027
|
+
description: >-
|
|
1028
|
+
Number of stops before route switch at which headsign is enriched with continuation info.
|
|
1029
|
+
When set and a departure has route-switch data, headsign becomes `<headsign> → <next_route> <next_headsign>`.
|
|
1030
|
+
required: false
|
|
1031
|
+
schema:
|
|
1032
|
+
type: integer
|
|
1033
|
+
minimum: 0
|
|
1034
|
+
example: 3
|
|
1025
1035
|
|
|
1026
1036
|
responses:
|
|
1027
1037
|
"200":
|
|
@@ -2644,7 +2654,9 @@ components:
|
|
|
2644
2654
|
example: false
|
|
2645
2655
|
origin_timestamp:
|
|
2646
2656
|
type: string
|
|
2647
|
-
description:
|
|
2657
|
+
description: >
|
|
2658
|
+
Transmission time of the message from the vehicle (UTC).
|
|
2659
|
+
Corresponds to the lat/lng position reported in the same message.
|
|
2648
2660
|
example: "2019-03-18T11:00:00.000Z"
|
|
2649
2661
|
speed:
|
|
2650
2662
|
type: number
|
|
@@ -2766,7 +2778,10 @@ components:
|
|
|
2766
2778
|
example: "top-left"
|
|
2767
2779
|
headsign:
|
|
2768
2780
|
type: string
|
|
2769
|
-
description:
|
|
2781
|
+
description: >-
|
|
2782
|
+
Trip headsign (usually the final stop). When the `appendHeadsignsLimit` parameter is used and the departure
|
|
2783
|
+
has route-switch data, this field may contain appended continuation info in the form
|
|
2784
|
+
`<headsign> → <next_route> <next_headsign>`.
|
|
2770
2785
|
example: "Chodov"
|
|
2771
2786
|
id:
|
|
2772
2787
|
type: string
|
|
@@ -3175,7 +3190,9 @@ components:
|
|
|
3175
3190
|
origin_timestamp:
|
|
3176
3191
|
type: string
|
|
3177
3192
|
nullable: true
|
|
3178
|
-
description:
|
|
3193
|
+
description: >
|
|
3194
|
+
Transmission time of the last message from the vehicle.
|
|
3195
|
+
Corresponds to the lat/lng position reported in the same message.
|
|
3179
3196
|
example: "2023-12-06T12:00:00+01:00"
|
|
3180
3197
|
|
|
3181
3198
|
ScopeStaticInfo:
|
|
@@ -92,6 +92,27 @@
|
|
|
92
92
|
```
|
|
93
93
|
|
|
94
94
|
## Vlaky
|
|
95
|
+
|
|
96
|
+
### Parsování stanoviště (`stan`) u vlaků
|
|
97
|
+
|
|
98
|
+
Atribut `stan` v elementu `<zast>` u vlaků může obsahovat složený řetězec ve formátu `část1/část2` nebo `část1 část2` (např. `5S/22S`, `-/6`, `2/3`). Jako kanonický kód nástupiště se použije **první platný segment** – první token oddělený lomítkem nebo mezerou, pokud není prázdný nebo `-`.
|
|
99
|
+
|
|
100
|
+
Příklady výsledků po parsování:
|
|
101
|
+
|
|
102
|
+
| Vstup (`stan`) | Výsledný `platform_code` |
|
|
103
|
+
|---|---|
|
|
104
|
+
| `1/3` | `1` |
|
|
105
|
+
| `-/BUS` | `BUS` |
|
|
106
|
+
| `2/100V` | `2` |
|
|
107
|
+
| `5A/- A C` | `5A` |
|
|
108
|
+
| `5S/22S` | `5S` |
|
|
109
|
+
|
|
110
|
+
Parsování provádí `MpvStopParser.parsePlatformCode()`. Výsledný kód je uložen jako `cis_stop_platform_code` v tabulce `vehiclepositions_positions` a na výstupu se pro vlaky preferuje před GTFS `platform_code` (viz `PlatformCodeResolver`).
|
|
111
|
+
|
|
112
|
+
### Zprávy s informací o nástupišti jako syntetická poloha
|
|
113
|
+
|
|
114
|
+
Pokud MPVNet zpráva vlaku obsahuje informaci o nástupišti (`$.stan`) pro budoucí zastávku a vlak ještě nemá žádnou aktivní RT polohu, vytvoří se syntetická poloha ve stavu `before_track` na základě dat z této zastávky. Díky tomu lze zobrazit kód nástupiště ještě před fyzickým příjezdem vlaku na stanoviště. Kód nástupiště se parsuje stejným způsobem jako výše (`MpvStopParser.parsePlatformCode()`).
|
|
115
|
+
|
|
95
116
|
```xml
|
|
96
117
|
<?xml version="1.0" encoding="utf-8"?>
|
|
97
118
|
|
|
@@ -15,11 +15,11 @@
|
|
|
15
15
|
- **lat** - zeměpisná šířka
|
|
16
16
|
- **lng** - zeměpisná délka
|
|
17
17
|
- **akt** - poslední projetá zastávka, nepoužíváme
|
|
18
|
-
- **takt** -
|
|
18
|
+
- **takt** - čas události (reálný čas příjezdu/odjezdu vozidla na zastávce); mapuje se na `scheduled_timestamp`
|
|
19
19
|
- **konc** - poslední ASW zastávka spoje, nepoužíváme
|
|
20
|
-
- **tjr** -
|
|
20
|
+
- **tjr** - plánovaný čas podle jízdního řádu (v jaký čas mělo vozidlo na daném bodě být); nepoužíváme pro určení pozice
|
|
21
21
|
- **pkt** - identifikátor zprávy z vozidla/číslo TCP packetu??? Nepoužíváme
|
|
22
|
-
- **tm** -
|
|
22
|
+
- **tm** - čas přenosu zprávy od DPP (transmission time); odpovídá aktuální zeměpisné poloze vozidla (lat/lng); mapuje se na `origin_timestamp`
|
|
23
23
|
- **events** - událost asociovaná se zprávou
|
|
24
24
|
- P - příjezd do zastávky
|
|
25
25
|
- O - odjezd ze zastávky
|
|
@@ -14,11 +14,11 @@
|
|
|
14
14
|
- **lat** - zeměpisná šířka
|
|
15
15
|
- **lng** - zeměpisná délka
|
|
16
16
|
- **akt** - poslední projetá zastávka, nepoužíváme
|
|
17
|
-
- **takt** -
|
|
17
|
+
- **takt** - čas události (reálný čas příjezdu/odjezdu vozidla na zastávce); mapuje se na `scheduled_timestamp`
|
|
18
18
|
- **konc** - poslední ASW zastávka spoje, nepoužíváme
|
|
19
|
-
- **tjr** -
|
|
19
|
+
- **tjr** - plánovaný čas podle jízdního řádu (v jaký čas mělo vozidlo na daném bodě být); nepoužíváme pro určení pozice
|
|
20
20
|
- **pkt** - identifikátor zprávy z vozidla/číslo TCP packetu??? Nepoužíváme
|
|
21
|
-
- **tm** -
|
|
21
|
+
- **tm** - čas přenosu zprávy od DPP (transmission time); odpovídá aktuální zeměpisné poloze vozidla (lat/lng); mapuje se na `origin_timestamp`
|
|
22
22
|
- **events** - událost asociovaná se zprávou
|
|
23
23
|
- P - příjezd do zastávky
|
|
24
24
|
- O - odjezd ze zastávky
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
- duplikace vlakových spojů a pozic podle block id (určení tracking podle cis stop id)
|
|
14
14
|
- obohacení spojů GTFS daty (včetně oběhu a kmenové linky)
|
|
15
15
|
- upsert asociovaných pozic
|
|
16
|
+
- **syntetická poloha z informace o nástupišti**: pokud zpráva obsahuje atribut `$.stan` pro budoucí zastávku a vlak ještě nemá aktivní RT polohu, vytvoří se syntetická pozice ve stavu `before_track` pro tuto zastávku – umožňuje zobrazit kód nástupiště před fyzickým příjezdem vlaku
|
|
16
17
|
- spoje se pošlou do fronty `updateDelay`
|
|
17
18
|
- updateDelay
|
|
18
19
|
- opět duplikace vlakových spojů, upsert asociovaných pozic
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
- pokud je tramvaj, je `tracking 2`
|
|
15
15
|
- nebo pokud je autobus
|
|
16
16
|
- pokud vozidlo odeslalo zprávu `O`, je `tracking 2`
|
|
17
|
-
- pokud je vozidlo v první zastávce (tjr), nebo pokud vozidlo vyjelo z první zastávky (takt), je `tracking 2`
|
|
17
|
+
- pokud je vozidlo v první zastávce (dle `tjr` — plánovaný čas JŘ), nebo pokud vozidlo vyjelo z první zastávky (dle `takt` — čas události), je `tracking 2`
|
|
18
18
|
- nebo je `tjr` atribut větší než příjezd do první zastávky spoje, je `tracking 2`
|
|
19
19
|
- jinak je `tracking 0`
|
|
20
20
|
- Rovněž se podle kmenové linky a oběhu vytvoří následující spoje (stav je `unknown`, `tracking` je vždy 0)
|
|
@@ -33,6 +33,7 @@
|
|
|
33
33
|
- pokud je pozice duplicitní (existuje pozice se stejným `origin_timestamp`), stav je `duplicate`
|
|
34
34
|
- pokud vozidlo jede do garáže, je stav `invisible`
|
|
35
35
|
- jinak je stav `after_track`
|
|
36
|
+
- **zvláštní případ**: pokud má pozice `cis_last_stop_id = null`, stav se znovu nevyhodnocuje – pozice si zachovává poslední známý stav (zmrazení stavu); to zabraňuje nežádoucímu cyklování zpět do `untracked` pouze kvůli chybějící CIS zastávce
|
|
36
37
|
- Tracking (`tracking` je `2`)
|
|
37
38
|
- pokud je vozidlo 200 metrů od nejblizšího bodu na trase, stav je `off_track`
|
|
38
39
|
- pokud je vozidlo v zastávce, je stav `at_stop`
|