@golemio/pid 5.7.2 → 5.7.3-dev.2378110705

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.
Files changed (112) hide show
  1. package/dist/const.d.ts +0 -1
  2. package/dist/const.js +1 -2
  3. package/dist/const.js.map +1 -1
  4. package/dist/integration-engine/ropid-gtfs/data-access/cache/NotPublicVehiclesRedisRepository.d.ts +14 -0
  5. package/dist/integration-engine/ropid-gtfs/data-access/cache/NotPublicVehiclesRedisRepository.js +47 -0
  6. package/dist/integration-engine/ropid-gtfs/data-access/cache/NotPublicVehiclesRedisRepository.js.map +1 -0
  7. package/dist/integration-engine/ropid-gtfs/datasources/StaticDataSourceFactory.d.ts +3 -2
  8. package/dist/integration-engine/ropid-gtfs/datasources/StaticDataSourceFactory.js +4 -2
  9. package/dist/integration-engine/ropid-gtfs/datasources/StaticDataSourceFactory.js.map +1 -1
  10. package/dist/integration-engine/ropid-gtfs/datasources/static-data/NotPublicVehiclesDataSourceProvider.d.ts +9 -0
  11. package/dist/integration-engine/ropid-gtfs/datasources/static-data/NotPublicVehiclesDataSourceProvider.js +47 -0
  12. package/dist/integration-engine/ropid-gtfs/datasources/static-data/NotPublicVehiclesDataSourceProvider.js.map +1 -0
  13. package/dist/integration-engine/ropid-gtfs/ioc/Di.js +6 -0
  14. package/dist/integration-engine/ropid-gtfs/ioc/Di.js.map +1 -1
  15. package/dist/integration-engine/ropid-gtfs/ioc/RopidGtfsContainerToken.d.ts +3 -0
  16. package/dist/integration-engine/ropid-gtfs/ioc/RopidGtfsContainerToken.js +3 -0
  17. package/dist/integration-engine/ropid-gtfs/ioc/RopidGtfsContainerToken.js.map +1 -1
  18. package/dist/integration-engine/ropid-gtfs/workers/timetables/TimetableWorker.js +1 -0
  19. package/dist/integration-engine/ropid-gtfs/workers/timetables/TimetableWorker.js.map +1 -1
  20. package/dist/integration-engine/ropid-gtfs/workers/timetables/tasks/EnsureCacheTask.d.ts +9 -0
  21. package/dist/integration-engine/ropid-gtfs/workers/timetables/tasks/EnsureCacheTask.js +49 -0
  22. package/dist/integration-engine/ropid-gtfs/workers/timetables/tasks/EnsureCacheTask.js.map +1 -0
  23. package/dist/integration-engine/ropid-gtfs/workers/timetables/tasks/SaveStaticDataTask.d.ts +6 -1
  24. package/dist/integration-engine/ropid-gtfs/workers/timetables/tasks/SaveStaticDataTask.js +39 -10
  25. package/dist/integration-engine/ropid-gtfs/workers/timetables/tasks/SaveStaticDataTask.js.map +1 -1
  26. package/dist/integration-engine/vehicle-positions/ioc/Di.js +2 -0
  27. package/dist/integration-engine/vehicle-positions/ioc/Di.js.map +1 -1
  28. package/dist/integration-engine/vehicle-positions/ioc/VPContainerToken.d.ts +1 -0
  29. package/dist/integration-engine/vehicle-positions/ioc/VPContainerToken.js +1 -0
  30. package/dist/integration-engine/vehicle-positions/ioc/VPContainerToken.js.map +1 -1
  31. package/dist/integration-engine/vehicle-positions/workers/runs/helpers/BusMessageFilter.d.ts +10 -5
  32. package/dist/integration-engine/vehicle-positions/workers/runs/helpers/BusMessageFilter.js +37 -11
  33. package/dist/integration-engine/vehicle-positions/workers/runs/helpers/BusMessageFilter.js.map +1 -1
  34. package/dist/integration-engine/vehicle-positions/workers/runs/helpers/CommonMessageProcessor.d.ts +4 -1
  35. package/dist/integration-engine/vehicle-positions/workers/runs/helpers/CommonMessageProcessor.js +22 -9
  36. package/dist/integration-engine/vehicle-positions/workers/runs/helpers/CommonMessageProcessor.js.map +1 -1
  37. package/dist/integration-engine/vehicle-positions/workers/runs/helpers/TramMessageFilter.d.ts +7 -3
  38. package/dist/integration-engine/vehicle-positions/workers/runs/helpers/TramMessageFilter.js +28 -10
  39. package/dist/integration-engine/vehicle-positions/workers/runs/helpers/TramMessageFilter.js.map +1 -1
  40. package/dist/integration-engine/vehicle-positions/workers/runs/helpers/interfaces/ICommonMessageFilter.d.ts +1 -1
  41. package/dist/integration-engine/vehicle-positions/workers/runs/tasks/SaveBusRunsToDBTask.js +1 -1
  42. package/dist/integration-engine/vehicle-positions/workers/runs/tasks/SaveBusRunsToDBTask.js.map +1 -1
  43. package/dist/integration-engine/vehicle-positions/workers/runs/tasks/SaveTramRunsToDBTask.js +1 -1
  44. package/dist/integration-engine/vehicle-positions/workers/runs/tasks/SaveTramRunsToDBTask.js.map +1 -1
  45. package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/interfaces/IUpdateRunsGtfsTripInput.d.ts +6 -0
  46. package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/tasks/UpdateRunsGtfsTripIdTask.js +3 -2
  47. package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/tasks/UpdateRunsGtfsTripIdTask.js.map +1 -1
  48. package/dist/output-gateway/public/data-access/redis/PublicGtfsDepartureRepository.js +0 -1
  49. package/dist/output-gateway/public/data-access/redis/PublicGtfsDepartureRepository.js.map +1 -1
  50. package/dist/output-gateway/public/service/facade/DetailedTripFacade.js +1 -1
  51. package/dist/output-gateway/public/service/facade/DetailedTripFacade.js.map +1 -1
  52. package/dist/output-gateway/public/service/helpers/trip-scope/strategy/ShapesTripScopeHandler.js +1 -1
  53. package/dist/output-gateway/public/service/helpers/trip-scope/strategy/ShapesTripScopeHandler.js.map +1 -1
  54. package/dist/output-gateway/public/service/helpers/trip-scope/strategy/StopTimesTripScopeHandler.js +1 -1
  55. package/dist/output-gateway/public/service/helpers/trip-scope/strategy/StopTimesTripScopeHandler.js.map +1 -1
  56. package/dist/output-gateway/vehicle-positions/data-access/PositionRepository.d.ts +10 -3
  57. package/dist/output-gateway/vehicle-positions/data-access/PositionRepository.js +30 -7
  58. package/dist/output-gateway/vehicle-positions/data-access/PositionRepository.js.map +1 -1
  59. package/dist/output-gateway/vehicle-positions/data-access/TripRepository.d.ts +7 -3
  60. package/dist/output-gateway/vehicle-positions/data-access/TripRepository.js +30 -7
  61. package/dist/output-gateway/vehicle-positions/data-access/TripRepository.js.map +1 -1
  62. package/dist/output-gateway/vehicle-positions/data-access/VehicleDescriptorRepository.d.ts +10 -3
  63. package/dist/output-gateway/vehicle-positions/data-access/VehicleDescriptorRepository.js +30 -7
  64. package/dist/output-gateway/vehicle-positions/data-access/VehicleDescriptorRepository.js.map +1 -1
  65. package/dist/output-gateway/vehicle-positions/data-access/VehicleTypeRepository.d.ts +10 -3
  66. package/dist/output-gateway/vehicle-positions/data-access/VehicleTypeRepository.js +30 -7
  67. package/dist/output-gateway/vehicle-positions/data-access/VehicleTypeRepository.js.map +1 -1
  68. package/dist/output-gateway/vehicle-positions/data-access/cache/NotPublicVehiclesRedisRepository.d.ts +10 -0
  69. package/dist/output-gateway/vehicle-positions/data-access/cache/NotPublicVehiclesRedisRepository.js +45 -0
  70. package/dist/output-gateway/vehicle-positions/data-access/cache/NotPublicVehiclesRedisRepository.js.map +1 -0
  71. package/dist/output-gateway/vehicle-positions/data-access/index.js +9 -18
  72. package/dist/output-gateway/vehicle-positions/data-access/index.js.map +1 -1
  73. package/dist/output-gateway/vehicle-positions/data-access/interfaces/ITripWithPositionRepository.d.ts +3 -2
  74. package/dist/output-gateway/vehicle-positions/data-access/interfaces/IVPRepositoryInstances.d.ts +6 -6
  75. package/dist/output-gateway/vehicle-positions/data-access/views/ProcessedPositionRepository.d.ts +7 -3
  76. package/dist/output-gateway/vehicle-positions/data-access/views/ProcessedPositionRepository.js +30 -7
  77. package/dist/output-gateway/vehicle-positions/data-access/views/ProcessedPositionRepository.js.map +1 -1
  78. package/dist/output-gateway/vehicle-positions/data-access/views/TripWithLastPositionRepository.d.ts +17 -7
  79. package/dist/output-gateway/vehicle-positions/data-access/views/TripWithLastPositionRepository.js +112 -42
  80. package/dist/output-gateway/vehicle-positions/data-access/views/TripWithLastPositionRepository.js.map +1 -1
  81. package/dist/output-gateway/vehicle-positions/ioc/Di.d.ts +3 -0
  82. package/dist/output-gateway/vehicle-positions/ioc/Di.js +23 -0
  83. package/dist/output-gateway/vehicle-positions/ioc/Di.js.map +1 -0
  84. package/dist/output-gateway/vehicle-positions/ioc/OgVehiclePositionsToken.d.ts +9 -0
  85. package/dist/output-gateway/vehicle-positions/ioc/OgVehiclePositionsToken.js +15 -0
  86. package/dist/output-gateway/vehicle-positions/ioc/OgVehiclePositionsToken.js.map +1 -0
  87. package/dist/schema-definitions/datasources/static-data/NotPublicVehiclesJsonSchema.d.ts +3 -0
  88. package/dist/schema-definitions/datasources/static-data/NotPublicVehiclesJsonSchema.js +40 -0
  89. package/dist/schema-definitions/datasources/static-data/NotPublicVehiclesJsonSchema.js.map +1 -0
  90. package/dist/schema-definitions/datasources/static-data/index.d.ts +1 -0
  91. package/dist/schema-definitions/datasources/static-data/index.js +1 -0
  92. package/dist/schema-definitions/datasources/static-data/index.js.map +1 -1
  93. package/dist/schema-definitions/datasources/static-data/interfaces/NotPublicVehiclesDataInterface.d.ts +35 -0
  94. package/dist/schema-definitions/datasources/static-data/interfaces/NotPublicVehiclesDataInterface.js +18 -0
  95. package/dist/schema-definitions/datasources/static-data/interfaces/NotPublicVehiclesDataInterface.js.map +1 -0
  96. package/dist/schema-definitions/datasources/static-data/interfaces/index.d.ts +1 -0
  97. package/dist/schema-definitions/datasources/static-data/interfaces/index.js +1 -0
  98. package/dist/schema-definitions/datasources/static-data/interfaces/index.js.map +1 -1
  99. package/dist/schema-definitions/ropid-gtfs/redis/const.d.ts +2 -0
  100. package/dist/schema-definitions/ropid-gtfs/redis/const.js +3 -1
  101. package/dist/schema-definitions/ropid-gtfs/redis/const.js.map +1 -1
  102. package/dist/schema-definitions/vehicle-positions/models/interfaces/ICommonRunWithMessageDto.d.ts +6 -0
  103. package/docs/asyncapi.yaml +17 -2
  104. package/docs/cache/types/redis.md +58 -2
  105. package/docs/examples/not_public_vehicles.json +9 -0
  106. package/docs/implementation_documentation.md +116 -3
  107. package/docs/jis/index.md +17 -0
  108. package/docs/processing/input_realtime_data/http_mpvnet.md +21 -0
  109. package/docs/processing/state_position_tracking/http_mpvnet.md +1 -0
  110. package/docs/processing/state_position_tracking/tcp_dpp_common.md +1 -0
  111. package/docs/processing/transferboards_filtering.md +312 -0
  112. package/package.json +8 -5
