@golemio/pid 6.4.1-dev.3053867815 → 6.4.1-dev.3054859807

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 (86) hide show
  1. package/db/example/00_clear_test_data.sql +1 -0
  2. package/db/example/24_jis_delayed_segments.sql +142 -0
  3. package/db/migrations/postgresql/20261027100000-jis-delayed-segments.js +16 -0
  4. package/db/migrations/postgresql/sqls/20250127134438-departure-additional-indexes-down.sql +20 -2
  5. package/db/migrations/postgresql/sqls/20261027100000-jis-delayed-segments-down.sql +17 -0
  6. package/db/migrations/postgresql/sqls/20261027100000-jis-delayed-segments-up.sql +42 -0
  7. package/dist/integration-engine/jis/datasources/JISDelayedSegmentsDataSourceFactory.d.ts +9 -0
  8. package/dist/integration-engine/jis/datasources/JISDelayedSegmentsDataSourceFactory.js +54 -0
  9. package/dist/integration-engine/jis/datasources/JISDelayedSegmentsDataSourceFactory.js.map +1 -0
  10. package/dist/integration-engine/jis/ioc/Di.js +10 -0
  11. package/dist/integration-engine/jis/ioc/Di.js.map +1 -1
  12. package/dist/integration-engine/jis/ioc/JISContainerToken.d.ts +5 -0
  13. package/dist/integration-engine/jis/ioc/JISContainerToken.js +5 -0
  14. package/dist/integration-engine/jis/ioc/JISContainerToken.js.map +1 -1
  15. package/dist/integration-engine/jis/repositories/JISDelayedSegmentEnrichmentRepository.d.ts +14 -0
  16. package/dist/integration-engine/jis/repositories/JISDelayedSegmentEnrichmentRepository.js +69 -0
  17. package/dist/integration-engine/jis/repositories/JISDelayedSegmentEnrichmentRepository.js.map +1 -0
  18. package/dist/integration-engine/jis/repositories/JISDelayedSegmentsRepository.d.ts +23 -0
  19. package/dist/integration-engine/jis/repositories/JISDelayedSegmentsRepository.js +73 -0
  20. package/dist/integration-engine/jis/repositories/JISDelayedSegmentsRepository.js.map +1 -0
  21. package/dist/integration-engine/jis/repositories/helpers/JISDelayedSegmentEnrichmentQuery.d.ts +13 -0
  22. package/dist/integration-engine/jis/repositories/helpers/JISDelayedSegmentEnrichmentQuery.js +266 -0
  23. package/dist/integration-engine/jis/repositories/helpers/JISDelayedSegmentEnrichmentQuery.js.map +1 -0
  24. package/dist/integration-engine/jis/repositories/interfaces/IJISDelayedSegmentEnrichmentParams.d.ts +23 -0
  25. package/dist/integration-engine/jis/repositories/interfaces/IJISDelayedSegmentEnrichmentParams.js +2 -0
  26. package/dist/integration-engine/jis/repositories/interfaces/IJISDelayedSegmentEnrichmentParams.js.map +1 -0
  27. package/dist/integration-engine/jis/services/JISDelayedSegmentsDataService.d.ts +38 -0
  28. package/dist/integration-engine/jis/services/JISDelayedSegmentsDataService.js +174 -0
  29. package/dist/integration-engine/jis/services/JISDelayedSegmentsDataService.js.map +1 -0
  30. package/dist/integration-engine/jis/workers/JISWorker.js +1 -0
  31. package/dist/integration-engine/jis/workers/JISWorker.js.map +1 -1
  32. package/dist/integration-engine/jis/workers/tasks/RefreshDelayedSegmentsTask.d.ts +15 -0
  33. package/dist/integration-engine/jis/workers/tasks/RefreshDelayedSegmentsTask.js +55 -0
  34. package/dist/integration-engine/jis/workers/tasks/RefreshDelayedSegmentsTask.js.map +1 -0
  35. package/dist/output-gateway/jis/controllers/v1/V1DelayedSegmentsController.d.ts +9 -0
  36. package/dist/output-gateway/jis/controllers/v1/V1DelayedSegmentsController.js +54 -0
  37. package/dist/output-gateway/jis/controllers/v1/V1DelayedSegmentsController.js.map +1 -0
  38. package/dist/output-gateway/jis/data-access/JISDelayedSegmentsRepository.d.ts +14 -0
  39. package/dist/output-gateway/jis/data-access/JISDelayedSegmentsRepository.js +56 -0
  40. package/dist/output-gateway/jis/data-access/JISDelayedSegmentsRepository.js.map +1 -0
  41. package/dist/output-gateway/jis/domain/IJISDelayedSegmentDto.d.ts +12 -0
  42. package/dist/output-gateway/jis/domain/IJISDelayedSegmentDto.js +2 -0
  43. package/dist/output-gateway/jis/domain/IJISDelayedSegmentDto.js.map +1 -0
  44. package/dist/output-gateway/jis/dto/interfaces/IDelayedSegmentsQueryDto.d.ts +5 -0
  45. package/dist/output-gateway/jis/dto/interfaces/IDelayedSegmentsQueryDto.js +2 -0
  46. package/dist/output-gateway/jis/dto/interfaces/IDelayedSegmentsQueryDto.js.map +1 -0
  47. package/dist/output-gateway/jis/helpers/JISDelayedSegmentInfoPanelStopsFilter.d.ts +8 -0
  48. package/dist/output-gateway/jis/helpers/JISDelayedSegmentInfoPanelStopsFilter.js +13 -0
  49. package/dist/output-gateway/jis/helpers/JISDelayedSegmentInfoPanelStopsFilter.js.map +1 -0
  50. package/dist/output-gateway/jis/ioc/Di.js +6 -0
  51. package/dist/output-gateway/jis/ioc/Di.js.map +1 -1
  52. package/dist/output-gateway/jis/ioc/OgJisToken.d.ts +3 -0
  53. package/dist/output-gateway/jis/ioc/OgJisToken.js +3 -0
  54. package/dist/output-gateway/jis/ioc/OgJisToken.js.map +1 -1
  55. package/dist/output-gateway/jis/routers/v1/V1JISRouter.d.ts +2 -0
  56. package/dist/output-gateway/jis/routers/v1/V1JISRouter.js +9 -0
  57. package/dist/output-gateway/jis/routers/v1/V1JISRouter.js.map +1 -1
  58. package/dist/output-gateway/jis/transformations/JISDelayedSegmentsTransformation.d.ts +7 -0
  59. package/dist/output-gateway/jis/transformations/JISDelayedSegmentsTransformation.js +32 -0
  60. package/dist/output-gateway/jis/transformations/JISDelayedSegmentsTransformation.js.map +1 -0
  61. package/dist/schema-definitions/jis/datasources/MapaPidDelayShapesJsonSchema.d.ts +3 -0
  62. package/dist/schema-definitions/jis/datasources/MapaPidDelayShapesJsonSchema.js +16 -0
  63. package/dist/schema-definitions/jis/datasources/MapaPidDelayShapesJsonSchema.js.map +1 -0
  64. package/dist/schema-definitions/jis/datasources/interfaces/IMapaPidDelayShape.d.ts +10 -0
  65. package/dist/schema-definitions/jis/datasources/interfaces/IMapaPidDelayShape.js +2 -0
  66. package/dist/schema-definitions/jis/datasources/interfaces/IMapaPidDelayShape.js.map +1 -0
  67. package/dist/schema-definitions/jis/datasources/interfaces/index.d.ts +1 -0
  68. package/dist/schema-definitions/jis/datasources/interfaces/index.js +1 -0
  69. package/dist/schema-definitions/jis/datasources/interfaces/index.js.map +1 -1
  70. package/dist/schema-definitions/jis/models/JISDelayedSegmentsModel.d.ts +24 -0
  71. package/dist/schema-definitions/jis/models/JISDelayedSegmentsModel.js +138 -0
  72. package/dist/schema-definitions/jis/models/JISDelayedSegmentsModel.js.map +1 -0
  73. package/dist/schema-definitions/jis/models/interfaces/IJISDelayedSegment.d.ts +44 -0
  74. package/dist/schema-definitions/jis/models/interfaces/IJISDelayedSegment.js +2 -0
  75. package/dist/schema-definitions/jis/models/interfaces/IJISDelayedSegment.js.map +1 -0
  76. package/dist/schema-definitions/jis/models/interfaces/index.d.ts +1 -0
  77. package/dist/schema-definitions/jis/models/interfaces/index.js +1 -0
  78. package/dist/schema-definitions/jis/models/interfaces/index.js.map +1 -1
  79. package/docs/assets/pid_jis_erd.png +0 -0
  80. package/docs/asyncapi.yaml +15 -0
  81. package/docs/implementation_documentation.md +56 -0
  82. package/docs/index.md +1 -0
  83. package/docs/jis/delayed-segments.md +241 -0
  84. package/docs/jis/index.md +9 -0
  85. package/docs/openapi-output.yaml +176 -0
  86. package/package.json +1 -1
