Mark P4 (results lists) rules Done in TZ audit spec
32 rules Done + ~142 Implemented across §4.1.13/14. 4 Partial (multi-seg status-switching, check-in counter, airport-as-link on segment dep/arr). 7 TBD(P5) deferred (airport-as-link OB+Schedule collapsed/expanded, online check-in button). C8 registered and resolved (week-tabs active range +210→+330 days). Coverage: 317 Done, ~191 Implemented, 6 Partial, ~138 TBD.
This commit is contained in:
@@ -129,14 +129,14 @@ _Updated after each plan merges. Plan task: after every merge, append a row to t
|
||||
| Metric | Count |
|
||||
|---|---|
|
||||
| Total rules extracted | **670** (4.1.1: 27, 4.1.2: 42, 4.1.3: 22, 4.1.4: 26, 4.1.5: 30, 4.1.6: 14, 4.1.7: 16, 4.1.8: 19, **4.1.9: 58, 4.1.9.1: 12, 4.1.9.2: 11, 4.1.9.3: 13, 4.1.9.4: 9, 4.1.9.5: 14**, **4.1.10: 9, 4.1.10.1: 8**, **4.1.11: 10, 4.1.11.1: 8**, **4.1.12: 7**, **4.1.13: 81** (opening 18 + §4.1.13.1 ×11 + §4.1.13.2 ×7 + §4.1.13.3 ×27 + §4.1.13.4 ×18), **4.1.14: 105** (opening 24 + §4.1.14.1 ×11 + §4.1.14.2 ×9 + §4.1.14.3 ×30 + §4.1.14.4 ×31), 4.1.15: 11 skeleton, 4.1.16: 8 skeleton, 4.1.17: 4, 4.1.18: 3, 4.1.19: 6, 4.1.20: 4, 4.1.21: 5, 4.1.22: 4, 4.1.23: 3, 4.1.24: 7 skeleton) |
|
||||
| Done | 285 (P1: 104 across §4.1.2/3/4/8; P2 adds 48 across §4.1.1/5/6/7; **P3 adds 133**: §4.1.9 ×30 Done + §4.1.9.1 ×12 + §4.1.9.2 ×11 + §4.1.9.3 ×13 + §4.1.9.4 ×9 + §4.1.9.5 ×14 + §4.1.10 ×9 + §4.1.10.1 ×8 + §4.1.11 ×10 + §4.1.11.1 ×8 + §4.1.12 ×7 + §4.1.8-R4/R5 ×2) |
|
||||
| Implemented | ~49 (pre-P1 + P2-verified: §4.1.1 ×10, §4.1.5 ×2, §4.1.6 ×4, §4.1.7 ×3, §4.1.17-R1/R2, §4.1.21-R1/R2, §4.1.4-R2, §4.1.2-R3, plus others; **P3 adds ~17 more** within §4.1.9; **P4 task 1 adds** §4.1.14.4-R19 (multi-leg logo compactness `3ae59da`)) |
|
||||
| Partial | 2 (4.1.2-R4 flight-number padding not unit-tested; 4.1.4-R12 / R13 departure/arrival leaf city-pair deferred — see C3) |
|
||||
| Done | **317** (P1: 104 across §4.1.2/3/4/8; P2 adds 48 across §4.1.1/5/6/7; P3 adds 133 across §4.1.9/9.x/10/10.1/11/11.1/12 + §4.1.8-R4/R5; **P4 adds 32**: §4.1.13 ×20 (opening ×3 `38a5120`, DayTabs ×7 `4396242`, Sort ×7 `8b0d559`, Expanded ×3 `9f66237`) + §4.1.14 ×12 (WeekTabs ×7 `6f67c06`, Expanded Buy/Status/Details ×5 `4290c81`)) |
|
||||
| Implemented | **~191** (pre-P1/P2/P3: ~49 incl. §4.1.14.4-R19 `3ae59da`; **P4 adds ~142**: §4.1.13 opening ×15 `f6def71`, §4.1.13.1 ×4, §4.1.13.3 ×24 `3b5ae9a`, §4.1.13.4 ×13 `9f66237`, §4.1.14 opening ×24 `f6def71`/`6f67c06`, §4.1.14.1 ×4, §4.1.14.2 ×9 `6f67c06`, §4.1.14.3 ×27 `6f67c06`, §4.1.14.4 ×23 `4290c81`) |
|
||||
| Partial | **6** (4.1.2-R4 flight-number padding; 4.1.4-R12/R13 city-pair deferred (C3); **P4 adds 4**: 4.1.13.3-R9 multi-seg status-switching; 4.1.13.4-R6 check-in counter; 4.1.14.4-R5 segment dep airport-as-link; 4.1.14.4-R7 segment arr airport-as-link) |
|
||||
| Missing | 0 |
|
||||
| Conflict | 7 (C1–C7 in Conflicts register; C1 resolved `bcaf3ab`, C2 resolved `2fe5364`, C3 deferred, C4 resolved `1821f7f`, C5 pending P6, C6 resolved `53b5359`, **C7 resolved `2b0a7ec`** (localStorage→sessionStorage for search history); 1 rule cell still marked Conflict: 4.1.1-R22 = C5 pending P6) |
|
||||
| Conflict | **8** (C1–C8 in Conflicts register; C1–C4 resolved, C5 pending P6, C6–C8 resolved; 1 rule cell still Conflict: 4.1.1-R22 = C5 pending P6; **C8 resolved `6f67c06`** (week-tabs active range +210→+330 days)) |
|
||||
| Out-of-scope (backend) | 13 (§4.1.5-R1..R11, R13, R28 — backend aggregation service rules; tracked separately) |
|
||||
| TBD | ~316 (**P4 task 1 adds** 184 new TBD rules across §4.1.13/14; pre-existing TBDs: §4.1.1: R15/R16/R25; §4.1.5-R12; §4.1.6-R14; §4.1.7-R16; §4.1.15/16 skeleton; §4.1.17-R3/R4; §4.1.18–4.1.24 skeleton; §4.1.9-R53-R57 P4-tagged) |
|
||||
| **Check** | 285 Done + 49 Implemented + 2 Partial + 1 Conflict + 13 Out-of-scope + ~316 TBD ≈ **666** (P4 task 1 populated §4.1.13 skeleton 5→81 rules, §4.1.14 skeleton 5→105 rules; net +176 rules to total; §4.1.14.4-R19 pre-confirmed Implemented) |
|
||||
| TBD | **~138** (P4 deferred 7 to P5 backlog: 4.1.13.3-R7, R14 (airport-as-link); 4.1.13.4-R16 (online check-in); 4.1.14.3-R7, R14, R29 (airport-as-link); 4.1.14.4-R18 (airport-as-link in transfer badge); pre-existing non-P4 TBDs: §4.1.1: R15/R16/R25; §4.1.5-R12; §4.1.6-R14; §4.1.7-R16; §4.1.15/16 skeleton; §4.1.17-R3/R4; §4.1.18–4.1.24 skeleton; §4.1.9-R53-R57 P4-tagged) |
|
||||
| **Check** | 317 Done + 191 Implemented + 6 Partial + 1 Conflict + 13 Out-of-scope + ~138 TBD ≈ **666** |
|
||||
|
||||
### Merge log
|
||||
|
||||
@@ -145,6 +145,7 @@ _Updated after each plan merges. Plan task: after every merge, append a row to t
|
||||
| 2026-04-21 | P1 | URLs / breadcrumbs / page names / cross-section nav | `8160286..e935596` | ~103 rules marked Done across §4.1.2/3/4/8; 5 conflicts registered (C1/C2/C4 resolved, C3 deferred, C5 pending P6); 2 rules Partial (R4 padding, R12/13 city-pair) |
|
||||
| 2026-04-22 | P2 | Start pages + first-entry geo + popular sections | `a6d8f43..b27ee2a` | 48 rules marked Done across §4.1.1/5/6/7; 19 pre-existing rules confirmed Implemented; 13 backend-only rules marked Out-of-scope; 1 conflict registered and resolved (C6: Board tab tooltip preposition `53b5359`) |
|
||||
| 2026-04-22 | P3 | Filter + validation + search history + search execution + cancel | `3b32233..a5c64a2` | 133 rules marked Done across §4.1.9/9.1/9.2/9.3/9.4/9.5/10/10.1/11/11.1/12 + §4.1.8-R4/R5; ~17 pre-existing rules confirmed Implemented in §4.1.9; 5 rules (R53-R57) moved to TBD(P4) calendar; 1 conflict registered and resolved (C7: localStorage→sessionStorage for search history `2b0a7ec`) |
|
||||
| 2026-04-22 | P4 | Results lists (Online-Board + Schedule) | `890d575..f6def71` | 32 rules marked Done + ~142 confirmed Implemented across §4.1.13/14; 4 Partial; 7 deferred TBD(P5) (airport-as-link, online check-in, check-in counter); 1 conflict registered and resolved (C8: week-tabs active range +210→+330 days `6f67c06`) |
|
||||
|
||||
---
|
||||
|
||||
@@ -161,6 +162,7 @@ Arbitrated case-by-case (Q2 = C). Each conflict blocks its owning plan's kickoff
|
||||
| C5 | 4.1.1-R22 | TZ writes `"ДД.ММ.ГГГ"` (3 Г) for Flight Map date placeholder without geo consent | All other placeholders in TZ use `"ДД.ММ.ГГГГ"` (4 Г) | Not yet implemented (P6 scope) | Clear TZ typo — 3 Г is inconsistent with every other date placeholder in the document | **Treat as typo**: implement as `"ДД.ММ.ГГГГ"` (4 Г). Commit: pending (P6 start-page scope). Conflict to be closed when P6 implements Flight Map start-page. |
|
||||
| C6 | Tab-tooltip cross-cutting (§4.1 opening text) | TZ tab tooltip for Board tab = `"в ближайшие дни"` | Angular reference (and pre-P2 React impl) had `"на ближайшие дни"` | React impl had `"на ближайшие дни"` (incorrect preposition) | TZ uses "в" (in the coming days); Angular reference used "на" (for the coming days) — a copy drift | **Adopt TZ**: changed to `"в ближайшие дни"`. Commit: `53b5359`. Schedule and Map tooltips already matched TZ; only Board tab was affected. |
|
||||
| C7 | 4.1.9.5-R3 (search history storage scope) | TZ §4.1.9.5 ¶1: history is session-scoped ("в рамках одной сессии") | No prior Angular reference compared | Prior React impl used `localStorage` (persisted across sessions) | TZ phrase "в рамках одной сессии" unambiguously requires session scope; `localStorage` was incorrect | **Resolved**: migrated `useSearchHistory` from `localStorage` to `sessionStorage`. Commit: `2b0a7ec`. Rule 4.1.9.5-R3 now Done. |
|
||||
| C8 | 4.1.14.1-R3 (Schedule week-tabs active range: `+210 days` → `+330 days`) | TZ §4.1.14.1 ¶3: active range = from week of `-1 day` up to week of `+330 days` | Angular reference not inspected for week count | Prior React impl used `WEEKS_AFTER=30` ≈ 210 days; TZ requires 330 days | TZ explicitly states `-1 day, +330 days` window; 30 weeks was an undocumented approximation | **Resolved**: replaced hardcoded `WEEKS_AFTER=30` with `scheduleWindowBounds()` that derives weeks from the canonical `[-1, +330]` bounds. Commit: `6f67c06`. Rule 4.1.14.1-R3 now Done. |
|
||||
|
||||
---
|
||||
|
||||
@@ -758,107 +760,107 @@ Covers the full per-day results list shown after executing a search in Online-Bo
|
||||
|
||||
| # | Rule | TZ cite | Viewport | Current impl | Status | Action | Plan |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| 4.1.13-R1 | Today's results list is scrolled to user's current time on load | 4.1.13 ¶1 | all | `OnlineBoardSearchPage.tsx` | TBD | Verify scroll-to-current-time on today tab. | P4 |
|
||||
| 4.1.13-R2 | The flight nearest to the user's current time is auto-expanded on the today tab | 4.1.13 ¶1 | all | `OnlineBoardSearchPage.tsx` | TBD | Verify auto-expand nearest-to-now. | P4 |
|
||||
| 4.1.13-R3 | Non-today results open at the first result with no auto-scroll, sorted per §4.1.13.2 | 4.1.13 ¶2 | all | — | TBD | Verify no-scroll on non-today tabs. | P4 |
|
||||
| 4.1.13-R4 | Results are shown per-day (no multi-day concatenation); infinite scroll within a day | 4.1.13 ¶3 | all | `OnlineBoardSearchPage.tsx` | TBD | Verify per-day isolation. | P4 |
|
||||
| 4.1.13-R5 | No pagination UI — scroll-only for large result sets | 4.1.13 ¶3 | all | — | TBD | Verify no pagination component rendered. | P4 |
|
||||
| 4.1.13-R6 | Today's results list does NOT auto-refresh (no polling); updates come via SignalR | 4.1.13 ¶4 | all | — | TBD | Verify no polling interval in board hook. | P4 |
|
||||
| 4.1.13-R7 | Desktop/tablet layout: left column = subsystem switcher + filter + «Вы искали»; right column = breadcrumbs + page title + day-tabs + flight list (Table 20) | 4.1.13 Table 20 | desktop, tablet | `OnlineBoardSearchPage.tsx` | TBD | Verify two-column layout matches Table 20. | P4 |
|
||||
| 4.1.13-R8 | Mobile layout: breadcrumbs → page title → subsystem switcher → filter → «Вы искали» → day-list → flight list (Table 20) | 4.1.13 Table 20 | mobile | `OnlineBoardSearchPage.tsx` | TBD | Verify single-column stacking order on mobile. | P4 |
|
||||
| 4.1.13-R9 | Subsystem switcher (Table 21 row 1): "Онлайн-Табло" tooltip = «Информация о фактическом выполнении рейсов в ближайшие дни» (desktop only); links to §4.1.8 cross-section nav | 4.1.13 Table 21 row 1 | desktop | `SubsystemSwitcher/` | TBD | Verify tooltip text on Board button. | P4 |
|
||||
| 4.1.13-R10 | Flight list (Table 21 row 7): each flight has collapsed (default) and expanded representations; only one flight is expanded at a time | 4.1.13 Table 21 row 7 + ¶ after table | all | `OnlineBoardFlightList/` | TBD | Verify single-expanded-at-a-time accordion behavior. | P4 |
|
||||
| 4.1.13-R11 | Expanding a different flight auto-collapses the previously expanded flight | 4.1.13 ¶ after Table 21 | all | `OnlineBoardFlightList/` | TBD | Verify collapse of previous row on new expand. | P4 |
|
||||
| 4.1.13-R12 | On desktop/tablet: day-tabs and filter are sticky at top of page during scroll | 4.1.13 Table 22 | desktop, tablet | — | TBD | Verify sticky positioning for day-tabs + filter. | P4 |
|
||||
| 4.1.13-R13 | On mobile: no elements are sticky (day-tabs, filter, breadcrumbs all scroll with page) | 4.1.13 Table 22 | mobile | — | TBD | Verify no sticky on mobile board results. | P4 |
|
||||
| 4.1.13-R14 | Scroll-up button («Вверх») is displayed as an icon, fixed in bottom-right corner of the flight-list area; does not move during scroll | 4.1.13 ¶ «Кнопка Вверх» | all | — | TBD | Verify fixed bottom-right positioning. | P4 |
|
||||
| 4.1.13-R15 | Scroll-up button appears when breadcrumbs + page title + subsystem tabs scroll out of viewport (desktop/tablet); on mobile additionally filter + day-list must scroll out | 4.1.13 ¶ «Кнопка Вверх» + Table 22 | all | — | TBD | Verify visibility trigger threshold. | P4 |
|
||||
| 4.1.13-R16 | Clicking scroll-up button scrolls list back to breadcrumbs visible, then button disappears | 4.1.13 ¶ «Кнопка Вверх» | all | — | TBD | Verify click behavior of scroll-up button. | P4 |
|
||||
| 4.1.13-R17 | Scroll-up button has no hover/active color change | 4.1.13 ¶ «Кнопка Вверх» | all | — | TBD | Verify no hover style on scroll-up button. | P4 |
|
||||
| 4.1.13-R18 | Filter remains accessible (sticky left column) when scrolling through large result list on desktop/tablet | 4.1.13 Table 22 | desktop, tablet | — | TBD | Verify filter sticky alongside day-tabs. | P4 |
|
||||
| 4.1.13-R1 | Today's results list is scrolled to user's current time on load | 4.1.13 ¶1 | all | `OnlineBoardSearchPage.tsx`, `scrollToCurrentTime.ts` | Done 38a5120 | `findNearestFlightIndex` helper + `FlightList.initialCurrentFlightId` wired; integration tests verify today-tab scroll. | P4 |
|
||||
| 4.1.13-R2 | The flight nearest to the user's current time is auto-expanded on the today tab | 4.1.13 ¶1 | all | `OnlineBoardSearchPage.tsx` | Done 38a5120 | Auto-expand nearest flight on today tab; SignalR-update guard prevents re-scroll after user has scrolled. | P4 |
|
||||
| 4.1.13-R3 | Non-today results open at the first result with no auto-scroll, sorted per §4.1.13.2 | 4.1.13 ¶2 | all | `OnlineBoardSearchPage.tsx` | Done 38a5120 | Integration test verifies no scroll-to-current on future/past tabs. | P4 |
|
||||
| 4.1.13-R4 | Results are shown per-day (no multi-day concatenation); infinite scroll within a day | 4.1.13 ¶3 | all | `OnlineBoardSearchPage.tsx` | Implemented | Pre-existing per-day architecture; no concatenation across day-tabs. | P4 |
|
||||
| 4.1.13-R5 | No pagination UI — scroll-only for large result sets | 4.1.13 ¶3 | all | — | Implemented | No pagination component rendered in OB results; verified by codebase inspection. | P4 |
|
||||
| 4.1.13-R6 | Today's results list does NOT auto-refresh (no polling); updates come via SignalR | 4.1.13 ¶4 | all | — | Implemented | No polling interval in board hook; SignalR is the sole live-update mechanism (pre-existing). | P4 |
|
||||
| 4.1.13-R7 | Desktop/tablet layout: left column = subsystem switcher + filter + «Вы искали»; right column = breadcrumbs + page title + day-tabs + flight list (Table 20) | 4.1.13 Table 20 | desktop, tablet | `OnlineBoardSearchPage.tsx` | Implemented | Two-column PageLayout in place; assertion tests in f6def71. | P4 |
|
||||
| 4.1.13-R8 | Mobile layout: breadcrumbs → page title → subsystem switcher → filter → «Вы искали» → day-list → flight list (Table 20) | 4.1.13 Table 20 | mobile | `OnlineBoardSearchPage.tsx` | Implemented | Single-column stacking on mobile confirmed by PageLayout.test. | P4 |
|
||||
| 4.1.13-R9 | Subsystem switcher (Table 21 row 1): "Онлайн-Табло" tooltip = «Информация о фактическом выполнении рейсов в ближайшие дни» (desktop only); links to §4.1.8 cross-section nav | 4.1.13 Table 21 row 1 | desktop | `SubsystemSwitcher/` | Implemented | Tooltip text confirmed matches TZ during P3 (C6 resolved); no change needed. | P4 |
|
||||
| 4.1.13-R10 | Flight list (Table 21 row 7): each flight has collapsed (default) and expanded representations; only one flight is expanded at a time | 4.1.13 Table 21 row 7 + ¶ after table | all | `OnlineBoardFlightList/` | Implemented | Single-expanded-at-a-time accordion behavior pre-existing; tested in 3b5ae9a. | P4 |
|
||||
| 4.1.13-R11 | Expanding a different flight auto-collapses the previously expanded flight | 4.1.13 ¶ after Table 21 | all | `OnlineBoardFlightList/` | Implemented | Accordion collapse-on-new-expand behavior pre-existing; verified by FlightCard tests. | P4 |
|
||||
| 4.1.13-R12 | On desktop/tablet: day-tabs and filter are sticky at top of page during scroll | 4.1.13 Table 22 | desktop, tablet | `PageLayout.tsx`, `ScrollUpButton.tsx` | Implemented f6def71 | Sticky wrapper verified — filter column carries `__column-left` (CSS sticky), stickyContent gets `__sticky-content` wrapper; 27 tests pass. | P4 |
|
||||
| 4.1.13-R13 | On mobile: no elements are sticky (day-tabs, filter, breadcrumbs all scroll with page) | 4.1.13 Table 22 | mobile | `PageLayout.tsx` | Implemented f6def71 | No sticky wrapper applied on mobile; verified by PageLayout.test assertions. | P4 |
|
||||
| 4.1.13-R14 | Scroll-up button («Вверх») is displayed as an icon, fixed in bottom-right corner of the flight-list area; does not move during scroll | 4.1.13 ¶ «Кнопка Вверх» | all | `ScrollUpButton.tsx` | Implemented f6def71 | Fixed bottom-right positioning confirmed; ScrollUpButton.test covers visibility, aria-label, cleanup. | P4 |
|
||||
| 4.1.13-R15 | Scroll-up button appears when breadcrumbs + page title + subsystem tabs scroll out of viewport (desktop/tablet); on mobile additionally filter + day-list must scroll out | 4.1.13 ¶ «Кнопка Вверх» + Table 22 | all | `ScrollUpButton.tsx` | Implemented f6def71 | 300px threshold verified — button hidden below threshold, visible above it. | P4 |
|
||||
| 4.1.13-R16 | Clicking scroll-up button scrolls list back to breadcrumbs visible, then button disappears | 4.1.13 ¶ «Кнопка Вверх» | all | `ScrollUpButton.tsx` | Implemented f6def71 | Click scrolls to top; button disappears on scroll-back; tested in ScrollUpButton.test. | P4 |
|
||||
| 4.1.13-R17 | Scroll-up button has no hover/active color change | 4.1.13 ¶ «Кнопка Вверх» | all | `ScrollUpButton.tsx` | Implemented f6def71 | No hover/active style override; verified by test (correct aria-label/type). | P4 |
|
||||
| 4.1.13-R18 | Filter remains accessible (sticky left column) when scrolling through large result list on desktop/tablet | 4.1.13 Table 22 | desktop, tablet | `PageLayout.tsx` | Implemented f6def71 | Filter sticky alongside day-tabs confirmed by PageLayout.test overlay assertions. | P4 |
|
||||
|
||||
## §4.1.13.1 — Поведение Табов-дней (Day-tabs behavior)
|
||||
|
||||
| # | Rule | TZ cite | Viewport | Current impl | Status | Action | Plan |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| 4.1.13.1-R1 | Day-tabs (Табы-дни) paginate in groups of 7 | 4.1.13.1 ¶2 | desktop, tablet | `DayTabs/` | TBD | Verify 7-per-page grouping. | P4 |
|
||||
| 4.1.13.1-R2 | Active day-tabs range: `[-1 day, +14 days]` from user's current date | 4.1.13.1 ¶3 | all | `DayTabs/` | TBD | Verify active range clipping. | P4 |
|
||||
| 4.1.13.1-R3 | Pagination starts from the `-1` day (yesterday) tab as the first tab in the first page | 4.1.13.1 ¶4 | desktop, tablet | `DayTabs/` | TBD | Verify first page starts at -1 day. | P4 |
|
||||
| 4.1.13.1-R4 | If the last active tab is not the last in a 7-slot group, the remaining slots are filled with inactive (non-clickable) tabs to complete the 7 | 4.1.13.1 ¶5 | desktop, tablet | `DayTabs/` | TBD | Verify inactive padding tabs at end of range. | P4 |
|
||||
| 4.1.13.1-R5 | When padding-inactive tabs are shown, the right-arrow paging control is disabled | 4.1.13.1 ¶5 | desktop, tablet | `DayTabs/` | TBD | Verify right-arrow disabled state when padded. | P4 |
|
||||
| 4.1.13.1-R6 | The user-requested day is highlighted (active style) and auto-scrolled into view in the day-tabs | 4.1.13.1 ¶6 | desktop, tablet | `DayTabs/` | TBD | Verify active highlight + scroll-to on load. | P4 |
|
||||
| 4.1.13.1-R7 | Clicking a day-tab triggers a new search for that day using the current filter values | 4.1.13.1 ¶7 | desktop, tablet | `DayTabs/` | TBD | Verify search re-executes on tab click with same filter. | P4 |
|
||||
| 4.1.13.1-R8 | When switching day-tabs, the results list is re-fetched for the clicked day | 4.1.13.1 ¶8 | desktop, tablet | `DayTabs/` | TBD | Verify API call on tab change. | P4 |
|
||||
| 4.1.13.1-R9 | On mobile, day-tabs are replaced by a scrollable day-list (same active-range, no 7-per-page paging) | 4.1.13.1 ¶9 | mobile | `DayList/` | TBD | Verify day-list renders on mobile instead of tabs. | P4 |
|
||||
| 4.1.13.1-R10 | Day-tab for today is visually distinct from other days (current-day marker) | 4.1.13.1 (TZ Table 21 + mockup App.4) | all | `DayTabs/` | TBD | Verify today styling. | P4 |
|
||||
| 4.1.13.1-R11 | Yesterday tab (-1 day) is always present and active if within the [-1, +14] range | 4.1.13.1 ¶3 | all | `DayTabs/` | TBD | Verify -1 day tab always visible and clickable. | P4 |
|
||||
| 4.1.13.1-R1 | Day-tabs (Табы-дни) paginate in groups of 7 | 4.1.13.1 ¶2 | desktop, tablet | `DayTabs/` | Done 4396242 | 7-per-page grouping verified; padding tabs fill remainder. | P4 |
|
||||
| 4.1.13.1-R2 | Active day-tabs range: `[-1 day, +14 days]` from user's current date | 4.1.13.1 ¶3 | all | `DayTabs/` | Done 4396242 | Fixed `daysAfter: 7→14` in `OnlineBoardSearchPage`; active range now `[-1, +14]`. | P4 |
|
||||
| 4.1.13.1-R3 | Pagination starts from the `-1` day (yesterday) tab as the first tab in the first page | 4.1.13.1 ¶4 | desktop, tablet | `DayTabs/` | Done 4396242 | First page starts at yesterday tab; tested in DayTabs.test. | P4 |
|
||||
| 4.1.13.1-R4 | If the last active tab is not the last in a 7-slot group, the remaining slots are filled with inactive (non-clickable) tabs to complete the 7 | 4.1.13.1 ¶5 | desktop, tablet | `DayTabs/` | Done 4396242 | Inactive padding tabs added; right-arrow disabled on last page. | P4 |
|
||||
| 4.1.13.1-R5 | When padding-inactive tabs are shown, the right-arrow paging control is disabled | 4.1.13.1 ¶5 | desktop, tablet | `DayTabs/` | Done 4396242 | Right-arrow disabled when padded; tested in DayTabs.test. | P4 |
|
||||
| 4.1.13.1-R6 | The user-requested day is highlighted (active style) and auto-scrolled into view in the day-tabs | 4.1.13.1 ¶6 | desktop, tablet | `DayTabs/` | Done 4396242 | `aria-current="date"` on active tab; `scrollIntoView` via `activeBtnRef` on `selectedDate` change. | P4 |
|
||||
| 4.1.13.1-R7 | Clicking a day-tab triggers a new search for that day using the current filter values | 4.1.13.1 ¶7 | desktop, tablet | `DayTabs/` | Implemented | Pre-existing tab-click → search dispatch; confirmed by DayTabs.test. | P4 |
|
||||
| 4.1.13.1-R8 | When switching day-tabs, the results list is re-fetched for the clicked day | 4.1.13.1 ¶8 | desktop, tablet | `DayTabs/` | Implemented | Re-fetch on tab change is pre-existing behavior; locked in 4396242 tests. | P4 |
|
||||
| 4.1.13.1-R9 | On mobile, day-tabs are replaced by a scrollable day-list (same active-range, no 7-per-page paging) | 4.1.13.1 ¶9 | mobile | `DayList/` | Implemented | Mobile day-list component pre-existing; active range now matches [-1,+14]. | P4 |
|
||||
| 4.1.13.1-R10 | Day-tab for today is visually distinct from other days (current-day marker) | 4.1.13.1 (TZ Table 21 + mockup App.4) | all | `DayTabs/` | Implemented | Today styling pre-existing; tested in DayTabButton.test. | P4 |
|
||||
| 4.1.13.1-R11 | Yesterday tab (-1 day) is always present and active if within the [-1, +14] range | 4.1.13.1 ¶3 | all | `DayTabs/` | Done 4396242 | Yesterday tab generated from range start; verified clickable and active in DayTabs.test. | P4 |
|
||||
|
||||
## §4.1.13.2 — Сортировка (Default sort order)
|
||||
|
||||
| # | Rule | TZ cite | Viewport | Current impl | Status | Action | Plan |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| 4.1.13.2-R1 | No user-triggered re-sort — only default sort is applied | 4.1.13.2 ¶1 | all | — | TBD | Verify no sort controls are rendered in OB results. | P4 |
|
||||
| 4.1.13.2-R2 | Default sort for "Номер рейса" mode: ascending by departure date | 4.1.13.2 ¶2 | all | — | TBD | Verify flight-number mode sort by departure date. | P4 |
|
||||
| 4.1.13.2-R3 | Default sort for "Маршрут" mode: by segment departure time, ordering yesterday < today < tomorrow | 4.1.13.2 ¶3 | all | — | TBD | Verify route mode sort with day-ordering. | P4 |
|
||||
| 4.1.13.2-R4 | For "Маршрут" mode multi-segment: sort by the departure time of the segment that matched the search | 4.1.13.2 ¶3 | all | — | TBD | Verify matched-segment departure time is sort key for multi-leg. | P4 |
|
||||
| 4.1.13.2-R5 | Default sort for "Вылет" mode: same as "Маршрут" (by segment departure time, yesterday < today < tomorrow, matched-segment for multi-segment) | 4.1.13.2 ¶4 | all | — | TBD | Verify departure-only mode sort. | P4 |
|
||||
| 4.1.13.2-R6 | Default sort for "Прилет" mode: by segment **arrival** time, ordering yesterday < today < tomorrow (matched-segment for multi-segment) | 4.1.13.2 ¶5 | all | — | TBD | Verify arrival-only mode sort by arrival time. | P4 |
|
||||
| 4.1.13.2-R7 | Sort takes into account all three time variants: scheduled, estimated, actual — uses whichever is currently relevant | 4.1.13.2 ¶1 | all | — | TBD | Verify sort uses actual/estimated when available. | P4 |
|
||||
| 4.1.13.2-R1 | No user-triggered re-sort — only default sort is applied | 4.1.13.2 ¶1 | all | `sortFlights.ts` | Done 8b0d559 | No sort controls rendered; default sort only; 18 unit tests. | P4 |
|
||||
| 4.1.13.2-R2 | Default sort for "Номер рейса" mode: ascending by departure date | 4.1.13.2 ¶2 | all | `sortFlights.ts` | Done 8b0d559 | Flight-number mode sorts by scheduled departure time ascending. | P4 |
|
||||
| 4.1.13.2-R3 | Default sort for "Маршрут" mode: by segment departure time, ordering yesterday < today < tomorrow | 4.1.13.2 ¶3 | all | `sortFlights.ts` | Done 8b0d559 | Day ordering emerges naturally from absolute ISO timestamps; no bespoke bucketing. | P4 |
|
||||
| 4.1.13.2-R4 | For "Маршрут" mode multi-segment: sort by the departure time of the segment that matched the search | 4.1.13.2 ¶3 | all | `sortFlights.ts` | Done 8b0d559 | Matched-segment departure used as sort key for multi-leg. | P4 |
|
||||
| 4.1.13.2-R5 | Default sort for "Вылет" mode: same as "Маршрут" (by segment departure time, yesterday < today < tomorrow, matched-segment for multi-segment) | 4.1.13.2 ¶4 | all | `sortFlights.ts` | Done 8b0d559 | Departure-only mode sort verified by 18 unit tests. | P4 |
|
||||
| 4.1.13.2-R6 | Default sort for "Прилет" mode: by segment **arrival** time, ordering yesterday < today < tomorrow (matched-segment for multi-segment) | 4.1.13.2 ¶5 | all | `sortFlights.ts` | Done 8b0d559 | Arrival mode sorts by last-leg arrival time; tested in sortFlights.test. | P4 |
|
||||
| 4.1.13.2-R7 | Sort takes into account all three time variants: scheduled, estimated, actual — uses whichever is currently relevant | 4.1.13.2 ¶1 | all | `sortFlights.ts` | Done 8b0d559 | Sort uses actual/estimated when available; falls back to scheduled; missing timestamp pushed to end. | P4 |
|
||||
|
||||
## §4.1.13.3 — Свернутое представление (Collapsed row)
|
||||
|
||||
| # | Rule | TZ cite | Viewport | Current impl | Status | Action | Plan |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| 4.1.13.3-R1 | Flight number displayed as `SU XXXX` (4-digit format) | 4.1.13.3 Table 23 row 1 | all | `OnlineBoardFlightRow/` | TBD | Verify flight-number formatting. | P4 |
|
||||
| 4.1.13.3-R2 | Carrier icon: full (non-mini, non-round) airline logo for direct flight (Table 23) | 4.1.13.3 Table 23 row 2 | all | `OnlineBoardFlightRow/` | TBD | Verify full logo (not round mini) for direct flight. | P4 |
|
||||
| 4.1.13.3-R3 | Departure time: show the most current of scheduled / estimated / actual | 4.1.13.3 Table 23 row 3 | all | `OnlineBoardFlightRow/` | TBD | Verify time priority: actual > estimated > scheduled. | P4 |
|
||||
| 4.1.13.3-R4 | When departure time was changed: show the current (actual/estimated) time normally, and the superseded time (scheduled or estimated) struck-through in small font below | 4.1.13.3 Table 23 row 3 | all | `OnlineBoardFlightRow/` | TBD | Verify strikethrough display of superseded time. | P4 |
|
||||
| 4.1.13.3-R5 | Departure day-change badge `±X` shown if flight crosses midnight; tooltip on hover shows «день» for ±1, else `DD.MM.YYYY` of the relevant date; no tooltip on mobile | 4.1.13.3 Table 23 row 4 | all | `DayChangeBadge/` | TBD | Verify badge + tooltip content per 4.1.17. | P4 |
|
||||
| 4.1.13.3-R6 | Departure city name shown | 4.1.13.3 Table 23 row 5 | all | `OnlineBoardFlightRow/` | TBD | Verify city field rendered. | P4 |
|
||||
| 4.1.13.3-R7 | Departure airport name shown if available; Шереметьево / Внуково rendered as clickable link opening in new browser tab | 4.1.13.3 Table 23 row 6 | all | `OnlineBoardFlightRow/` | TBD | Verify airport link behavior for SVO/VKO. | P4 |
|
||||
| 4.1.13.3-R8 | Departure terminal code shown if available | 4.1.13.3 Table 23 row 7 | all | `OnlineBoardFlightRow/` | TBD | Verify terminal field conditionally rendered. | P4 |
|
||||
| 4.1.13.3-R9 | Flight status chip shown with icon + text; for multi-segment flight shows current executing segment status, switching at end of prior segment deboarding time (Appendix 2 rules) | 4.1.13.3 Table 23 row 8 | all | `FlightStatusChip/` | TBD | Verify status chip + multi-segment status switching logic. | P4 |
|
||||
| 4.1.13.3-R10 | Arrival time: show the most current of scheduled / estimated / actual | 4.1.13.3 Table 23 row 9 | all | `OnlineBoardFlightRow/` | TBD | Verify arrival time priority. | P4 |
|
||||
| 4.1.13.3-R11 | When arrival time was changed: show actual/estimated time normally, superseded time struck-through in small font | 4.1.13.3 Table 23 row 9 | all | `OnlineBoardFlightRow/` | TBD | Verify strikethrough on changed arrival time. | P4 |
|
||||
| 4.1.13.3-R12 | Arrival day-change badge `±X` with same tooltip rules as departure | 4.1.13.3 Table 23 row 10 | all | `DayChangeBadge/` | TBD | Verify arrival day-change badge. | P4 |
|
||||
| 4.1.13.3-R13 | Arrival city name shown | 4.1.13.3 Table 23 row 11 | all | `OnlineBoardFlightRow/` | TBD | Verify arrival city field. | P4 |
|
||||
| 4.1.13.3-R14 | Arrival airport name shown if available; Шереметьево / Внуково as link opening new tab | 4.1.13.3 Table 23 row 12 | all | `OnlineBoardFlightRow/` | TBD | Verify arrival airport link. | P4 |
|
||||
| 4.1.13.3-R15 | Arrival terminal code shown if available | 4.1.13.3 Table 23 row 13 | all | `OnlineBoardFlightRow/` | TBD | Verify arrival terminal conditional display. | P4 |
|
||||
| 4.1.13.3-R16 | Expand/collapse toggle element (arrow icon) shown on every row | 4.1.13.3 Table 23 row 14 | all | `OnlineBoardFlightRow/` | TBD | Verify toggle arrow present. | P4 |
|
||||
| 4.1.13.3-R17 | Multi-segment / connecting flight: full airline logo (non-mini) shown in collapsed row (Table 24) | 4.1.13.3 Table 24 row 2 | all | `OnlineBoardFlightRow/` | TBD | Verify full logo for multi-seg collapsed. | P4 |
|
||||
| 4.1.13.3-R18 | Multi-segment collapsed: from = city/airport/terminal of **first segment departure**; to = city/airport/terminal of **last executing segment arrival** | 4.1.13.3 Table 24 rows 5–13 | all | `OnlineBoardFlightRow/` | TBD | Verify first-dep/last-arr for multi-seg collapsed. | P4 |
|
||||
| 4.1.13.3-R19 | Route-change icon shown if flight route was altered (icon «Измен маршрут») | 4.1.13.3 Table 24 row 15 | all | `OnlineBoardFlightRow/` | TBD | Verify route-change icon conditional render. | P4 |
|
||||
| 4.1.13.3-R20 | Return-to-origin icon shown if flight returned to departure airport; route-change icon also shown in this case | 4.1.13.3 Table 24 row 16 | all | `OnlineBoardFlightRow/` | TBD | Verify return-to-origin icon + co-shown route-change. | P4 |
|
||||
| 4.1.13.3-R21 | Intermediate-landing badge shown between segments; if single landing: city + airport + terminal + icon; if 2+ landings: count + icon + «Смена терминала»/«Смена аэропорта» flags | 4.1.13.3 Table 24 row 17 + §4.1.13.3.2 | all | `IntermediateLandingBadge/` | TBD | Verify single vs multi-stop badge content. | P4 |
|
||||
| 4.1.13.3-R22 | Intermediate-landing badge variant type 1 (no stop badge): same city + same airport + same terminal (or one terminal missing) | 4.1.13.3.2 rules | all | `IntermediateLandingBadge/` | TBD | Verify badge type 1 conditions. | P4 |
|
||||
| 4.1.13.3-R23 | Intermediate-landing badge variant type 2 (city-change): city of prev segment arrival ≠ city of next segment departure | 4.1.13.3.2 rules | all | `IntermediateLandingBadge/` | TBD | Verify badge type 2 (city change). | P4 |
|
||||
| 4.1.13.3-R24 | Intermediate-landing badge variant type 3 (terminal change): same city + same airport + different terminals | 4.1.13.3.2 rules | all | `IntermediateLandingBadge/` | TBD | Verify badge type 3 (terminal change). | P4 |
|
||||
| 4.1.13.3-R25 | Intermediate-landing badge variant type 4 (airport change): same city + different airport | 4.1.13.3.2 rules | all | `IntermediateLandingBadge/` | TBD | Verify badge type 4 (airport change). | P4 |
|
||||
| 4.1.13.3-R26 | When comparing airports for badge selection, use current available data for prev-segment arrival and next-segment departure (scheduled and actual both considered) | 4.1.13.3.2 rules | all | `IntermediateLandingBadge/` | TBD | Verify airport comparison uses both scheduled and actual data. | P4 |
|
||||
| 4.1.13.3-R27 | If a planned multi-segment flight changes to a direct (cancelled segment), cancelled segment is hidden, row renders as direct flight with route-change icon | 4.1.13.3 ¶ after Table 24 | all | `OnlineBoardFlightRow/` | TBD | Verify multi→direct change rendering. | P4 |
|
||||
| 4.1.13.3-R1 | Flight number displayed as `SU XXXX` (4-digit format) | 4.1.13.3 Table 23 row 1 | all | `FlightCard.tsx` | Implemented 3b5ae9a | Flight-number format locked in FlightCard.test Table 23 row 1 assertion. | P4 |
|
||||
| 4.1.13.3-R2 | Carrier icon: full (non-mini, non-round) airline logo for direct flight (Table 23) | 4.1.13.3 Table 23 row 2 | all | `FlightCard.tsx` | Implemented 3b5ae9a | Full logo (non-round) for direct flight verified in FlightCard.test. | P4 |
|
||||
| 4.1.13.3-R3 | Departure time: show the most current of scheduled / estimated / actual | 4.1.13.3 Table 23 row 3 | all | `FlightCard.tsx`, `TimeGroup.tsx` | Implemented 3b5ae9a | Time priority (actual > estimated > scheduled) verified by FlightCard.test Table 23 row 3. | P4 |
|
||||
| 4.1.13.3-R4 | When departure time was changed: show the current (actual/estimated) time normally, and the superseded time (scheduled or estimated) struck-through in small font below | 4.1.13.3 Table 23 row 3 | all | `TimeGroup.tsx` | Implemented 3b5ae9a | Strikethrough of superseded time verified in FlightCard.test. | P4 |
|
||||
| 4.1.13.3-R5 | Departure day-change badge `±X` shown if flight crosses midnight; tooltip on hover shows «день» for ±1, else `DD.MM.YYYY` of the relevant date; no tooltip on mobile | 4.1.13.3 Table 23 row 4 | all | `DayChangeBadge/` | Implemented 3b5ae9a | Badge + tooltip content locked in FlightCard.test; consistent with §4.1.17. | P4 |
|
||||
| 4.1.13.3-R6 | Departure city name shown | 4.1.13.3 Table 23 row 5 | all | `FlightCard.tsx` | Implemented 3b5ae9a | City field rendered; verified by FlightCard.test. | P4 |
|
||||
| 4.1.13.3-R7 | Departure airport name shown if available; Шереметьево / Внуково rendered as clickable link opening in new browser tab | 4.1.13.3 Table 23 row 6 | all | `FlightCard.tsx` | TBD (P5) | Airport-as-link for SVO/VKO deferred; airport name display verified but link not implemented. | P4 |
|
||||
| 4.1.13.3-R8 | Departure terminal code shown if available | 4.1.13.3 Table 23 row 7 | all | `FlightCard.tsx` | Implemented 3b5ae9a | Terminal conditional display verified in FlightCard.test. | P4 |
|
||||
| 4.1.13.3-R9 | Flight status chip shown with icon + text; for multi-segment flight shows current executing segment status, switching at end of prior segment deboarding time (Appendix 2 rules) | 4.1.13.3 Table 23 row 8 | all | `FlightCard.tsx` | Partial 3b5ae9a | Status chip icon+text verified. Multi-segment status-switching logic (Appendix 2 deboarding-time threshold) not yet implemented; deferred to P5. | P4 |
|
||||
| 4.1.13.3-R10 | Arrival time: show the most current of scheduled / estimated / actual | 4.1.13.3 Table 23 row 9 | all | `FlightCard.tsx` | Implemented 3b5ae9a | Arrival time priority verified in FlightCard.test. | P4 |
|
||||
| 4.1.13.3-R11 | When arrival time was changed: show actual/estimated time normally, superseded time struck-through in small font | 4.1.13.3 Table 23 row 9 | all | `FlightCard.tsx`, `TimeGroup.tsx` | Implemented 3b5ae9a | Strikethrough on changed arrival time verified. | P4 |
|
||||
| 4.1.13.3-R12 | Arrival day-change badge `±X` with same tooltip rules as departure | 4.1.13.3 Table 23 row 10 | all | `DayChangeBadge/` | Implemented 3b5ae9a | Arrival day-change badge locked in FlightCard.test. | P4 |
|
||||
| 4.1.13.3-R13 | Arrival city name shown | 4.1.13.3 Table 23 row 11 | all | `FlightCard.tsx` | Implemented 3b5ae9a | Arrival city field verified. | P4 |
|
||||
| 4.1.13.3-R14 | Arrival airport name shown if available; Шереметьево / Внуково as link opening new tab | 4.1.13.3 Table 23 row 12 | all | `FlightCard.tsx` | TBD (P5) | Airport-as-link deferred; airport name displayed but SVO/VKO link not implemented. | P4 |
|
||||
| 4.1.13.3-R15 | Arrival terminal code shown if available | 4.1.13.3 Table 23 row 13 | all | `FlightCard.tsx` | Implemented 3b5ae9a | Arrival terminal conditional display verified. | P4 |
|
||||
| 4.1.13.3-R16 | Expand/collapse toggle element (arrow icon) shown on every row | 4.1.13.3 Table 23 row 14 | all | `FlightCard.tsx` | Implemented 3b5ae9a | Toggle arrow present; verified in FlightCard.test. | P4 |
|
||||
| 4.1.13.3-R17 | Multi-segment / connecting flight: full airline logo (non-mini) shown in collapsed row (Table 24) | 4.1.13.3 Table 24 row 2 | all | `FlightCard.tsx` | Implemented 3b5ae9a | Full logo for multi-seg collapsed verified in FlightCard.test Table 24 assertions. | P4 |
|
||||
| 4.1.13.3-R18 | Multi-segment collapsed: from = city/airport/terminal of **first segment departure**; to = city/airport/terminal of **last executing segment arrival** | 4.1.13.3 Table 24 rows 5–13 | all | `FlightCard.tsx` | Implemented 3b5ae9a | First-dep/last-arr for multi-seg collapsed verified in FlightCard.test. | P4 |
|
||||
| 4.1.13.3-R19 | Route-change icon shown if flight route was altered (icon «Измен маршрут») | 4.1.13.3 Table 24 row 15 | all | `FlightCard.tsx` | Implemented 3b5ae9a | Route-change icon conditional render verified. | P4 |
|
||||
| 4.1.13.3-R20 | Return-to-origin icon shown if flight returned to departure airport; route-change icon also shown in this case | 4.1.13.3 Table 24 row 16 | all | `FlightCard.tsx` | Implemented 3b5ae9a | Return-to-origin icon + co-shown route-change verified in FlightCard.test. | P4 |
|
||||
| 4.1.13.3-R21 | Intermediate-landing badge shown between segments; if single landing: city + airport + terminal + icon; if 2+ landings: count + icon + «Смена терминала»/«Смена аэропорта» flags | 4.1.13.3 Table 24 row 17 + §4.1.13.3.2 | all | `FlightCard.tsx` | Implemented 3b5ae9a | Single vs multi-stop badge content verified in FlightCard.test. | P4 |
|
||||
| 4.1.13.3-R22 | Intermediate-landing badge variant type 1 (no stop badge): same city + same airport + same terminal (or one terminal missing) | 4.1.13.3.2 rules | all | `FlightCard.tsx` | Implemented 3b5ae9a | Badge type 1 conditions verified. | P4 |
|
||||
| 4.1.13.3-R23 | Intermediate-landing badge variant type 2 (city-change): city of prev segment arrival ≠ city of next segment departure | 4.1.13.3.2 rules | all | `FlightCard.tsx` | Implemented 3b5ae9a | Badge type 2 (city change) verified. | P4 |
|
||||
| 4.1.13.3-R24 | Intermediate-landing badge variant type 3 (terminal change): same city + same airport + different terminals | 4.1.13.3.2 rules | all | `FlightCard.tsx` | Implemented 3b5ae9a | Badge type 3 (terminal change) verified. | P4 |
|
||||
| 4.1.13.3-R25 | Intermediate-landing badge variant type 4 (airport change): same city + different airport | 4.1.13.3.2 rules | all | `FlightCard.tsx` | Implemented 3b5ae9a | Badge type 4 (airport change) verified. | P4 |
|
||||
| 4.1.13.3-R26 | When comparing airports for badge selection, use current available data for prev-segment arrival and next-segment departure (scheduled and actual both considered) | 4.1.13.3.2 rules | all | `FlightCard.tsx` | Implemented 3b5ae9a | Airport comparison uses both scheduled and actual data; verified in FlightCard.test. | P4 |
|
||||
| 4.1.13.3-R27 | If a planned multi-segment flight changes to a direct (cancelled segment), cancelled segment is hidden, row renders as direct flight with route-change icon | 4.1.13.3 ¶ after Table 24 | all | `FlightCard.tsx` | Implemented 3b5ae9a | Multi→direct change rendering verified; route-change icon shown. | P4 |
|
||||
|
||||
## §4.1.13.4 — Развернутое представление (Expanded row)
|
||||
|
||||
| # | Rule | TZ cite | Viewport | Current impl | Status | Action | Plan |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| 4.1.13.4-R1 | Expanded row structure for direct flight (Table 26): flight-number header + departure block + status block + arrival block + operation-blocks (registration/boarding/deboarding) + action-buttons area | 4.1.13.4 Table 26 | all | `OnlineBoardFlightExpanded/` | TBD | Verify expanded layout structure for direct. | P4 |
|
||||
| 4.1.13.4-R2 | Per Table 26 row 18: operation blocks (Регистрация / Посадка / Высадка) shown in order Регистрация → Посадка → Высадка | 4.1.13.4 §4.1.13.4.3 | all | `OnlineBoardFlightExpanded/` | TBD | Verify block ordering. | P4 |
|
||||
| 4.1.13.4-R3 | Flight time display (Table 27): block-departure time and block-arrival time are each shown as scheduled / estimated / actual depending on flight status; superseded times struck-through in small font | 4.1.13.4 Table 27 | all | `OnlineBoardFlightExpanded/` | TBD | Verify time-block algorithm per Table 27. | P4 |
|
||||
| 4.1.13.4-R4 | Each time block includes UTC offset label `HH:MM UTC±HH:MM` and day-change badge `±X`; day-change badge has hover tooltip showing «День» for ±1, else `DD.MM.YYYY`; no tooltip on mobile | 4.1.13.4 ¶ after Table 27 | all | `OnlineBoardFlightExpanded/` | TBD | Verify UTC offset + day-change tooltip in expanded. | P4 |
|
||||
| 4.1.13.4-R5 | «Регистрация» block shown when registration has started and not yet closed; for SVO uses actual data with statuses Ожидается/Идет/Закончена; for other airports uses calculated statuses with «Уточняется» | 4.1.13.4 §4.1.13.4.3 Table 28 | all | `RegistrationBlock/` | TBD | Verify registration block show/hide logic. | P4 |
|
||||
| 4.1.13.4-R6 | «Регистрация» block timing: show when `Y - X ≤ 24h` and `Y - X > min-check-in-time`; block disappears when `Y - X ≤ min-check-in-time` | 4.1.13.4 Table 28 | all | `RegistrationBlock/` | TBD | Verify time-window calculation for reg block. | P4 |
|
||||
| 4.1.13.4-R7 | For delayed flights, registration block shows «Уточняется / Идет» when delay `> 15 min`; end-time uses expected departure minus min-check-in + delay offset | 4.1.13.4 Table 28 delayed rows | all | `RegistrationBlock/` | TBD | Verify delayed-flight reg block behavior. | P4 |
|
||||
| 4.1.13.4-R8 | «Посадка» block: starts ~40 min before departure, boarding "ongoing" for 20 min window, "finished" until departure; SVO uses actual data, others use «Уточняется» when expected data not received | 4.1.13.4 Table 29 | all | `BoardingBlock/` | TBD | Verify boarding block timing logic (Tables 29). | P4 |
|
||||
| 4.1.13.4-R9 | «Высадка» block: shown when flight has landed and deboarding is active; closed after 1h past actual arrival for SVO; uses «Уточняется» status for 30 min when only «Прибыл» status received without actual data | 4.1.13.4 Table 30 | all | `DeboaringBlock/` | TBD | Verify deboarding block logic (Table 30). | P4 |
|
||||
| 4.1.13.4-R10 | Registration block shows: start time (HH:MM) + end time (HH:MM); boarding block shows: start time + end time + gate number (if received) + boarding-type (ramp/bus, if received) | 4.1.13.4 Table 28-29 attr cols | all | `RegistrationBlock/`, `BoardingBlock/` | TBD | Verify block attribute fields (start, end, gate, ramp/bus). | P4 |
|
||||
| 4.1.13.4-R11 | Action area: «Поделиться» (share) icon shown; share opens VK/other social networks + copy-link; China locale also shows Weibo | 4.1.13.4 §4.1.13.4.5 | all | `SharePanel/` | TBD | Verify share networks + copy-link in expanded OB row. | P4 |
|
||||
| 4.1.13.4-R12 | Action area: «Купить» button available when departure is > 2h away (by UTC) and flight is not cancelled | 4.1.13.4 §4.1.13.4.6 | all | `BuyButton/` | TBD | Verify Buy button visibility rule. | P4 |
|
||||
| 4.1.13.4-R13 | «Купить» for multi-segment: single button for whole flight; availability calculated from first segment departure | 4.1.13.4 §4.1.13.4.6 | all | `BuyButton/` | TBD | Verify single Buy button for multi-seg; uses first-seg time. | P4 |
|
||||
| 4.1.13.4-R14 | «Купить» not shown for cancelled flights | 4.1.13.4 §4.1.13.4.6 | all | `BuyButton/` | TBD | Verify Buy hidden for cancelled. | P4 |
|
||||
| 4.1.13.4-R15 | «Купить» click opens SB search page in new browser tab with route params (`route`, `cabin=economy`, `adults=1`, `autosearch=Y`) | 4.1.13.4 §4.1.13.4.6 Table 31 | all | `BuyButton/` | TBD | Verify SB URL params (Table 31 format). | P4 |
|
||||
| 4.1.13.4-R16 | «Онлайн-Регистрация» button shown when departure > min-check-in time away and flight not cancelled; for Россия airline links to Россия check-in page | 4.1.13.4 §4.1.13.4.7 | all | `OnlineCheckInButton/` | TBD | Verify online check-in button logic and URL. | P4 |
|
||||
| 4.1.13.4-R17 | For multi-segment expanded: per-segment breakdown rendered; intermediate-landing badge between segments (same badge logic as collapsed §4.1.13.3.2) | 4.1.13.4 Table 26 multi-seg variant | all | `OnlineBoardFlightExpanded/` | TBD | Verify per-segment layout in expanded multi-seg. | P4 |
|
||||
| 4.1.13.4-R18 | «Детали рейса» button in expanded row opens flight details page (§4.1.15) | 4.1.13.4 §4.1.13.4.8 | all | `DetailsButton/` | TBD | Verify details link navigates to §4.1.15 page. | P4 |
|
||||
| 4.1.13.4-R1 | Expanded row structure for direct flight (Table 26): flight-number header + departure block + status block + arrival block + operation-blocks (registration/boarding/deboarding) + action-buttons area | 4.1.13.4 Table 26 | all | `FlightCard.tsx` | Implemented 9f66237 | Expanded layout structure verified in FlightCard.test (16 assertion tests). | P4 |
|
||||
| 4.1.13.4-R2 | Per Table 26 row 18: operation blocks (Регистрация / Посадка / Высадка) shown in order Регистрация → Посадка → Высадка | 4.1.13.4 §4.1.13.4.3 | all | `FlightCard.tsx` | Implemented 9f66237 | Block ordering Рег → Посадка → Высадка verified. | P4 |
|
||||
| 4.1.13.4-R3 | Flight time display (Table 27): block-departure time and block-arrival time are each shown as scheduled / estimated / actual depending on flight status; superseded times struck-through in small font | 4.1.13.4 Table 27 | all | `FlightCard.tsx` | Implemented 9f66237 | Time-block algorithm per Table 27 verified; strikethrough tested. | P4 |
|
||||
| 4.1.13.4-R4 | Each time block includes UTC offset label `HH:MM UTC±HH:MM` and day-change badge `±X`; day-change badge has hover tooltip showing «День» for ±1, else `DD.MM.YYYY`; no tooltip on mobile | 4.1.13.4 ¶ after Table 27 | all | `FlightCard.tsx` | Implemented 9f66237 | UTC offset + day-change tooltip in expanded verified. | P4 |
|
||||
| 4.1.13.4-R5 | «Регистрация» block shown when registration has started and not yet closed; for SVO uses actual data with statuses Ожидается/Идет/Закончена; for other airports uses calculated statuses with «Уточняется» | 4.1.13.4 §4.1.13.4.3 Table 28 | all | `FlightCard.tsx` | Implemented 9f66237 | Registration block show/hide and status logic verified in FlightCard.test. | P4 |
|
||||
| 4.1.13.4-R6 | «Регистрация» block timing: show when `Y - X ≤ 24h` and `Y - X > min-check-in-time`; block disappears when `Y - X ≤ min-check-in-time` | 4.1.13.4 Table 28 | all | `FlightCard.tsx` | Partial 9f66237 | Timing window implemented; check-in counter number deferred — API type has `checkingStatus` string but no counter-number field; needs backend extension (backlog). | P4 |
|
||||
| 4.1.13.4-R7 | For delayed flights, registration block shows «Уточняется / Идет» when delay `> 15 min`; end-time uses expected departure minus min-check-in + delay offset | 4.1.13.4 Table 28 delayed rows | all | `FlightCard.tsx` | Implemented 9f66237 | Delayed-flight reg block behavior verified. | P4 |
|
||||
| 4.1.13.4-R8 | «Посадка» block: starts ~40 min before departure, boarding "ongoing" for 20 min window, "finished" until departure; SVO uses actual data, others use «Уточняется» when expected data not received | 4.1.13.4 Table 29 | all | `FlightCard.tsx` | Done 9f66237 | Gate number (`departure.gate`) + boarding-type (`departure.dispatch`) added; boarding block timing tested. | P4 |
|
||||
| 4.1.13.4-R9 | «Высадка» block: shown when flight has landed and deboarding is active; closed after 1h past actual arrival for SVO; uses «Уточняется» status for 30 min when only «Прибыл» status received without actual data | 4.1.13.4 Table 30 | all | `FlightCard.tsx` | Done 9f66237 | Baggage belt (`arrival.bagBelt`) added as conditional field; deboarding block logic tested. | P4 |
|
||||
| 4.1.13.4-R10 | Registration block shows: start time (HH:MM) + end time (HH:MM); boarding block shows: start time + end time + gate number (if received) + boarding-type (ramp/bus, if received) | 4.1.13.4 Table 28-29 attr cols | all | `FlightCard.tsx` | Done 9f66237 | Gate, ramp/bus (dispatch), start, end all added and tested. | P4 |
|
||||
| 4.1.13.4-R11 | Action area: «Поделиться» (share) icon shown; share opens VK/other social networks + copy-link; China locale also shows Weibo | 4.1.13.4 §4.1.13.4.5 | all | `SharePanel/` | Implemented 9f66237 | Share button + panel verified in FlightCard.test. | P4 |
|
||||
| 4.1.13.4-R12 | Action area: «Купить» button available when departure is > 2h away (by UTC) and flight is not cancelled | 4.1.13.4 §4.1.13.4.6 | all | `FlightCard.tsx` | Implemented 9f66237 | Buy button visibility rule verified (>2h UTC, not cancelled). | P4 |
|
||||
| 4.1.13.4-R13 | «Купить» for multi-segment: single button for whole flight; availability calculated from first segment departure | 4.1.13.4 §4.1.13.4.6 | all | `FlightCard.tsx` | Implemented 9f66237 | Single Buy button for multi-seg uses first-seg departure time. | P4 |
|
||||
| 4.1.13.4-R14 | «Купить» not shown for cancelled flights | 4.1.13.4 §4.1.13.4.6 | all | `FlightCard.tsx` | Implemented 9f66237 | Buy hidden for cancelled verified in FlightCard.test. | P4 |
|
||||
| 4.1.13.4-R15 | «Купить» click opens SB search page in new browser tab with route params (`route`, `cabin=economy`, `adults=1`, `autosearch=Y`) | 4.1.13.4 §4.1.13.4.6 Table 31 | all | `FlightCard.tsx` | Implemented 9f66237 | SB URL params (Table 31 format) verified. | P4 |
|
||||
| 4.1.13.4-R16 | «Онлайн-Регистрация» button shown when departure > min-check-in time away and flight not cancelled; for Россия airline links to Россия check-in page | 4.1.13.4 §4.1.13.4.7 | all | `OnlineCheckInButton/` | TBD (P5) | Online check-in button deferred; aircraft tail number display (aircraft.registration) also deferred to details-page parity task. | P4 |
|
||||
| 4.1.13.4-R17 | For multi-segment expanded: per-segment breakdown rendered; intermediate-landing badge between segments (same badge logic as collapsed §4.1.13.3.2) | 4.1.13.4 Table 26 multi-seg variant | all | `FlightCard.tsx` | Implemented 9f66237 | Per-segment layout in expanded multi-seg verified; codeshare chips per-segment deferred (currently merged into header via _childFlightIds). | P4 |
|
||||
| 4.1.13.4-R18 | «Детали рейса» button in expanded row opens flight details page (§4.1.15) | 4.1.13.4 §4.1.13.4.8 | all | `FlightCard.tsx` | Implemented 9f66237 | Details link navigates to §4.1.15 page; tested in FlightCard.test. | P4 |
|
||||
|
||||
---
|
||||
|
||||
@@ -871,131 +873,131 @@ Covers the full weekly results list shown after executing a Schedule search. Res
|
||||
|
||||
| # | Rule | TZ cite | Viewport | Current impl | Status | Action | Plan |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| 4.1.14-R1 | Results displayed per week; week is split into days; only days within `[-1, +330]` window are shown | 4.1.14 ¶1 | all | `ScheduleSearchPage.tsx` | TBD | Verify per-week grouping with day-level expansion. | P4 |
|
||||
| 4.1.14-R2 | No pagination — scroll within expanded day groups; infinite vertical scroll | 4.1.14 ¶2 | all | — | TBD | Verify no pagination component in Schedule results. | P4 |
|
||||
| 4.1.14-R3 | Desktop/tablet layout (Table 33): left = subsystem switcher + filter + «Вы искали»; right = breadcrumbs + page title + week-tabs + search-direction + column-header + flight list | 4.1.14 Table 33 | desktop, tablet | `ScheduleSearchPage.tsx` | TBD | Verify two-column layout per Table 33. | P4 |
|
||||
| 4.1.14-R4 | Mobile layout (Table 33): stacked — breadcrumbs → page title → subsystem switcher → filter → «Вы искали» → week-list → search-direction → flight list | 4.1.14 Table 33 | mobile | `ScheduleSearchPage.tsx` | TBD | Verify mobile stacking order. | P4 |
|
||||
| 4.1.14-R5 | «Направление поиска» (search-direction toggle) shown only when «Показать обратные рейсы» was checked; toggles between «Рейсы туда» and «Рейсы обратно» result lists | 4.1.14 Table 34 row 6 | all | `SearchDirectionToggle/` | TBD | Verify direction toggle visibility + switching behavior. | P4 |
|
||||
| 4.1.14-R6 | Column header (Шапочка списка рейсов, Table 34 row 7): shows columns «Рейс», «Авиакомпания, борт», «Вылет», «Время в пути», «Прилет»; «Вылет» and «Прилет» columns have asterisk footnote | 4.1.14 Table 34 row 7 | desktop, tablet | `ScheduleListHeader/` | TBD | Verify column header with footnote asterisks. | P4 |
|
||||
| 4.1.14-R7 | Footnote at bottom of list: «* Время в Системе - МЕСТНОЕ» | 4.1.14 Table 34 row 7 | all | `ScheduleSearchPage.tsx` | TBD | Verify footnote text rendered below list. | P4 |
|
||||
| 4.1.14-R8 | Each day in the results list can be collapsed/expanded independently | 4.1.14 ¶ after Table 34 | all | `ScheduleDayGroup/` | TBD | Verify day-group accordion is independently collapsible. | P4 |
|
||||
| 4.1.14-R9 | Each flight within a day can be collapsed/expanded; only one flight per day is expanded at a time; expanding new flight auto-collapses the previously expanded one | 4.1.14 ¶ after Table 34 | all | `ScheduleFlightList/` | TBD | Verify single-expanded-at-a-time per day. | P4 |
|
||||
| 4.1.14-R10 | On load, only active days within `[-1, +330]` are shown (inactive days hidden) | 4.1.14 ¶ results behavior | all | `ScheduleDayGroup/` | TBD | Verify inactive day filtering. | P4 |
|
||||
| 4.1.14-R11 | If search was on the current week, the current day of week is expanded on load | 4.1.14 ¶ results behavior | all | `ScheduleDayGroup/` | TBD | Verify today's day-group auto-expanded on current-week search. | P4 |
|
||||
| 4.1.14-R12 | If only one active day remains in the search week (e.g. Sunday), that day is auto-expanded | 4.1.14 ¶ results behavior | all | `ScheduleDayGroup/` | TBD | Verify last-day-of-week auto-expand. | P4 |
|
||||
| 4.1.14-R13 | If search was on a future week, the first day of that week is auto-expanded | 4.1.14 ¶ results behavior | all | `ScheduleDayGroup/` | TBD | Verify first-day auto-expand for future week. | P4 |
|
||||
| 4.1.14-R14 | On desktop/tablet: week-tabs, search-direction header, and column header are sticky at top during scroll | 4.1.14 Table 35 | desktop, tablet | — | TBD | Verify sticky for week-tabs + direction + column header. | P4 |
|
||||
| 4.1.14-R15 | On mobile: no elements are sticky (all scroll with page) | 4.1.14 Table 35 | mobile | — | TBD | Verify no sticky on mobile schedule results. | P4 |
|
||||
| 4.1.14-R16 | Scroll-up button (icon) fixed in bottom-right; appears when breadcrumbs + page title + subsystem tabs scroll out of viewport (desktop/tablet); on mobile also filter + week-list must scroll out | 4.1.14 ¶ «Кнопка Вверх» + Table 35 | all | — | TBD | Verify scroll-up button trigger for Schedule page. | P4 |
|
||||
| 4.1.14-R17 | Clicking scroll-up button scrolls page back to breadcrumbs visible, button then disappears | 4.1.14 ¶ «Кнопка Вверх» | all | — | TBD | Verify scroll-up click behavior. | P4 |
|
||||
| 4.1.14-R18 | Scroll-up button has no hover/active color change | 4.1.14 ¶ «Кнопка Вверх» | all | — | TBD | Verify no hover style on Schedule scroll-up. | P4 |
|
||||
| 4.1.14-R19 | When «Показать обратные рейсы» is active, both outbound and return results share the same week-tab set; week-tab validation applies calendar rules from §4.1.9.4 | 4.1.14.1 ¶ (round-trip) | all | `WeekTabs/` | TBD | Verify round-trip week-tab validation cross-check. | P4 |
|
||||
| 4.1.14-R20 | Round-trip week-tabs apply the same validation to each direction independently (Figures 19-24) | 4.1.14.1 ¶ Figures 19-24 | all | `WeekTabs/` | TBD | Verify per-direction tab blocking per mockup Figs 19-24. | P4 |
|
||||
| 4.1.14-R21 | Filter is sticky (left column) during scroll on desktop/tablet | 4.1.14 Table 35 | desktop, tablet | — | TBD | Verify filter sticky alongside week-tabs. | P4 |
|
||||
| 4.1.14-R22 | Subsystem switcher tooltips: «Онлайн-Табло» button = «Информация о фактическом выполнении рейсов в ближайшие дни»; desktop only | 4.1.14 Table 34 row 1 | desktop | `SubsystemSwitcher/` | TBD | Verify tooltip on Board button in Schedule context. | P4 |
|
||||
| 4.1.14-R23 | «Расписание» button tooltip: «Информация о планируемом выполнении рейсов на ближайший год»; desktop only | 4.1.14 Table 34 row 1 | desktop | `SubsystemSwitcher/` | TBD | Verify Schedule button tooltip text. | P4 |
|
||||
| 4.1.14-R24 | «Карта полетов» button tooltip: «Информация о карте полетов»; desktop only | 4.1.14 Table 34 row 1 | desktop | `SubsystemSwitcher/` | TBD | Verify Map button tooltip in Schedule context. | P4 |
|
||||
| 4.1.14-R1 | Results displayed per week; week is split into days; only days within `[-1, +330]` window are shown | 4.1.14 ¶1 | all | `ScheduleSearchPage.tsx`, `DayGroupedFlightList.tsx` | Implemented 6f67c06 | Per-week grouping with day-level expansion pre-existing; locked in DayGroupedFlightList.test. | P4 |
|
||||
| 4.1.14-R2 | No pagination — scroll within expanded day groups; infinite vertical scroll | 4.1.14 ¶2 | all | — | Implemented | No pagination component in Schedule results; verified by codebase inspection. | P4 |
|
||||
| 4.1.14-R3 | Desktop/tablet layout (Table 33): left = subsystem switcher + filter + «Вы искали»; right = breadcrumbs + page title + week-tabs + search-direction + column-header + flight list | 4.1.14 Table 33 | desktop, tablet | `ScheduleSearchPage.tsx` | Implemented | Two-column layout pre-existing; consistent with §4.1.13-R7 PageLayout pattern. | P4 |
|
||||
| 4.1.14-R4 | Mobile layout (Table 33): stacked — breadcrumbs → page title → subsystem switcher → filter → «Вы искали» → week-list → search-direction → flight list | 4.1.14 Table 33 | mobile | `ScheduleSearchPage.tsx` | Implemented | Single-column stacking pre-existing; matches PageLayout mobile pattern. | P4 |
|
||||
| 4.1.14-R5 | «Направление поиска» (search-direction toggle) shown only when «Показать обратные рейсы» was checked; toggles between «Рейсы туда» and «Рейсы обратно» result lists | 4.1.14 Table 34 row 6 | all | `SearchDirectionToggle/` | Implemented | Direction toggle visibility + switching pre-existing; locked in 6f67c06 tests. | P4 |
|
||||
| 4.1.14-R6 | Column header (Шапочка списка рейсов, Table 34 row 7): shows columns «Рейс», «Авиакомпания, борт», «Вылет», «Время в пути», «Прилет»; «Вылет» and «Прилет» columns have asterisk footnote | 4.1.14 Table 34 row 7 | desktop, tablet | `DayGroupedFlightList.tsx` | Implemented 6f67c06 | Column header with footnote asterisks verified in DayGroupedFlightList.test. | P4 |
|
||||
| 4.1.14-R7 | Footnote at bottom of list: «* Время в Системе - МЕСТНОЕ» | 4.1.14 Table 34 row 7 | all | `ScheduleSearchPage.tsx` | Implemented 6f67c06 | Footnote text rendered below list; verified in DayGroupedFlightList.test. | P4 |
|
||||
| 4.1.14-R8 | Each day in the results list can be collapsed/expanded independently | 4.1.14 ¶ after Table 34 | all | `DayGroupedFlightList.tsx` | Implemented 6f67c06 | Day-group accordion independently collapsible; tested. | P4 |
|
||||
| 4.1.14-R9 | Each flight within a day can be collapsed/expanded; only one flight per day is expanded at a time; expanding new flight auto-collapses the previously expanded one | 4.1.14 ¶ after Table 34 | all | `DayGroupedFlightList.tsx` | Implemented 6f67c06 | Single-expanded-at-a-time per day verified in DayGroupedFlightList.test. | P4 |
|
||||
| 4.1.14-R10 | On load, only active days within `[-1, +330]` are shown (inactive days hidden) | 4.1.14 ¶ results behavior | all | `DayGroupedFlightList.tsx` | Implemented 6f67c06 | Inactive day filtering verified; active window uses scheduleWindowBounds(). | P4 |
|
||||
| 4.1.14-R11 | If search was on the current week, the current day of week is expanded on load | 4.1.14 ¶ results behavior | all | `DayGroupedFlightList.tsx` | Implemented 6f67c06 | Today's day-group auto-expanded on current-week search; tested. | P4 |
|
||||
| 4.1.14-R12 | If only one active day remains in the search week (e.g. Sunday), that day is auto-expanded | 4.1.14 ¶ results behavior | all | `DayGroupedFlightList.tsx` | Implemented 6f67c06 | Last-day-of-week auto-expand verified. | P4 |
|
||||
| 4.1.14-R13 | If search was on a future week, the first day of that week is auto-expanded | 4.1.14 ¶ results behavior | all | `DayGroupedFlightList.tsx` | Implemented 6f67c06 | First-day auto-expand for future week verified in DayGroupedFlightList.test. | P4 |
|
||||
| 4.1.14-R14 | On desktop/tablet: week-tabs, search-direction header, and column header are sticky at top during scroll | 4.1.14 Table 35 | desktop, tablet | `PageLayout.tsx` | Implemented f6def71 | Sticky for week-tabs + direction + column header verified; PageLayout.test covers sticky wrappers. | P4 |
|
||||
| 4.1.14-R15 | On mobile: no elements are sticky (all scroll with page) | 4.1.14 Table 35 | mobile | `PageLayout.tsx` | Implemented f6def71 | No sticky on mobile schedule results; confirmed by PageLayout.test. | P4 |
|
||||
| 4.1.14-R16 | Scroll-up button (icon) fixed in bottom-right; appears when breadcrumbs + page title + subsystem tabs scroll out of viewport (desktop/tablet); on mobile also filter + week-list must scroll out | 4.1.14 ¶ «Кнопка Вверх» + Table 35 | all | `ScrollUpButton.tsx` | Implemented f6def71 | Scroll-up button trigger verified (same component as OB); 300px threshold tested. | P4 |
|
||||
| 4.1.14-R17 | Clicking scroll-up button scrolls page back to breadcrumbs visible, button then disappears | 4.1.14 ¶ «Кнопка Вверх» | all | `ScrollUpButton.tsx` | Implemented f6def71 | Scroll-up click behavior verified in ScrollUpButton.test. | P4 |
|
||||
| 4.1.14-R18 | Scroll-up button has no hover/active color change | 4.1.14 ¶ «Кнопка Вверх» | all | `ScrollUpButton.tsx` | Implemented f6def71 | No hover style on scroll-up confirmed. | P4 |
|
||||
| 4.1.14-R19 | When «Показать обратные рейсы» is active, both outbound and return results share the same week-tab set; week-tab validation applies calendar rules from §4.1.9.4 | 4.1.14.1 ¶ (round-trip) | all | `WeekTabs/` | Implemented 6f67c06 | Round-trip week-tab validation cross-check pre-existing; verified in WeekTabs.test. | P4 |
|
||||
| 4.1.14-R20 | Round-trip week-tabs apply the same validation to each direction independently (Figures 19-24) | 4.1.14.1 ¶ Figures 19-24 | all | `WeekTabs/` | Implemented 6f67c06 | Per-direction tab blocking per mockup Figs 19-24 verified. | P4 |
|
||||
| 4.1.14-R21 | Filter is sticky (left column) during scroll on desktop/tablet | 4.1.14 Table 35 | desktop, tablet | `PageLayout.tsx` | Implemented f6def71 | Filter sticky alongside week-tabs confirmed; PageLayout.test overlay assertions. | P4 |
|
||||
| 4.1.14-R22 | Subsystem switcher tooltips: «Онлайн-Табло» button = «Информация о фактическом выполнении рейсов в ближайшие дни»; desktop only | 4.1.14 Table 34 row 1 | desktop | `SubsystemSwitcher/` | Implemented | Tooltip text matches TZ (confirmed by C6 resolution `53b5359`); shared component. | P4 |
|
||||
| 4.1.14-R23 | «Расписание» button tooltip: «Информация о планируемом выполнении рейсов на ближайший год»; desktop only | 4.1.14 Table 34 row 1 | desktop | `SubsystemSwitcher/` | Implemented | Schedule button tooltip text confirmed matches TZ pre-P4. | P4 |
|
||||
| 4.1.14-R24 | «Карта полетов» button tooltip: «Информация о карте полетов»; desktop only | 4.1.14 Table 34 row 1 | desktop | `SubsystemSwitcher/` | Implemented | Map button tooltip confirmed matches TZ pre-P4. | P4 |
|
||||
|
||||
## §4.1.14.1 — Поведение Табов-недель (Week-tabs behavior)
|
||||
|
||||
| # | Rule | TZ cite | Viewport | Current impl | Status | Action | Plan |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| 4.1.14.1-R1 | Week-tabs paginate in groups of 7 weeks | 4.1.14.1 ¶1 | desktop, tablet | `WeekTabs/` | TBD | Verify 7-per-page week grouping. | P4 |
|
||||
| 4.1.14.1-R2 | One week tab = 7 calendar days (Mon–Sun); inactive days (outside `[-1, +330]`) within a week are hidden but the week tab itself remains active if it contains at least one active day | 4.1.14.1 ¶2 | all | `WeekTabs/` | TBD | Verify partial-week handling: tab active but out-of-range days hidden. | P4 |
|
||||
| 4.1.14.1-R3 | Active week-tabs: from the week containing `-1 day` up to the week containing `+330 days` from today | 4.1.14.1 ¶3 | all | `WeekTabs/` | TBD | Verify active week-tab range clipping. | P4 |
|
||||
| 4.1.14.1-R4 | Pagination starts from the week containing `-1 day` (same as current week start) | 4.1.14.1 ¶4 | desktop, tablet | `WeekTabs/` | TBD | Verify first page starts at the week of -1 day. | P4 |
|
||||
| 4.1.14.1-R5 | If the last active week-tab is not the last in a 7-slot page, remaining slots are filled with inactive (non-clickable) week-tabs to complete the 7; right-arrow paging then disabled | 4.1.14.1 ¶5 | desktop, tablet | `WeekTabs/` | TBD | Verify inactive padding + disabled right-arrow. | P4 |
|
||||
| 4.1.14.1-R6 | The user-requested week tab is highlighted (active style) and auto-scrolled into view | 4.1.14.1 ¶6 | all | `WeekTabs/` | TBD | Verify requested-week highlight + scroll-to. | P4 |
|
||||
| 4.1.14.1-R7 | Clicking a week-tab triggers search for that week using current filter values | 4.1.14.1 ¶7 | all | `WeekTabs/` | TBD | Verify search re-executes on week-tab click with same filter. | P4 |
|
||||
| 4.1.14.1-R8 | When switching week-tabs, results list is re-fetched for the selected week | 4.1.14.1 ¶8 | all | `WeekTabs/` | TBD | Verify API call on week change. | P4 |
|
||||
| 4.1.14.1-R9 | On mobile, week-tabs are replaced by a scrollable week-list with equivalent behavior | 4.1.14.1 ¶9 | mobile | `WeekList/` | TBD | Verify week-list renders on mobile instead of tabs. | P4 |
|
||||
| 4.1.14.1-R10 | If the last active week is only a partial week (e.g. only Sunday at day +330), that week-tab is still active but only that one valid day is shown within it | 4.1.14.1 ¶2 | all | `WeekTabs/` | TBD | Verify partial last-week handling. | P4 |
|
||||
| 4.1.14.1-R11 | When new week-tab is clicked, sort resets to default (departure time ascending, 00:00–23:59) | 4.1.14.2 ¶ last | all | `ScheduleSearchPage.tsx` | TBD | Verify sort reset on week-tab switch. | P4 |
|
||||
| 4.1.14.1-R1 | Week-tabs paginate in groups of 7 weeks | 4.1.14.1 ¶1 | desktop, tablet | `WeekTabs/` | Done 6f67c06 | 7-per-page week grouping verified in WeekTabs.test. | P4 |
|
||||
| 4.1.14.1-R2 | One week tab = 7 calendar days (Mon–Sun); inactive days (outside `[-1, +330]`) within a week are hidden but the week tab itself remains active if it contains at least one active day | 4.1.14.1 ¶2 | all | `WeekTabs/` | Done 6f67c06 | Partial-week handling verified; tab active but out-of-range days hidden. | P4 |
|
||||
| 4.1.14.1-R3 | Active week-tabs: from the week containing `-1 day` up to the week containing `+330 days` from today | 4.1.14.1 ¶3 | all | `WeekTabs/` | Done 6f67c06 | Fixed active range from hardcoded WEEKS_AFTER=30 (≈210 days) to `scheduleWindowBounds()` [-1,+330 days]; WeekTabs.test verifies. | P4 |
|
||||
| 4.1.14.1-R4 | Pagination starts from the week containing `-1 day` (same as current week start) | 4.1.14.1 ¶4 | desktop, tablet | `WeekTabs/` | Done 6f67c06 | First page starts at week of -1 day; verified in WeekTabs.test. | P4 |
|
||||
| 4.1.14.1-R5 | If the last active week-tab is not the last in a 7-slot page, remaining slots are filled with inactive (non-clickable) week-tabs to complete the 7; right-arrow paging then disabled | 4.1.14.1 ¶5 | desktop, tablet | `WeekTabs/` | Done 6f67c06 | Inactive padding + disabled right-arrow added; WeekTabs.test verifies. | P4 |
|
||||
| 4.1.14.1-R6 | The user-requested week tab is highlighted (active style) and auto-scrolled into view | 4.1.14.1 ¶6 | all | `WeekTabs/` | Done 6f67c06 | Auto-scroll via `useEffect` on `selectedMonday` prop change; requested-week highlight tested. | P4 |
|
||||
| 4.1.14.1-R7 | Clicking a week-tab triggers search for that week using current filter values | 4.1.14.1 ¶7 | all | `WeekTabs/` | Implemented | Search re-executes on week-tab click pre-existing; locked in WeekTabs.test. | P4 |
|
||||
| 4.1.14.1-R8 | When switching week-tabs, results list is re-fetched for the selected week | 4.1.14.1 ¶8 | all | `WeekTabs/` | Implemented | API call on week change pre-existing; verified by WeekTabs.test. | P4 |
|
||||
| 4.1.14.1-R9 | On mobile, week-tabs are replaced by a scrollable week-list with equivalent behavior | 4.1.14.1 ¶9 | mobile | `WeekList/` | Implemented | Week-list on mobile pre-existing; active range now matches [-1,+330]. | P4 |
|
||||
| 4.1.14.1-R10 | If the last active week is only a partial week (e.g. only Sunday at day +330), that week-tab is still active but only that one valid day is shown within it | 4.1.14.1 ¶2 | all | `WeekTabs/` | Done 6f67c06 | Partial last-week handling verified in WeekTabs.test. | P4 |
|
||||
| 4.1.14.1-R11 | When new week-tab is clicked, sort resets to default (departure time ascending, 00:00–23:59) | 4.1.14.2 ¶ last | all | `ScheduleSearchPage.tsx` | Implemented 6f67c06 | Sort reset on week-tab switch verified in DayGroupedFlightList.test. | P4 |
|
||||
|
||||
## §4.1.14.2 — Сортировка (Sort)
|
||||
|
||||
| # | Rule | TZ cite | Viewport | Current impl | Status | Action | Plan |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| 4.1.14.2-R1 | Default sort: by departure time ascending (00:00 → 23:59) | 4.1.14.2 ¶1 | all | — | TBD | Verify default sort order. | P4 |
|
||||
| 4.1.14.2-R2 | For multi-segment flights: sort by the searched segment's departure time | 4.1.14.2 ¶2 | all | — | TBD | Verify multi-seg uses matched-segment departure for sort. | P4 |
|
||||
| 4.1.14.2-R3 | For connecting flights (стыковочные): sort by the first segment's departure time | 4.1.14.2 ¶3 | all | — | TBD | Verify connecting sort by first-segment departure. | P4 |
|
||||
| 4.1.14.2-R4 | User can re-sort by: «Вылет» (departure time), «Время в пути» (duration), «Прилет» (arrival time) | 4.1.14.2 ¶4 | all | `ScheduleListHeader/` | TBD | Verify three sort columns clickable. | P4 |
|
||||
| 4.1.14.2-R5 | «Вылет» user-sort: ascending/descending departure time, with ordering yesterday < today < tomorrow | 4.1.14.2 ¶5 | all | — | TBD | Verify departure user-sort direction toggle + day ordering. | P4 |
|
||||
| 4.1.14.2-R6 | «Прилет» user-sort: ascending/descending arrival time, with ordering yesterday < today < tomorrow | 4.1.14.2 ¶6 | all | — | TBD | Verify arrival user-sort direction toggle + day ordering. | P4 |
|
||||
| 4.1.14.2-R7 | «Время в пути» user-sort: ascending/descending total flight duration | 4.1.14.2 ¶7 | all | — | TBD | Verify duration sort direction toggle. | P4 |
|
||||
| 4.1.14.2-R8 | Sort is applied per expanded day-group; when next day-group is expanded it inherits the sort that was applied previously | 4.1.14.2 ¶8 | all | — | TBD | Verify sort persistence across day-groups within same week. | P4 |
|
||||
| 4.1.14.2-R9 | Sort (user re-sort) applies to the start and end point of the searched route (direct/connecting) or segment (multi-segment) | 4.1.14.2 ¶4 | all | — | TBD | Verify sort applies to correct route endpoints. | P4 |
|
||||
| 4.1.14.2-R1 | Default sort: by departure time ascending (00:00 → 23:59) | 4.1.14.2 ¶1 | all | `DayGroupedFlightList.tsx` | Implemented 6f67c06 | Default departure-ascending sort pre-existing; locked in DayGroupedFlightList.test. | P4 |
|
||||
| 4.1.14.2-R2 | For multi-segment flights: sort by the searched segment's departure time | 4.1.14.2 ¶2 | all | `DayGroupedFlightList.tsx` | Implemented 6f67c06 | Multi-seg uses matched-segment departure for sort; verified. | P4 |
|
||||
| 4.1.14.2-R3 | For connecting flights (стыковочные): sort by the first segment's departure time | 4.1.14.2 ¶3 | all | `DayGroupedFlightList.tsx` | Implemented 6f67c06 | Connecting sort by first-segment departure verified. | P4 |
|
||||
| 4.1.14.2-R4 | User can re-sort by: «Вылет» (departure time), «Время в пути» (duration), «Прилет» (arrival time) | 4.1.14.2 ¶4 | all | `DayGroupedFlightList.tsx` | Implemented 6f67c06 | Three sort columns clickable; verified in DayGroupedFlightList.test. | P4 |
|
||||
| 4.1.14.2-R5 | «Вылет» user-sort: ascending/descending departure time, with ordering yesterday < today < tomorrow | 4.1.14.2 ¶5 | all | `DayGroupedFlightList.tsx` | Implemented 6f67c06 | Departure user-sort direction toggle + day ordering verified. | P4 |
|
||||
| 4.1.14.2-R6 | «Прилет» user-sort: ascending/descending arrival time, with ordering yesterday < today < tomorrow | 4.1.14.2 ¶6 | all | `DayGroupedFlightList.tsx` | Implemented 6f67c06 | Arrival user-sort direction toggle + day ordering verified. | P4 |
|
||||
| 4.1.14.2-R7 | «Время в пути» user-sort: ascending/descending total flight duration | 4.1.14.2 ¶7 | all | `DayGroupedFlightList.tsx` | Implemented 6f67c06 | Duration sort direction toggle verified. | P4 |
|
||||
| 4.1.14.2-R8 | Sort is applied per expanded day-group; when next day-group is expanded it inherits the sort that was applied previously | 4.1.14.2 ¶8 | all | `DayGroupedFlightList.tsx` | Implemented 6f67c06 | Sort persistence across day-groups within same week verified. | P4 |
|
||||
| 4.1.14.2-R9 | Sort (user re-sort) applies to the start and end point of the searched route (direct/connecting) or segment (multi-segment) | 4.1.14.2 ¶4 | all | `DayGroupedFlightList.tsx` | Implemented 6f67c06 | Sort applies to correct route endpoints; verified. | P4 |
|
||||
|
||||
## §4.1.14.3 — Свернутое представление (Collapsed row)
|
||||
|
||||
| # | Rule | TZ cite | Viewport | Current impl | Status | Action | Plan |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| 4.1.14.3-R1 | Collapsed rows for outbound and return directions have identical element structure | 4.1.14.3 ¶1 | all | `ScheduleFlightRow/` | TBD | Verify same component used for both directions. | P4 |
|
||||
| 4.1.14.3-R2 | Direct flight collapsed (Table 36): flight number `SU XXXX` (4-digit) | 4.1.14.3 Table 36 row 1 | all | `ScheduleFlightRow/` | TBD | Verify schedule flight number format. | P4 |
|
||||
| 4.1.14.3-R3 | Direct flight: mini (round) airline icon; if no icon available, show empty space (not placeholder) | 4.1.14.3 Table 36 row 2 | all | `ScheduleFlightRow/` | TBD | Verify mini-round logo; empty space when missing. | P4 |
|
||||
| 4.1.14.3-R4 | Direct flight: departure time = scheduled time (schedule only; no estimated/actual override in collapsed) | 4.1.14.3 Table 36 row 3 | all | `ScheduleFlightRow/` | TBD | Verify departure shows scheduled only in schedule collapsed. | P4 |
|
||||
| 4.1.14.3-R5 | Departure day-change badge `±X` with hover tooltip (hover = «день» for ±1, else `DD.MM.YYYY`; no tooltip on mobile) | 4.1.14.3 Table 36 row 4 | all | `DayChangeBadge/` | TBD | Verify day-change badge on schedule departure. | P4 |
|
||||
| 4.1.14.3-R6 | Departure city name shown | 4.1.14.3 Table 36 row 5 | all | `ScheduleFlightRow/` | TBD | Verify departure city. | P4 |
|
||||
| 4.1.14.3-R7 | Departure airport shown if data received; Шереметьево/Внуково as clickable link opening new tab | 4.1.14.3 Table 36 row 6 | all | `ScheduleFlightRow/` | TBD | Verify airport link for SVO/VKO in schedule. | P4 |
|
||||
| 4.1.14.3-R8 | Departure terminal shown if data received; hidden if not | 4.1.14.3 Table 36 row 7 | all | `ScheduleFlightRow/` | TBD | Verify terminal conditional display. | P4 |
|
||||
| 4.1.14.3-R9 | Duration shown as icon + formatted time: `{MM}мин.` / `{HH}ч. {MM}мин.` / `{D}д. {MM}мин.` / `{D}д. {HH}ч. {MM}мин.` | 4.1.14.3 Table 36 row 8 | all | `ScheduleFlightRow/` | TBD | Verify duration format. | P4 |
|
||||
| 4.1.14.3-R10 | Duration = sum of all segment durations + all transfer/layover durations | 4.1.14.3 Table 36 row 8 | all | `ScheduleFlightRow/` | TBD | Verify duration calculation includes transfer time. | P4 |
|
||||
| 4.1.14.3-R11 | Arrival time = scheduled | 4.1.14.3 Table 36 row 9 | all | `ScheduleFlightRow/` | TBD | Verify arrival shows scheduled only. | P4 |
|
||||
| 4.1.14.3-R12 | Arrival day-change badge `±X` with same hover tooltip rules | 4.1.14.3 Table 36 row 10 | all | `DayChangeBadge/` | TBD | Verify arrival day-change badge. | P4 |
|
||||
| 4.1.14.3-R13 | Arrival city name shown | 4.1.14.3 Table 36 row 11 | all | `ScheduleFlightRow/` | TBD | Verify arrival city. | P4 |
|
||||
| 4.1.14.3-R14 | Arrival airport shown if data received; Шереметьево/Внуково as link | 4.1.14.3 Table 36 row 12 | all | `ScheduleFlightRow/` | TBD | Verify arrival airport link. | P4 |
|
||||
| 4.1.14.3-R15 | Arrival terminal shown if data received; hidden if not | 4.1.14.3 Table 36 row 13 | all | `ScheduleFlightRow/` | TBD | Verify arrival terminal conditional. | P4 |
|
||||
| 4.1.14.3-R16 | Expand/collapse toggle arrow shown on every row | 4.1.14.3 Table 36 row 14 | all | `ScheduleFlightRow/` | TBD | Verify toggle arrow rendered. | P4 |
|
||||
| 4.1.14.3-R17 | Multi-segment collapsed (Table 37): single flight number for whole flight, single mini-icon (same carrier throughout); departure = first segment, arrival = last segment | 4.1.14.3 Table 37 rows 1–14 | all | `ScheduleFlightRow/` | TBD | Verify multi-seg single number + single icon + first/last endpoints. | P4 |
|
||||
| 4.1.14.3-R18 | Multi-segment collapsed: intermediate-landing badge between segments (same badge type logic as §4.1.13.3.2 / §4.1.14.3.2) | 4.1.14.3 Table 37 row 15 | all | `IntermediateLandingBadge/` | TBD | Verify intermediate-landing badge in schedule collapsed. | P4 |
|
||||
| 4.1.14.3-R19 | Connecting flight (direct+direct, Table 38): two flight numbers displayed separated (e.g. `SU XXXX - SU XXXX`); two mini-icons, one per segment; if same airline, two identical icons | 4.1.14.3 Table 38 rows 1–2 | all | `ScheduleFlightRow/` | TBD | Verify connecting flight numbers + dual mini-icons. | P4 |
|
||||
| 4.1.14.3-R20 | Connecting flight: if a segment has no mini-icon, show empty space (no placeholder) | 4.1.14.3 Table 38 row 2 | all | `ScheduleFlightRow/` | TBD | Verify empty space when mini-icon missing. | P4 |
|
||||
| 4.1.14.3-R21 | Connecting flight collapsed (Table 38): departure from first segment, arrival at last segment; transfer badge between segments | 4.1.14.3 Table 38 rows 3–15 | all | `ScheduleFlightRow/` | TBD | Verify connecting flight endpoints + transfer badge. | P4 |
|
||||
| 4.1.14.3-R22 | Connecting+multi-segment hybrid (Table 39): flight numbers of all participating legs; mini-icons per leg; departure = first segment, arrival = last | 4.1.14.3 Table 39 | all | `ScheduleFlightRow/` | TBD | Verify mixed multi-seg+connecting layout. | P4 |
|
||||
| 4.1.14.3-R23 | Transfer/intermediate-landing badge (§4.1.14.3.2): for connecting flights badge type = «Пересадка»; for multi-segment = «Промежуточная посадка»; badge shows city + airport + terminal + type icon | 4.1.14.3.2 | all | `TransferBadge/`, `IntermediateLandingBadge/` | TBD | Verify correct badge type per flight type. | P4 |
|
||||
| 4.1.14.3-R24 | For 2+ stops: badge shows stop count + icon + change-of-city/airport/terminal flags; flags shown for any stop that had the change | 4.1.14.3.2 ¶ (2+ stops) | all | `TransferBadge/` | TBD | Verify multi-stop badge with count + flags. | P4 |
|
||||
| 4.1.14.3-R25 | Badge type 1 (no-change): prev-arr city = next-dep city AND prev-arr airport = next-dep airport AND terminals same (or one terminal missing) | 4.1.14.3.2 rules | all | `TransferBadge/` | TBD | Verify badge type 1 condition. | P4 |
|
||||
| 4.1.14.3-R26 | Badge type 2 (city-change): prev-arr city ≠ next-dep city → show city-change variant | 4.1.14.3.2 rules | all | `TransferBadge/` | TBD | Verify badge type 2 condition. | P4 |
|
||||
| 4.1.14.3-R27 | Badge type 3 (terminal-change): same city + same airport + different terminals | 4.1.14.3.2 rules | all | `TransferBadge/` | TBD | Verify badge type 3 condition. | P4 |
|
||||
| 4.1.14.3-R28 | Badge type 4 (airport-change): same city + different airports | 4.1.14.3.2 rules | all | `TransferBadge/` | TBD | Verify badge type 4 condition. | P4 |
|
||||
| 4.1.14.3-R29 | Шереметьево/Внуково names in badge rendered as links opening new tab | 4.1.14.3.2 | all | `TransferBadge/` | TBD | Verify airport links in transfer badge. | P4 |
|
||||
| 4.1.14.3-R30 | For 2+ mixed stops (промежуточные посадки + пересадки): badge shows type «Пересадки»; flags priority order: «Смена города» > «Смена аэропорта» > «Смена терминала»; shown in occurrence order | 4.1.14.3.2 (2+ mixed) | all | `TransferBadge/` | TBD | Verify mixed-stop badge flag ordering. | P4 |
|
||||
| 4.1.14.3-R1 | Collapsed rows for outbound and return directions have identical element structure | 4.1.14.3 ¶1 | all | `ScheduleFlightRow/` | Implemented 6f67c06 | Same component used for both directions; verified in DayGroupedFlightList.test. | P4 |
|
||||
| 4.1.14.3-R2 | Direct flight collapsed (Table 36): flight number `SU XXXX` (4-digit) | 4.1.14.3 Table 36 row 1 | all | `ScheduleFlightRow/` | Implemented 6f67c06 | Schedule flight number format locked in DayGroupedFlightList.test Table 36 row 1. | P4 |
|
||||
| 4.1.14.3-R3 | Direct flight: mini (round) airline icon; if no icon available, show empty space (not placeholder) | 4.1.14.3 Table 36 row 2 | all | `ScheduleFlightRow/` | Implemented 6f67c06 | Mini-round logo verified; empty space when missing tested. | P4 |
|
||||
| 4.1.14.3-R4 | Direct flight: departure time = scheduled time (schedule only; no estimated/actual override in collapsed) | 4.1.14.3 Table 36 row 3 | all | `ScheduleFlightRow/` | Implemented 6f67c06 | Departure shows scheduled only in schedule collapsed; verified. | P4 |
|
||||
| 4.1.14.3-R5 | Departure day-change badge `±X` with hover tooltip (hover = «день» for ±1, else `DD.MM.YYYY`; no tooltip on mobile) | 4.1.14.3 Table 36 row 4 | all | `DayChangeBadge/` | Implemented 6f67c06 | Day-change badge on schedule departure verified in DayGroupedFlightList.test. | P4 |
|
||||
| 4.1.14.3-R6 | Departure city name shown | 4.1.14.3 Table 36 row 5 | all | `ScheduleFlightRow/` | Implemented 6f67c06 | Departure city rendered; verified. | P4 |
|
||||
| 4.1.14.3-R7 | Departure airport shown if data received; Шереметьево/Внуково as clickable link opening new tab | 4.1.14.3 Table 36 row 6 | all | `ScheduleFlightRow/` | TBD (P5) | Airport-as-link for SVO/VKO deferred; airport name display verified but link not implemented. | P4 |
|
||||
| 4.1.14.3-R8 | Departure terminal shown if data received; hidden if not | 4.1.14.3 Table 36 row 7 | all | `ScheduleFlightRow/` | Implemented 6f67c06 | Terminal conditional display verified. | P4 |
|
||||
| 4.1.14.3-R9 | Duration shown as icon + formatted time: `{MM}мин.` / `{HH}ч. {MM}мин.` / `{D}д. {MM}мин.` / `{D}д. {HH}ч. {MM}мин.` | 4.1.14.3 Table 36 row 8 | all | `ScheduleFlightRow/` | Implemented 6f67c06 | Duration format verified in DayGroupedFlightList.test. | P4 |
|
||||
| 4.1.14.3-R10 | Duration = sum of all segment durations + all transfer/layover durations | 4.1.14.3 Table 36 row 8 | all | `ScheduleFlightRow/` | Implemented 6f67c06 | Duration calculation includes transfer time; verified. | P4 |
|
||||
| 4.1.14.3-R11 | Arrival time = scheduled | 4.1.14.3 Table 36 row 9 | all | `ScheduleFlightRow/` | Implemented 6f67c06 | Arrival shows scheduled only; verified. | P4 |
|
||||
| 4.1.14.3-R12 | Arrival day-change badge `±X` with same hover tooltip rules | 4.1.14.3 Table 36 row 10 | all | `DayChangeBadge/` | Implemented 6f67c06 | Arrival day-change badge locked in DayGroupedFlightList.test. | P4 |
|
||||
| 4.1.14.3-R13 | Arrival city name shown | 4.1.14.3 Table 36 row 11 | all | `ScheduleFlightRow/` | Implemented 6f67c06 | Arrival city verified. | P4 |
|
||||
| 4.1.14.3-R14 | Arrival airport shown if data received; Шереметьево/Внуково as link | 4.1.14.3 Table 36 row 12 | all | `ScheduleFlightRow/` | TBD (P5) | Airport-as-link deferred (same as R7); airport name verified. | P4 |
|
||||
| 4.1.14.3-R15 | Arrival terminal shown if data received; hidden if not | 4.1.14.3 Table 36 row 13 | all | `ScheduleFlightRow/` | Implemented 6f67c06 | Arrival terminal conditional verified. | P4 |
|
||||
| 4.1.14.3-R16 | Expand/collapse toggle arrow shown on every row | 4.1.14.3 Table 36 row 14 | all | `ScheduleFlightRow/` | Implemented 6f67c06 | Toggle arrow rendered; verified in DayGroupedFlightList.test. | P4 |
|
||||
| 4.1.14.3-R17 | Multi-segment collapsed (Table 37): single flight number for whole flight, single mini-icon (same carrier throughout); departure = first segment, arrival = last segment | 4.1.14.3 Table 37 rows 1–14 | all | `ScheduleFlightRow/` | Implemented 6f67c06 | Multi-seg single number + single round icon (`3ae59da`) + first/last endpoints verified. | P4 |
|
||||
| 4.1.14.3-R18 | Multi-segment collapsed: intermediate-landing badge between segments (same badge type logic as §4.1.13.3.2 / §4.1.14.3.2) | 4.1.14.3 Table 37 row 15 | all | `IntermediateLandingBadge/` | Implemented 6f67c06 | Intermediate-landing badge in schedule collapsed verified. | P4 |
|
||||
| 4.1.14.3-R19 | Connecting flight (direct+direct, Table 38): two flight numbers displayed separated (e.g. `SU XXXX - SU XXXX`); two mini-icons, one per segment; if same airline, two identical icons | 4.1.14.3 Table 38 rows 1–2 | all | `ScheduleFlightRow/` | Implemented 6f67c06 | Connecting flight numbers + dual mini-icons verified in DayGroupedFlightList.test Table 38. | P4 |
|
||||
| 4.1.14.3-R20 | Connecting flight: if a segment has no mini-icon, show empty space (no placeholder) | 4.1.14.3 Table 38 row 2 | all | `ScheduleFlightRow/` | Implemented 6f67c06 | Empty space when mini-icon missing verified. | P4 |
|
||||
| 4.1.14.3-R21 | Connecting flight collapsed (Table 38): departure from first segment, arrival at last segment; transfer badge between segments | 4.1.14.3 Table 38 rows 3–15 | all | `ScheduleFlightRow/` | Implemented 6f67c06 | Connecting flight endpoints + transfer badge verified. | P4 |
|
||||
| 4.1.14.3-R22 | Connecting+multi-segment hybrid (Table 39): flight numbers of all participating legs; mini-icons per leg; departure = first segment, arrival = last | 4.1.14.3 Table 39 | all | `ScheduleFlightRow/` | Implemented 6f67c06 | Mixed multi-seg+connecting layout verified in DayGroupedFlightList.test Table 39. | P4 |
|
||||
| 4.1.14.3-R23 | Transfer/intermediate-landing badge (§4.1.14.3.2): for connecting flights badge type = «Пересадка»; for multi-segment = «Промежуточная посадка»; badge shows city + airport + terminal + type icon | 4.1.14.3.2 | all | `TransferBadge/`, `IntermediateLandingBadge/` | Implemented 6f67c06 | Correct badge type per flight type verified. | P4 |
|
||||
| 4.1.14.3-R24 | For 2+ stops: badge shows stop count + icon + change-of-city/airport/terminal flags; flags shown for any stop that had the change | 4.1.14.3.2 ¶ (2+ stops) | all | `TransferBadge/` | Implemented 6f67c06 | Multi-stop badge with count + flags verified. | P4 |
|
||||
| 4.1.14.3-R25 | Badge type 1 (no-change): prev-arr city = next-dep city AND prev-arr airport = next-dep airport AND terminals same (or one terminal missing) | 4.1.14.3.2 rules | all | `TransferBadge/` | Implemented 6f67c06 | Badge type 1 condition verified. | P4 |
|
||||
| 4.1.14.3-R26 | Badge type 2 (city-change): prev-arr city ≠ next-dep city → show city-change variant | 4.1.14.3.2 rules | all | `TransferBadge/` | Implemented 6f67c06 | Badge type 2 condition verified. | P4 |
|
||||
| 4.1.14.3-R27 | Badge type 3 (terminal-change): same city + same airport + different terminals | 4.1.14.3.2 rules | all | `TransferBadge/` | Implemented 6f67c06 | Badge type 3 condition verified. | P4 |
|
||||
| 4.1.14.3-R28 | Badge type 4 (airport-change): same city + different airports | 4.1.14.3.2 rules | all | `TransferBadge/` | Implemented 6f67c06 | Badge type 4 condition verified. | P4 |
|
||||
| 4.1.14.3-R29 | Шереметьево/Внуково names in badge rendered as links opening new tab | 4.1.14.3.2 | all | `TransferBadge/` | TBD (P5) | Airport links in transfer badge deferred (same as R7/R14 airport-as-link backlog). | P4 |
|
||||
| 4.1.14.3-R30 | For 2+ mixed stops (промежуточные посадки + пересадки): badge shows type «Пересадки»; flags priority order: «Смена города» > «Смена аэропорта» > «Смена терминала»; shown in occurrence order | 4.1.14.3.2 (2+ mixed) | all | `TransferBadge/` | Implemented 6f67c06 | Mixed-stop badge flag ordering verified in DayGroupedFlightList.test. | P4 |
|
||||
|
||||
## §4.1.14.4 — Развернутое представление (Expanded row)
|
||||
|
||||
| # | Rule | TZ cite | Viewport | Current impl | Status | Action | Plan |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| 4.1.14.4-R1 | Expanded row has background color distinct from collapsed rows, plus a left-edge colored bar spanning the full expanded height | 4.1.14.4 ¶1 | all | `ScheduleFlightExpanded/` | TBD | Verify expanded row background + left bar. | P4 |
|
||||
| 4.1.14.4-R2 | Outbound and return direction expanded rows have identical element structure | 4.1.14.4 ¶2 | all | `ScheduleFlightExpanded/` | TBD | Verify same structure for both directions. | P4 |
|
||||
| 4.1.14.4-R3 | Direct flight expanded (Table 41): header = flight number + mini-icon + departure block + duration + arrival block + toggle; action area = «Поделиться» + «Купить» + «Статус рейса» + «Детали рейса» | 4.1.14.4 Table 41 | all | `ScheduleFlightExpanded/` | TBD | Verify direct flight expanded structure. | P4 |
|
||||
| 4.1.14.4-R4 | Per-segment info block (in expanded direct, Table 41): segment number + full airline logo + aircraft type (if data received, shown under logo, else hidden) | 4.1.14.4 Table 41 / Table 42 per-seg rows | all | `ScheduleFlightExpanded/` | TBD | Verify full logo + aircraft type per segment. | P4 |
|
||||
| 4.1.14.4-R5 | Segment departure time (HH:MM) + day-change badge (with hover tooltip); departure city + airport (SVO/VKO as link) + terminal | 4.1.14.4 Table 42 per-seg rows 4–8 | all | `ScheduleFlightExpanded/` | TBD | Verify segment departure block fields. | P4 |
|
||||
| 4.1.14.4-R6 | Segment duration = `arr_scheduled - dep_scheduled` (schedule times used for schedule expanded) | 4.1.14.4 Table 42 per-seg row 9 | all | `ScheduleFlightExpanded/` | TBD | Verify segment duration uses scheduled times. | P4 |
|
||||
| 4.1.14.4-R7 | Segment arrival time (HH:MM) + day-change badge; arrival city + airport (SVO/VKO as link) + terminal | 4.1.14.4 Table 42 per-seg rows 10–14 | all | `ScheduleFlightExpanded/` | TBD | Verify segment arrival block fields. | P4 |
|
||||
| 4.1.14.4-R8 | Codeshare numbers (дополнительные номера рейса) shown if received; hidden if no data | 4.1.14.4 Table 41 row 16 | all | `ScheduleFlightExpanded/` | TBD | Verify codeshare field conditional display. | P4 |
|
||||
| 4.1.14.4-R9 | Multi-segment expanded (Table 42): header shows single flight number + single mini-icon; then «Маршрут» (route strip) section (desktop/tablet only) + per-segment blocks | 4.1.14.4 Table 42 | desktop, tablet | `ScheduleFlightExpanded/` | TBD | Verify multi-seg expanded header + route strip. | P4 |
|
||||
| 4.1.14.4-R10 | «Маршрут» (route strip) NOT shown on mobile | 4.1.14.4 Table 42 ¶ Маршрут | mobile | `ScheduleFlightExpanded/` | TBD | Verify route strip hidden on mobile. | P4 |
|
||||
| 4.1.14.4-R11 | Route strip content (multi-seg, Table 42 Маршрут): segment sequence: dep-time + city → [seg-num + seg-duration + day-change] → [stop-duration + city + airport + terminal] → ... → arr-time | 4.1.14.4 Table 42 Маршрут rows | desktop, tablet | `ScheduleRouteStrip/` | TBD | Verify route strip sequence elements. | P4 |
|
||||
| 4.1.14.4-R12 | Route strip scroll: left/right scroll arrows shown when content exceeds area width (more than one intermediate stop); arrows hidden if content fits | 4.1.14.4 Table 42 Маршрут rows 1, 16 | desktop, tablet | `ScheduleRouteStrip/` | TBD | Verify route strip overflow scroll arrows. | P4 |
|
||||
| 4.1.14.4-R13 | Intermediate-stop duration in route strip = `next_dep_scheduled - prev_arr_scheduled` | 4.1.14.4 Table 42 Маршрут row 11 | all | `ScheduleRouteStrip/` | TBD | Verify stop duration calculation. | P4 |
|
||||
| 4.1.14.4-R14 | If prev-arr city = next-dep city: show one city name; if different cities: show both cities with their airports/terminals | 4.1.14.4 Table 42 Маршрут row 12 | all | `ScheduleRouteStrip/` | TBD | Verify city-change display in route strip. | P4 |
|
||||
| 4.1.14.4-R15 | If prev-arr airport = next-dep airport: show one airport name; if different: show both airports (with their terminals) | 4.1.14.4 Table 42 Маршрут row 13 | all | `ScheduleRouteStrip/` | TBD | Verify airport-change display in route strip. | P4 |
|
||||
| 4.1.14.4-R16 | Inter-segment transfer/landing badge in expanded (§4.1.14.4.2): shows icon + type + duration + city + airport + terminal; duration = `next_dep_scheduled - prev_arr_scheduled` | 4.1.14.4 §4.1.14.4.2 | all | `ScheduleTransferBar/` | TBD | Verify transfer bar content (type, duration, city, airport, terminal). | P4 |
|
||||
| 4.1.14.4-R17 | Expanded transfer badge type logic (§4.1.14.4.2) same as collapsed (type 1–4 by city/airport/terminal equality) | 4.1.14.4 §4.1.14.4.2 rules | all | `ScheduleTransferBar/` | TBD | Verify expanded badge type matches collapsed type conditions. | P4 |
|
||||
| 4.1.14.4-R18 | Шереметьево/Внуково in expanded transfer badge rendered as link opening new tab | 4.1.14.4 §4.1.14.4.2 | all | `ScheduleTransferBar/` | TBD | Verify airport link in expanded transfer badge. | P4 |
|
||||
| 4.1.14.4-R19 | Multi-leg operator-logo is compact (round mini-icon) in multi-seg expanded header (commit `3ae59da` parity) | 4.1.14.4 Table 42 row 2 | all | `src/features/schedule/*` | Implemented | Verified by commit `3ae59da`. | P4 |
|
||||
| 4.1.14.4-R20 | Action area: «Поделиться» (share) — same social network list as §4.1.13.4.5; VK + copy-link; China locale adds Weibo | 4.1.14.4 §4.1.14.4.3 | all | `SharePanel/` | TBD | Verify share in schedule expanded row. | P4 |
|
||||
| 4.1.14.4-R21 | «Купить» button: shown when `scheduled_departure_UTC > now + 2h` AND `scheduled_departure_UTC < now + 330 days` AND flight not cancelled | 4.1.14.4 §4.1.14.4.4 | all | `BuyButton/` | TBD | Verify Schedule Buy button time window (330-day upper bound, 2h lower). | P4 |
|
||||
| 4.1.14.4-R22 | «Купить» for multi-segment/connecting: single button; availability uses first segment departure | 4.1.14.4 §4.1.14.4.4 | all | `BuyButton/` | TBD | Verify single Buy for multi-seg uses first-seg time. | P4 |
|
||||
| 4.1.14.4-R23 | «Купить» not shown for cancelled flights; rule applies to Online-Board and the same flight in Schedule | 4.1.14.4 §4.1.14.4.4 | all | `BuyButton/` | TBD | Verify Buy hidden for cancelled; cross-subsystem rule. | P4 |
|
||||
| 4.1.14.4-R24 | «Статус рейса» button shown only when the departure day equals today; for multi-seg/connecting: single button, based on first-segment departure | 4.1.14.4 §4.1.14.4.5 | all | `FlightStatusButton/` | TBD | Verify Status button today-only visibility. | P4 |
|
||||
| 4.1.14.4-R25 | «Статус рейса» click: opens Online-Board flight card in new browser tab; mini-list in that card shows only the one clicked flight | 4.1.14.4 §4.1.14.4.5 | all | `FlightStatusButton/` | TBD | Verify Status click opens OB card with single-flight mini-list. | P4 |
|
||||
| 4.1.14.4-R26 | «Статус рейса» for multi-segment: opens a separate OB card for each segment in new browser tabs (requires browser popup permission) | 4.1.14.4 §4.1.14.4.5 | all | `FlightStatusButton/` | TBD | Verify multi-seg opens multiple tabs (one per segment). | P4 |
|
||||
| 4.1.14.4-R27 | «Статус рейса» for Аврора segment: navigates to `https://www.flyaurora.ru/`; for Победа: `https://www.pobeda.aero` | 4.1.14.4 §4.1.14.4.5 | all | `FlightStatusButton/` | TBD | Verify Аврора/Победа external URL navigation. | P4 |
|
||||
| 4.1.14.4-R28 | «Статус рейса» not shown if all segments are operated by airlines other than Аэрофлот/Россия/Аврора/Победа | 4.1.14.4 §4.1.14.4.5 | all | `FlightStatusButton/` | TBD | Verify Status hidden for non-group carriers. | P4 |
|
||||
| 4.1.14.4-R29 | «Статус рейса» hover tooltip: «Подробнее о фактическом выполнении рейса» (desktop only; no tooltip on mobile) | 4.1.14.4 §4.1.14.4.5 | desktop | `FlightStatusButton/` | TBD | Verify Status button tooltip desktop-only. | P4 |
|
||||
| 4.1.14.4-R30 | «Детали рейса» button: opens flight details card (§4.1.16) with date-tab set to the first-segment scheduled departure date | 4.1.14.4 §4.1.14.4.6 | all | `DetailsButton/` | TBD | Verify Details link opens §4.1.16 with correct date-tab. | P4 |
|
||||
| 4.1.14.4-R31 | «Мобильная версия» для кнопки «Статус рейса» в сегментах — кнопка не выводится (рис. 26) | 4.1.14.4 §4.1.14.4.5 Fig 26 | mobile | `FlightStatusButton/` | TBD | Verify Status button suppressed in mobile per-segment view. | P4 |
|
||||
| 4.1.14.4-R1 | Expanded row has background color distinct from collapsed rows, plus a left-edge colored bar spanning the full expanded height | 4.1.14.4 ¶1 | all | `ScheduleFlightBody.tsx`, `ScheduleFlightBody.scss` | Implemented 4290c81 | Expanded row background + left bar verified in ScheduleFlightBody.test. | P4 |
|
||||
| 4.1.14.4-R2 | Outbound and return direction expanded rows have identical element structure | 4.1.14.4 ¶2 | all | `ScheduleFlightBody.tsx` | Implemented 4290c81 | Same component/structure for both directions verified. | P4 |
|
||||
| 4.1.14.4-R3 | Direct flight expanded (Table 41): header = flight number + mini-icon + departure block + duration + arrival block + toggle; action area = «Поделиться» + «Купить» + «Статус рейса» + «Детали рейса» | 4.1.14.4 Table 41 | all | `ScheduleFlightBody.tsx` | Implemented 4290c81 | Direct flight expanded structure verified in ScheduleFlightBody.test. | P4 |
|
||||
| 4.1.14.4-R4 | Per-segment info block (in expanded direct, Table 41): segment number + full airline logo + aircraft type (if data received, shown under logo, else hidden) | 4.1.14.4 Table 41 / Table 42 per-seg rows | all | `ScheduleFlightBody.tsx` | Implemented 4290c81 | Full logo + aircraft type per segment verified. | P4 |
|
||||
| 4.1.14.4-R5 | Segment departure time (HH:MM) + day-change badge (with hover tooltip); departure city + airport (SVO/VKO as link) + terminal | 4.1.14.4 Table 42 per-seg rows 4–8 | all | `ScheduleFlightBody.tsx` | Partial 4290c81 | Segment departure block (time, badge, city, terminal) verified; SVO/VKO airport-as-link deferred to P5. | P4 |
|
||||
| 4.1.14.4-R6 | Segment duration = `arr_scheduled - dep_scheduled` (schedule times used for schedule expanded) | 4.1.14.4 Table 42 per-seg row 9 | all | `ScheduleFlightBody.tsx` | Implemented 4290c81 | Segment duration uses scheduled times; verified. | P4 |
|
||||
| 4.1.14.4-R7 | Segment arrival time (HH:MM) + day-change badge; arrival city + airport (SVO/VKO as link) + terminal | 4.1.14.4 Table 42 per-seg rows 10–14 | all | `ScheduleFlightBody.tsx` | Partial 4290c81 | Segment arrival block (time, badge, city, terminal) verified; SVO/VKO airport-as-link deferred to P5. | P4 |
|
||||
| 4.1.14.4-R8 | Codeshare numbers (дополнительные номера рейса) shown if received; hidden if no data | 4.1.14.4 Table 41 row 16 | all | `ScheduleFlightBody.tsx` | Implemented 4290c81 | Codeshare field conditional display verified. | P4 |
|
||||
| 4.1.14.4-R9 | Multi-segment expanded (Table 42): header shows single flight number + single mini-icon; then «Маршрут» (route strip) section (desktop/tablet only) + per-segment blocks | 4.1.14.4 Table 42 | desktop, tablet | `ScheduleFlightBody.tsx` | Implemented 4290c81 | Multi-seg expanded header + route strip verified in ScheduleFlightBody.test. | P4 |
|
||||
| 4.1.14.4-R10 | «Маршрут» (route strip) NOT shown on mobile | 4.1.14.4 Table 42 ¶ Маршрут | mobile | `ScheduleFlightBody.tsx` | Implemented 4290c81 | Route strip hidden on mobile verified. | P4 |
|
||||
| 4.1.14.4-R11 | Route strip content (multi-seg, Table 42 Маршрут): segment sequence: dep-time + city → [seg-num + seg-duration + day-change] → [stop-duration + city + airport + terminal] → ... → arr-time | 4.1.14.4 Table 42 Маршрут rows | desktop, tablet | `ScheduleFlightBody.tsx` | Implemented 4290c81 | Route strip sequence elements verified. | P4 |
|
||||
| 4.1.14.4-R12 | Route strip scroll: left/right scroll arrows shown when content exceeds area width (more than one intermediate stop); arrows hidden if content fits | 4.1.14.4 Table 42 Маршрут rows 1, 16 | desktop, tablet | `ScheduleFlightBody.tsx` | Implemented 4290c81 | Route strip overflow scroll arrows verified. | P4 |
|
||||
| 4.1.14.4-R13 | Intermediate-stop duration in route strip = `next_dep_scheduled - prev_arr_scheduled` | 4.1.14.4 Table 42 Маршрут row 11 | all | `ScheduleFlightBody.tsx` | Implemented 4290c81 | Stop duration calculation verified. | P4 |
|
||||
| 4.1.14.4-R14 | If prev-arr city = next-dep city: show one city name; if different cities: show both cities with their airports/terminals | 4.1.14.4 Table 42 Маршрут row 12 | all | `ScheduleFlightBody.tsx` | Implemented 4290c81 | City-change display in route strip verified. | P4 |
|
||||
| 4.1.14.4-R15 | If prev-arr airport = next-dep airport: show one airport name; if different: show both airports (with their terminals) | 4.1.14.4 Table 42 Маршрут row 13 | all | `ScheduleFlightBody.tsx` | Implemented 4290c81 | Airport-change display in route strip verified. | P4 |
|
||||
| 4.1.14.4-R16 | Inter-segment transfer/landing badge in expanded (§4.1.14.4.2): shows icon + type + duration + city + airport + terminal; duration = `next_dep_scheduled - prev_arr_scheduled` | 4.1.14.4 §4.1.14.4.2 | all | `ScheduleFlightBody.tsx` | Implemented 4290c81 | Transfer bar content (type, duration, city, airport, terminal) verified in ScheduleFlightBody.test. | P4 |
|
||||
| 4.1.14.4-R17 | Expanded transfer badge type logic (§4.1.14.4.2) same as collapsed (type 1–4 by city/airport/terminal equality) | 4.1.14.4 §4.1.14.4.2 rules | all | `ScheduleFlightBody.tsx` | Implemented 4290c81 | Expanded badge type matches collapsed type conditions; verified. | P4 |
|
||||
| 4.1.14.4-R18 | Шереметьево/Внуково in expanded transfer badge rendered as link opening new tab | 4.1.14.4 §4.1.14.4.2 | all | `ScheduleFlightBody.tsx` | TBD (P5) | Airport link in expanded transfer badge deferred (airport-as-link backlog). | P4 |
|
||||
| 4.1.14.4-R19 | Multi-leg operator-logo is compact (round mini-icon) in multi-seg expanded header (commit `3ae59da` parity) | 4.1.14.4 Table 42 row 2 | all | `src/features/schedule/*` | Implemented 3ae59da | Verified by commit `3ae59da`. | P4 |
|
||||
| 4.1.14.4-R20 | Action area: «Поделиться» (share) — same social network list as §4.1.13.4.5; VK + copy-link; China locale adds Weibo | 4.1.14.4 §4.1.14.4.3 | all | `SharePanel/` | Implemented 4290c81 | Share in schedule expanded row verified in ScheduleFlightBody.test. | P4 |
|
||||
| 4.1.14.4-R21 | «Купить» button: shown when `scheduled_departure_UTC > now + 2h` AND `scheduled_departure_UTC < now + 330 days` AND flight not cancelled | 4.1.14.4 §4.1.14.4.4 | all | `ScheduleFlightBody.tsx` | Done 4290c81 | Buy gate fixed: >2h lower bound AND <330 days upper bound AND not cancelled; 25 tests cover all cases. | P4 |
|
||||
| 4.1.14.4-R22 | «Купить» for multi-segment/connecting: single button; availability uses first segment departure | 4.1.14.4 §4.1.14.4.4 | all | `ScheduleFlightBody.tsx` | Done 4290c81 | Single Buy for multi-seg uses first-leg departure; tested. | P4 |
|
||||
| 4.1.14.4-R23 | «Купить» not shown for cancelled flights; rule applies to Online-Board and the same flight in Schedule | 4.1.14.4 §4.1.14.4.4 | all | `ScheduleFlightBody.tsx` | Done 4290c81 | Buy hidden for cancelled; cross-subsystem consistency tested. | P4 |
|
||||
| 4.1.14.4-R24 | «Статус рейса» button shown only when the departure day equals today; for multi-seg/connecting: single button, based on first-segment departure | 4.1.14.4 §4.1.14.4.5 | all | `ScheduleFlightBody.tsx` | Done 4290c81 | Status gate fixed: same-day departure UTC only; first-leg governs; tested in ScheduleFlightBody.test. | P4 |
|
||||
| 4.1.14.4-R25 | «Статус рейса» click: opens Online-Board flight card in new browser tab; mini-list in that card shows only the one clicked flight | 4.1.14.4 §4.1.14.4.5 | all | `ScheduleFlightBody.tsx` | Implemented 4290c81 | Status click opens OB card in new tab; verified. | P4 |
|
||||
| 4.1.14.4-R26 | «Статус рейса» for multi-segment: opens a separate OB card for each segment in new browser tabs (requires browser popup permission) | 4.1.14.4 §4.1.14.4.5 | all | `ScheduleFlightBody.tsx` | Implemented 4290c81 | Multi-seg opens multiple tabs verified. | P4 |
|
||||
| 4.1.14.4-R27 | «Статус рейса» for Аврора segment: navigates to `https://www.flyaurora.ru/`; for Победа: `https://www.pobeda.aero` | 4.1.14.4 §4.1.14.4.5 | all | `ScheduleFlightBody.tsx` | Implemented 4290c81 | Аврора/Победа external URL navigation verified. | P4 |
|
||||
| 4.1.14.4-R28 | «Статус рейса» not shown if all segments are operated by airlines other than Аэрофлот/Россия/Аврора/Победа | 4.1.14.4 §4.1.14.4.5 | all | `ScheduleFlightBody.tsx` | Implemented 4290c81 | Status hidden for non-group carriers verified. | P4 |
|
||||
| 4.1.14.4-R29 | «Статус рейса» hover tooltip: «Подробнее о фактическом выполнении рейса» (desktop only; no tooltip on mobile) | 4.1.14.4 §4.1.14.4.5 | desktop | `ScheduleFlightBody.tsx` | Implemented 4290c81 | Status button desktop-only tooltip verified. | P4 |
|
||||
| 4.1.14.4-R30 | «Детали рейса» button: opens flight details card (§4.1.16) with date-tab set to the first-segment scheduled departure date | 4.1.14.4 §4.1.14.4.6 | all | `ScheduleFlightBody.tsx` | Done 4290c81 | Details button added (§4.1.14.4.6); always visible when `onStatus` handler provided; opens §4.1.16 with correct date-tab. | P4 |
|
||||
| 4.1.14.4-R31 | «Мобильная версия» для кнопки «Статус рейса» в сегментах — кнопка не выводится (рис. 26) | 4.1.14.4 §4.1.14.4.5 Fig 26 | mobile | `ScheduleFlightBody.tsx` | Implemented 4290c81 | Status button suppressed in mobile per-segment view verified. | P4 |
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user