@@ -275,6 +275,7 @@ flowchart TD
275
275
  - `vpPublicCache:$setId:canceled-trips-$gtfsTripId` - JSON jako string s informacemi o zrušeném spoji. Využití v public odjezdech
276
276
  - TTL 1 minuta
277
277
  - Nová datová sada se generuje přibližně jednou za 3 vteřiny a obsahuje všechny RT spoje (aktivní, budoucí a zrušené)
278
+ - Populace `future-trip-*`, `future-vehicle-*` a `canceled-trips-*` sub-klíčů je řízena stavem spoje (před trasou / zrušen) a nesouvisí s logikou deduplikace odjezdů v `/v2/public/departureboards` – ta pracuje nad `gtfsPublicDepartureCache` a tuto cache neovlivňuje
278
279
 
279
280
  ### vpPublicStopTimeCache:*
280
281
 
@@ -294,14 +295,29 @@ flowchart TD
294
295
  ### gtfsPublicDepartureCache:*
295
296
 
296
297
  - Klíč `gtfsPublicDepartureCache:*`, kde `*` je GTFS id zastávky
297
- - Hodnota je sorted set, kde score je unix timestamp odjezdu v sekundách a member jsou relevantní informace o odjezdu
298
+ - Hodnota je sorted set, kde score je unix timestamp odjezdu v sekundách a member je JSON string s informacemi o odjezdu:
299
+ - `stop_id` – GTFS id zastávky
300
+ - `departure_datetime` – plánovaný čas odjezdu (ISO 8601)
301
+ - `arrival_datetime` – plánovaný čas příjezdu (ISO 8601), nebo `null`
302
+ - `route_short_name` – název linky
303
+ - `route_type` – typ dopravy (GTFS route_type)
304
+ - `trip_id` – GTFS id spoje
305
+ - `stop_sequence` – pořadí zastávky v spoji
306
+ - `platform_code` – označení nástupiště, nebo `null`
307
+ - `trip_headsign` – cílová zastávka spoje (nebo `stop_headsign`, pokud je definován)
308
+ - `trip_headsign_icons` – ikony přestupů u cílové zastávky jako řetězec dvouznaková kódů (např. `"MbMcSb"`), nebo `null`
309
+ - `connections` – seznam garantovaných přestupů čekajících na tento spoj, nebo `null`; každý záznam obsahuje:
310
+ - `from_trip_id` – GTFS id spoje, na který se čeká
311
+ - `max_wait_sec` – maximální čekací doba v sekundách
312
+ - Přednačítá se z tabulky `ropidgtfs_precomputed_trip_connections` (původně z `transfers.txt` kde `transfer_type = 1`), JOIN na odjezdy přes `to_trip_id` a `to_stop_id`
313
+ - `wheelchair_accessible` – přístupnost vozidla pro vozíčkáře z GTFS `trips.txt` (`0` = bez informace, `1` = přístupné, `2` = nepřístupné), nebo `null`
298
314
  - Existuje záznam pro každou zastávku v GTFS. Pokud v ní ale není žádný odjezd, je vyplněný pouze jeden prázdný member - detekce validní zastávky bez odjezdu