@@ -2346,6 +2346,63 @@ paths:
2346
2346
  $ref: "#/components/responses/BadRequestError"
2347
2347
  401:
2348
2348
  $ref: "#/components/responses/UnauthorizedError"
2349
+ /v1/jis/delayed-segments:
2350
+ get:
2351
+ tags:
2352
+ - ⚠ JIS (v1) - internal
2353
+ summary: Get all currently detected delayed segments
2354
+ description: |
2355
+ Returns segments of the network with a significant delay, detected by Mapa PID and enriched with GTFS data:
2356
+ stops of the segment, affected routes and nearby stops with info panels. Refreshed every 5 minutes.
2357
+
2358
+ A segment is a directed corridor of stops. Its `id` is derived from its endpoints; as segments may grow or shrink
2359
+ between refreshes, consumers should match segments by their stops rather than by `id`.
2360
+
2361
+ If fetching the segments fails, the last known segments are kept and their `last_detected_at` stops advancing,
2362
+ so consumers should judge freshness by `last_detected_at`. This does not cover the detection itself stalling:
2363
+ the source provides no time of its calculation, so a stalled detection keeps being fetched and
2364
+ `last_detected_at` keeps advancing.
2365
+
2366
+ Only segments with a delay of at least 5 minutes and info panel stops at most 5 stops from the segment are
2367
+ detected; the query parameters can only narrow them down further.
2368
+ parameters:
2369
+ - name: minDelaySeconds
2370
+ in: query
2371
+ required: false
2372
+ schema:
2373
+ type: integer
2374
+ minimum: 0
2375
+ example: 600
2376
+ description: Minimum `expected_delay_seconds` of the returned segments.
2377
+ - name: minDistanceStops
2378
+ in: query
2379
+ required: false
2380
+ schema:
2381
+ type: integer
2382
+ example: -2
2383
+ description: |
2384
+ Minimum `distance_stops` of info panel stop routes. Routes outside the range given by `minDistanceStops`
2385
+ and `maxDistanceStops` are left out, and so are info panel stops left without a route.
2386
+ - name: maxDistanceStops
2387
+ in: query
2388
+ required: false
2389
+ schema:
2390
+ type: integer
2391
+ example: 2
2392
+ description: Maximum `distance_stops` of info panel stop routes, see `minDistanceStops`.
2393
+ responses:
2394
+ 200:
2395
+ description: OK
2396
+ content:
2397
+ application/json:
2398
+ schema:
2399
+ type: array
2400
+ items:
2401
+ $ref: "#/components/schemas/JISDelayedSegment"
2402
+ 400:
2403
+ $ref: "#/components/responses/BadRequestError"
2404
+ 401:
2405
+ $ref: "#/components/responses/UnauthorizedError"
2349
2406
 