299
315
  - TTL 7 hodin
300
316
  - Retence dat aktivní, jednou za hodinu se smažou všechny odjezdy starší než 3 hodiny
301
317
  - Jednou za hodinu se vygenerují nové odjezdy pro všechny zastávky v intervalu +5 hodin až +7 hodin, po přenačtení JŘ se přegenerují všechny odjezdy v interval -3 hodiny až +7 hodin
302
318
  - Ukládá se pomocí `ZADD`, čte se pomocí `ZRANGEBYSCORE` (-inf, now + `minutesAfter`)
303
319
  - Využití v public odjezdech
304
- - Využití v endpointu přestupních tabulí
320
+ - Využití v endpointu přestupních tabulí (`/v4/pid/transferboards`)
305
321
 
306
322
  ### Flowchart (refresh)
307
323
 
@@ -528,3 +544,43 @@ flowchart LR
528
544
  ![flowchart.svg](../../assets/V4Transferboards.svg)
529
545
 
530
546
  link na .drawio [soubor](../../assets/V4Transferboards.drawio)
547
+
548
+ ## Cache pro konfiguraci
549
+
550
+ ### config:notPublicVehicles
551
+
552
+ - Klíč `config:notPublicVehicles` (jednoduchý klíč, žádný wildcard)
553
+ - Hodnota je JSON string struktury `INotPublicVehicles`:
554
+ - `tram.registrationNumbers` – seznam evidenčních čísel tramvají bez platného GTFS spoje
555
+ - `road.registrationNumbers` – seznam evidenčních čísel autobusů a trolejbusů bez platného GTFS spoje (`road` pokrývá obě kategorie, protože sdílejí číselnou řadu)
556
+ - `routeIds` – whitelist čísel linek (např. `"861"` pro náhradní autobus X-C při výluce metra C) zobrazovaných i bez platného JŘ spoje
557
+ - TTL žádné – hodnota se přepíše při každém spuštění `SaveStaticDataTask` (po načtení nových JŘ)
558
+ - Zapisuje `NotPublicVehiclesRedisRepository` (IE), čte `TripsRepository` / `PositionsMapper` (IE) a `UpdateRunsGtfsTripIdTask` (IE) pro povolení průchodu vozidel bez GTFS spoje
559
+
560
+ ## Manuální refresh cache (EnsureCacheTask)
561
+
562
+ `EnsureCacheTask` slouží jako manuální spouštěč obnovy všech 4 caches, jejichž data nejsou real-time obnovována. Po přijetí prázdné zprávy na frontě `vehicle-positions.ropidgtfs.ensureCache` odešle paralelně prázdné zprávy do všech 4 cílových front. Dvě z nich míří do různých workerů (cross-worker routing přes RabbitMQ exchange), dvě míří do stejného workeru (TimetableWorker).
563
+
564
+ ### Flowchart
565
+
566
+ ```mermaid
567
+ flowchart LR
568
+ trigger["`Zpráva do fronty ensureCache`"]
569
+ task["`EnsureCacheTask (TimetableWorker)`"]
570
+
571
+ exchange_vp["`Exchange ${RABBIT_EXCHANGE_NAME}.vehiclepositions (VPWorker)`"]
572
+ exchange_self["`Exchange this.queuePrefix (TimetableWorker)`"]
573
+ exchange_jis["`Exchange ${RABBIT_EXCHANGE_NAME}.jis (JISWorker)`"]
574
+
575
+ q1["`AMQP refreshGTFSTripData`"]
576
+ q2["`AMQP refreshPublicGtfsDepartureCache`"]
577
+ q3["`AMQP refreshGtfsStopsCache`"]
578
+ q4["`AMQP refreshJISInfotextsCache`"]
579
+
580
+ trigger --> task
581
+ task -- cross-worker --> exchange_vp --> q1
582
+ task -- same-worker --> exchange_self --> q2
583
+ exchange_self --> q3
584
+ task -- cross-worker --> exchange_jis --> q4
585
+ ```
586
+
@@ -0,0 +1,9 @@
1
+ {
2
+ "tram": {
3
+ "registrationNumbers": ["2210", "5572"]
4
+ },
5
+ "road": {
6
+ "registrationNumbers": ["1234", "5678", "9999"]
7
+ },
8
+ "routeIds": ["X1", "X2", "X3", "NAD"]
9
+ }
@@ -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,39 @@ 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.
638
+
639
+ #### task _EnsureCacheTask_
640
+
641
+ Task slouží jako ruční spouštěč obnovení všech cache. Nespouští se automaticky – pouze manuálním odesláním zprávy do fronty.
642
+
643
+ - vstupní rabbitmq fronta
644
+ - název: vehicle-positions.ropidgtfs.ensureCache
645
+ - TTL: 5 minut
646
+ - parametry: žádné
647
+ - závislé fronty (do kterých jsou odesílány zprávy z metody workeru)
648
+ - název: vehicle-positions.vehiclepositions.refreshGTFSTripData
649
+ - název: vehicle-positions.ropidgtfs.refreshPublicGtfsDepartureCache
650
+ - název: vehicle-positions.ropidgtfs.refreshGtfsStopsCache
651
+ - název: vehicle-positions.jis.refreshJISInfotextsCache
652
+ - datové zdroje
653
+ - žádné
654
+ - transformace
655
+ - žádné
656
+ - data modely
657
+ - žádné
619
658
 
620
659
 
621
660
 
@@ -1062,6 +1101,18 @@ Worker má na starost generování souborů s realtime daty pro `gtfsrt` endpoin
1062
1101
  - VPTripsModel `vehiclepositions_trips`
1063
1102
  - VPPositionsModel `vehiclepositions_positions`
1064
1103
 
1104
+ **`wheelchairAccessible` ve VehicleDescriptor**
1105
+
1106
+ Pole `wheelchairAccessible` je součástí standardního `VehicleDescriptor` ve feedech `vehicle_positions.pb` a `pid_feed.pb`:
1107
+
1108
+ | Interní hodnota | Proto enum |
1109
+ |---|---|
1110
+ | `null` | `WHEELCHAIR_ACCESSIBLE_UNSPECIFIED = 0` |
1111
+ | `true` | `WHEELCHAIR_ACCESSIBLE = 1` |
1112
+ | `false` | `WHEELCHAIR_INACCESSIBLE = 2` |
1113
+
1114
+ 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.
1115
+
1065
1116
  **Určení zpoždění v trip_updates.pb**
1066
1117
 
1067
1118
  Predikce odjezdů probíhá podle vzorce:
@@ -1167,6 +1218,10 @@ Worker má na starost stahování VYMI (JIS) událostí a infotextů, jejich tra
1167
1218
  - data modely