2350
2407
 
2351
2408
  components:
@@ -4897,3 +4954,122 @@ components:
4897
4954
  format: date-time
4898
4955
  example: "2024-02-29T12:22:20.958Z"
4899
4956
  description: Timestamp from when the event was created in VYMI
4957
+ JISDelayedSegmentStop:
4958
+ type: object
4959
+ required:
4960
+ - id
4961
+ - name
4962
+ properties:
4963
+ id:
4964
+ type: string
4965
+ example: U1234Z1P
4966
+ description: GTFS stop id
4967
+ name:
4968
+ type: string
4969
+ example: Vozovna Střešovice
4970
+ JISDelayedSegment:
4971
+ type: object
4972
+ required:
4973
+ - id
4974
+ - from_stop
4975
+ - to_stop
4976
+ - expected_delay_seconds
4977
+ - first_detected_at
4978
+ - last_detected_at
4979
+ - stops
4980
+ - routes
4981
+ - info_panel_stops
4982
+ properties:
4983
+ id:
4984
+ type: string
4985
+ example: 1234/1-5678/2
4986
+ description: Identifier of the segment derived from its endpoints
4987
+ from_stop:
4988
+ $ref: "#/components/schemas/JISDelayedSegmentStop"
4989
+ to_stop:
4990
+ $ref: "#/components/schemas/JISDelayedSegmentStop"
4991
+ expected_delay_seconds:
4992
+ type: integer
4993
+ example: 900
4994
+ description: Expected additional delay of a vehicle passing the whole segment
4995
+ first_detected_at:
4996
+ type: string
4997
+ format: date-time
4998
+ example: "2026-10-27T08:50:00.000Z"
4999
+ description: |
5000
+ Start of the current continuous detection of the segment; resets when the segment is missing from a successful
5001
+ refresh or its `id` changes
5002
+ last_detected_at:
5003
+ type: string
5004
+ format: date-time
5005
+ example: "2026-10-27T09:00:00.000Z"
5006
+ description: Time of the last detection of the segment
5007
+ stops:
5008
+ type: array
5009
+ description: |
5010
+ Stops of the segment, including its endpoints, ordered along the segment. A stop with several GTFS stop ids
5011
+ (variants) is represented by the alphabetically first of them, so its id stays the same between refreshes
5012
+ unless the GTFS stops change.
5013
+ items:
5014
+ $ref: "#/components/schemas/JISDelayedSegmentStop"
5015
+ routes:
5016
+ type: array
5017
+ description: |
5018
+ Routes with a regular trip travelling at least one hop of the segment within the configured time window
5019
+ (default 2 hours) before or after the detection
5020
+ items:
5021
+ type: object
5022
+ required:
5023
+ - id
5024
+ - short_name
5025
+ - type
5026
+ properties:
5027
+ id:
5028
+ type: string
5029
+ example: L119
5030
+ description: GTFS route id
5031
+ short_name:
5032
+ type: string
5033
+ example: "119"
5034
+ type:
5035
+ type: integer
5036
+ example: 3
5037
+ description: GTFS route type
5038
+ info_panel_stops:
5039
+ type: array
5040
+ description: |
5041
+ Stops with an info panel (departure preset) in or near the segment along the affected routes. The stop id
5042
+ is the variant the preset is assigned to, so it may differ from the id of the same stop in `stops`; a stop
5043
+ inside the segment is recognized by `distance_stops` 0.
5044
+ items:
5045
+ type: object
5046
+ required:
5047
+ - stop
5048
+ - preset_route_names
5049
+ - routes
5050
+ properties:
5051
+ stop:
5052
+ $ref: "#/components/schemas/JISDelayedSegmentStop"
5053
+ preset_route_names:
5054
+ type: array
5055
+ description: Route names of the departure presets assigned to the stop
5056
+ items:
5057
+ type: string
5058
+ example: bustec-vozovna_strasovice-876_2
5059
+ routes:
5060
+ type: array
5061
+ description: Affected routes passing the stop
5062
+ items:
5063
+ type: object
5064
+ required:
5065
+ - id
5066
+ - distance_stops
5067
+ properties:
5068
+ id:
5069
+ type: string
5070
+ example: L119
5071
+ description: GTFS route id
5072
+ distance_stops:
5073
+ type: integer
5074
+ example: -2
5075
+ description: Distance of the stop from the segment in stops along the route (negative before the segment, 0 inside, positive after it)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@golemio/pid",
3
- "version": "6.4.1-dev.3053867815",
3
+ "version": "6.4.1-dev.3054859807",
4
4
  "description": "Golemio PID Module",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",