1168
1219
  - JISEventsModel `jis_events`
1169
1220
  - JISEventsRopidGTFSRoutesModel `jis_events_ropidgtfs_routes`
1221
+ - poznámky k datovému modelu
1222
+ - 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
1223
+ - pole `cause_detail` je volný text zpřesňující příčinu události; může být `null`
1224
+ - pole `cause` obsahuje překlady do češtiny i angličtiny; anglické hodnoty jsou zahrnuty i ve výstupu GTFS-RT alert feedu
1170
1225
 
1171
1226
  #### _task: RefreshJISInfotextsTask_
1172
1227
 
@@ -1261,7 +1316,7 @@ Worker má na starost stahování VYMI (JIS) událostí a infotextů, jejich tra
1261
1316
  - retence dat
1262
1317
  - jízdní řády se generují 1-2x denně na 14 dní dopředu
1263
1318
  - polohová data si uchováváme 24 hodin (30 minut od poslední aktualizace, poté v historických tabulkách)
1264
- - popis vozidel si uchováváme 24 hodin
1319
+ - popis vozidel se nepromazává přetrvávají do přepsání novými daty (fixní TTL bylo odstraněno)
1265
1320
  - preset logy si uchováváme 8 hodin
1266
1321
  - JIS události a infotexty si uchováváme neomezeně
1267
1322
 
@@ -1404,6 +1459,12 @@ Worker má na starost stahování VYMI (JIS) událostí a infotextů, jejich tra
1404
1459
 
1405
1460
  - zdrojové tabulky
1406
1461
  - `ropidgtfs_precomputed_departures`, `ropidgtfs_stops`, `ropidgtfs_cis_stops`, `jis_infotexts`, `jis_infotexts_ropidgtfs_stops`, `ropid_departures_directions`, `vehiclepositions_positions`, `vehiclepositions_trips`
1462
+ - odpověď obsahuje hlavičku `X-Golemio-Preset-Metadata: airConditionPossible=0|1`
1463
+ - `1` pokud byl zadán query parametr `airCondition` s pravdivou hodnotou, `0` jinak
1464
+ - slouží monitorovacím systémům (preset systémy monitorovacího centra ROPID) k detekci aktivního filtrování dle klimatizace
1465
+ - kód nástupiště (`platform_code`)
1466
+ - **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ů))
1467
+ - **ostatní typy**: používá se GTFS `platform_code` ze `stop_times.txt`
1407
1468
 
1408
1469
  ### PID Departure Boards v3
1409
1470
 
@@ -1411,6 +1472,42 @@ Worker má na starost stahování VYMI (JIS) událostí a infotextů, jejich tra
1411
1472
 
1412
1473
  - načte odjezdy pro přestupní tabule ve vozidlech a aktivní infotexty exportované z aplikace VYMI (JIS) Infotexty
1413
1474
 
1475
+ ### PID Departure Boards v4
1476
+
1477
+ #### _/v4/pid/transferboards_
1478
+
1479
+ - 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
1480
+ - parametry
1481
+ - `aswId` + `vehicleRegistrationNumber` + `routeType` – identifikace zastávky a vozidla přes ASW číselník (vzájemně se vylučuje s `cisId`+`tripNumber`)
1482
+ - `cisId` + `tripNumber` – identifikace zastávky a spoje přes CIS číselník (zatím neimplementováno, vrací 501)
1483
+ - `timeFrom` – volitelný ISO8601 čas příjezdu (pokud není zadán, použije se reálný čas příjezdu z RT dat)
1484
+ - `limit` – volitelný počet odjezdů (výchozí 8, max 30)
1485
+ - cachováno na 5 sekund (stale-while-revalidate 5 sekund)
1486
+ - zdrojové cache záznamy
1487
+ - `gtfsStopsCache:*` – převod ASW node ID na GTFS stop_id
1488
+ - `gtfsDelayComputation:*` – zjištění zastávek spoje a predikovaného času příjezdu
1489
+ - `vpPublicCache:*` – aktuální poloha a zpoždění vozidla
1490
+ - `gtfsPublicDepartureCache:*` – statické odjezdy ze zastávek (vč. `connections` a `wheelchair_accessible`)
1491
+ - `vpPublicStopTimeCache:*` – live zastávkové časy pro spoje se známou polohou
1492
+ - `jisCache:*` – aktivní infotexty pro dané zastávky
1493
+ - načítání odjezdů z cache (`gtfsPublicDepartureCache`)
1494
+ - 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
1495
+ - 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)
1496
+ - garantované přestupy (`is_guaranteed_transfer`)
1497
+ - 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`
1498
+ - 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)
1499
+ - 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
1500
+ - typy "vždy zobrazit" (metro, vlak, přívoz, lanovka) filtr `findRelevantTripIdsFromLines` zcela přeskakují
1501
+ - dostupnost pro vozíčkáře (`is_wheelchair_accessible`)
1502
+ - **metro**: určeno výhradně podle `wheelchair_boarding` zastávky (hodnota `1` = přístupná)
1503
+ - **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)
1504
+ - seskupování a omezení výstupu (`TransferDepartureCacheTransformation`)
1505
+ - **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[]`
1506
+ - **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`
1507
+ - konfigurace filtrování opačného směru (backtracking)
1508
+ - `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`
1509
+ - `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
1510
+
1414
1511
  #### _/v3/pid/infotexts_
1415
1512
 
1416
1513
  - načte aktivní infotexty exportované z aplikace VYMI (JIS) Infotexty
@@ -1458,4 +1555,20 @@ Worker má na starost stahování VYMI (JIS) událostí a infotextů, jejich tra
1458
1555
  - podle názvů linek a jak daleko do budoucnosti se mají odjezdy navracet
1459
1556
  - limitování počtu odjezdů v každé skupině
1460
1557
  - 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
1558
+ - 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`
1559
+ - dostupnost pro vozíčkáře (`is_wheelchair_accessible`) se určuje v pořadí priority:
1560
+ 1. RT descriptor vozidla (`detailed_info.is_wheelchair_accessible` z vehicle positions)
1561
+ 2. GTFS statický příznak `wheelchair_accessible` z `trips.txt` (`1` = přístupné), pokud RT data nejsou k dispozici
1461
1562
  - 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`)
1563
+
1564
+ ### JIS v1
1565
+
1566
+ #### _/v1/jis/events/custom-format_
1567
+
1568
+ - vrátí seznam publikovaných událostí ve vlastním formátu pro externí konzumenty (fallback endpoint pro webhooky)
1569
+ - parametry
1570
+ - `displayPeriodStart` / `displayPeriodEnd` – filtrování podle překryvu zobrazovacího okna události s požadovaným rozsahem (ISO 8601)
1571
+ - `organizationNames` – filtrování podle organizace (pole řetězců)
1572
+ - `type` – filtrování podle typu události (`INCIDENT`, `DISRUPTION`, `SERVICE_CHANGE`)
1573
+ - zdrojové tabulky: `jis_events`, `jis_events_ropidgtfs_routes`
1574
+ - 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.
@@ -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
 
@@ -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
@@ -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`