Skip to content

Parallax Release 2 - Priority Roadmap


1. Executive summary

Release 2 is delivered in four priority-ordered sprints (2A-2D), starting 08 June 2026. Each sprint centres on one headline capability and bundles its dependent and closely related items, so every priority lands as a complete, usable feature rather than a fragment. Sprint lengths vary to fit the size of each capability.

Sprint Theme Lead item
2A Strategy import / export S7 - bulk import/export with validation
2B Templates by source (+ inheritance changes) T1 - source-based templates
2C Interactive Strategy Report R2 - Interactive Strategy Report
2D Summary report redesign R18 - Summary redesign + home page

Indicative effort: ~74 developer-days (one developer/architect, including unit testing).

Every item referenced below has a full Development Card in Appendix A.


2. Roadmap at a glance

gantt
    title Release 2 - Priority Roadmap (dev from 08 Jun 2026; client UAT + release markers)
    dateFormat  YYYY-MM-DD
    axisFormat  %b %d
    excludes    weekends
    section 2A Strategy Import/Export
    Dev 2A (S7 S9 S15 S5)        :a1, 2026-06-08, 10d
    Client UAT 2A (~2d)          :active, a2, 2026-06-22, 2d
    Release 2A                   :crit, milestone, 2026-06-24, 0d
    section 2B Templates by Source
    Dev 2B (T1 T2 T12 T15)       :b1, 2026-06-22, 24d
    Client UAT 2B (~5d)          :active, b2, 2026-07-24, 5d
    Release 2B                   :crit, milestone, 2026-08-05, 0d
    section 2C Interactive Strategy Report
    Dev 2C (R1 R2 R12 T10 S13)   :c1, 2026-07-24, 28d
    Client UAT 2C (~6d)          :active, c2, 2026-09-02, 6d
    Release 2C                   :crit, milestone, 2026-09-16, 0d
    section 2D Summary Report
    Dev 2D (R18)                 :d1, 2026-09-02, 12d
    Client UAT 2D (~2d)          :active, d2, 2026-09-18, 2d
    Release 2D                   :crit, milestone, 2026-09-23, 0d

Dev bars are indicative developer-days from 08 June 2026 (weekends excluded), running back to back. Client UAT windows (shown in a separate colour) run client-side, in parallel with the next sprint's build, and are not part of the development effort. Releases (go-live) are the red diamonds, each on the Wednesday after its UAT window.

Sprint summary

Sprint Theme Items (lead in bold) Effort (dev-days) ~Duration
2A Strategy Import / Export S7, S9, S15, S5 10 ~2 weeks
2B Templates by Source & Reuse T1, T2, T12, T15 24 ~5 weeks
2C Interactive Strategy Report R1, R2, R12, T10, S13 28 ~5.5 weeks
2D Summary Report Redesign R18 12 ~2.5 weeks

UAT & release schedule (for end users)

After each sprint, please reserve the time below for client-side User Acceptance Testing (UAT). UAT is your testing window - it is not part of the development effort. Each release goes live on the Wednesday after the UAT window. Reserve roughly 20% of the sprint's build time for testing.

Sprint Delivered Engage for UAT Reserve Go-live (release)
2A Strategy import / export Mon 22 - Tue 23 Jun 2026 ~2 client-days Wed 24 Jun 2026
2B Templates by source (+ inheritance) Fri 24 - Thu 30 Jul 2026 ~5 client-days Wed 05 Aug 2026
2C Interactive Strategy Report Wed 02 - Wed 09 Sep 2026 ~6 client-days Wed 16 Sep 2026
2D Summary report redesign Fri 18 - Mon 21 Sep 2026 ~2 client-days Wed 23 Sep 2026

2A - what to test (engage Mon 22 - Tue 23 Jun; reserve ~2 client-days)

  • A batch of strategies imports correctly, with duplicates/errors listed in a validation report
  • Strategy export then re-import round-trips correctly
  • A strategy can be fully copied in one click
  • Duplicate strategy or condition names never crash and always explain the problem
  • Edits to a strategy show without a manual refresh
  • Shortened attribute names display (full name on hover); attribute export/import is lossless

2B - what to test (engage Fri 24 - Thu 30 Jul; reserve ~5 client-days)

  • Every template has a source and the list can be filtered by source
  • Changing a master template updates hotels that haven't overridden it; overrides are respected and clearly marked; reports are no slower
  • Templates can be deleted (with an impact preview), duplicated, and flagged as common
  • A file dropped on a hotel's shared drive loads on the next check; success and failure both alert; misrouted files are flagged

2C - what to test (engage Wed 02 - Wed 09 Sep; reserve ~6 client-days)

  • Report columns show currency / % / number formatting with the chosen decimals
  • In the ISR, per-day dropdowns drive a live recalculation (~1s) and the calendar and grid never desync
  • Mandatory columns can't be removed; advanced and dynamic date filters work; only the active tab auto-calculates
  • Rate-to-publish can be chosen per day, saved in bulk, and is audited
  • Excel round-trip imports only the two allowed columns, with a change preview and audit
  • Price overrides are created in the ISR and the old page shows history only
  • Strategy calculations meet the speed target with no change in output

2D - what to test (engage Fri 18 - Mon 21 Sep; reserve ~2 client-days)

  • The Summary report is redesigned and, after login, users land on it by default
  • It renders correctly with real data and handles the empty / no-data case

3. How the items connect

Each sprint's lead item (in bold) with the items bundled alongside it. Node labels link to their cards. Arrows show build order / enablement, not always a hard dependency - each item's binding dependencies are stated on its card.

flowchart LR
    subgraph SP1["2A - Strategy Import/Export"]
        S7["S7 Bulk import/export + validation"]
        S9["S9 One-click full copy"]
        S15["S15 Duplicate-name stability + refresh"]
        S5["S5 Short names + attr import/export"]
        S9 --> S7
        S15 --> S7
    end
    subgraph SP2["2B - Templates by Source"]
        T1["T1 Source-based templates"]
        T2["T2 Inheritance changes"]
        T12["T12 Delete/duplicate/common"]
        T15["T15 SFTP auto-pickup + alerts"]
        T1 --> T2
    end
    subgraph SP3["2C - Interactive Strategy Report"]
        R1["R1 Column formatting"]
        R2["R2 ISR (incl. rate-to-publish, filters, lazy tabs)"]
        R12["R12 Excel round-trip"]
        T10["T10 Price overrides via ISR"]
        S13["S13 Faster strategy calc (SLA)"]
        R1 --> R2
        R2 --> R12
        R2 --> T10
        S13 -.-> R2
    end
    subgraph SP4["2D - Summary Report"]
        R18["R18 Summary redesign + home page"]
    end
    SP1 --> SP2 --> SP3 --> SP4

    click S7 "#card-s7"
    click S9 "#card-s9"
    click S15 "#card-s15"
    click S5 "#card-s5"
    click T1 "#card-t1"
    click T2 "#card-t2"
    click T12 "#card-t12"
    click T15 "#card-t15"
    click R1 "#card-r1"
    click R2 "#card-r2"
    click R12 "#card-r12"
    click T10 "#card-t10"
    click S13 "#card-s13"
    click R18 "#card-r18"

4. Sprint 2A - Strategy Import / Export

Make it easy and safe to move pricing strategies in and out of Parallax in bulk, and harden the copy/duplicate paths that import relies on. Lead: S7. ~10 dev-days.

Item Effort Role in sprint
S7 - bulk import/export of strategies with validation 5d Lead
S9 - one-click full strategy copy 1d Copy mechanic bulk import builds on
S15 - duplicate-name stability + edit refresh 1d Hardens the copy/builder paths (merges former S8)
S5 - shorter attribute names + attribute import/export 3d Extends import/export to attributes (scope to be confirmed)

Solution approach. A single, reusable import/export pipeline reusing the existing, production-proven strategy-copy logic and formula validation. Export produces a portable file; import validates each strategy (duplicate detection, error reporting) before saving and returns a clear pass/fail report. The copy and duplicate-name handling are fixed first so they are solid foundations for bulk operations.

flowchart TD
    File["Strategy file (CSV/Excel)"] --> Import["Import screen"]
    Import --> Validate{"Validate each strategy<br/>(duplicates, errors, formula checks)"}
    Validate -- "issues" --> Report["Validation report (per-strategy pass/fail)"]
    Validate -- "valid" --> Store[("Strategies")]
    Store --> Export["Export service"] --> Out["Portable file"]
    Copy["One-click copy / duplicate"] --> Store

What "done" looks like. Strategies can be exported and re-imported in bulk with a clear validation report; copy/duplicate is robust and never crashes on duplicate names.


5. Sprint 2B - Templates by Source & Reuse

Organise templates by data source, and add the inheritance changes that let teams set a template up once and reuse it with per-hotel tweaks. Lead: T1. ~24 dev-days.

Item Effort Role in sprint
T1 - source-based templates 6d Lead - templates organised by source
T2 - master template + per-hotel inheritance changes 12d Additional inheritance changes on top of T1
T12 - delete / duplicate / mark-common templates 2d Rounds out template management
T15 - per-hotel shared-drive (SFTP) auto-pickup + alerts 4d Hands-off bulk file ingestion

Solution approach. Templates gain a source label (Lighthouse / Duetto / PMS / Other) and can be filtered by it. On top of that, the inheritance changes let a template be based on a master: when a value is needed it resolves down the chain - master first, then the hotel's override - with safeguards against circular references, and screens mark inherited vs overridden. For bulk loading, files dropped on a hotel's shared drive are picked up automatically and routed to the right template, with success/failure alerts - which is why a separate batch-upload UI is not needed (see Parked items).

flowchart TD
    Master["Master template (by source)"] -- "inherits" --> Hotel["Hotel template (overrides only)"]
    Hotel --> Resolver{"Value resolver<br/>(hotel override -> else master)<br/>+ loop protection"}
    Resolver --> Reports["Reports & calculations"]
    Drive["Hotel shared drive (SFTP)"] --> Pickup{"Scheduled auto-pickup + route"}
    Pickup --> Load["Load pipeline"]
    Pickup --> Alert["Success / failure alert"]

What "done" looks like. Templates are organised by source; one master can drive many hotels with clear overrides; files dropped on a hotel's drive load automatically with alerts; templates can be deleted/duplicated/flagged.


6. Sprint 2C - Interactive Strategy Report (ISR)

The headline feature of Release 2: a single, interactive place where revenue managers adjust seasons, events and price overrides per day and see results update live - including choosing the rate-to-publish strategy per day. Lead: R2. ~28 dev-days.

The largest sprint by some margin. It can run as one long sprint or split into iterations: build the report -> add per-day actions -> add the Excel/override consumers.

Item Effort Role in sprint
R1 - per-column formatting (currency/%/decimals) 1d Needed first so the ISR displays figures correctly
R2 - Interactive Strategy Report (incl. rate-to-publish, dynamic date filters, lazy tabs) 10d Lead
R12 - round-trip Excel editing for the ISR 5d Builds on R2
T10 - price overrides created from the ISR 5d Builds on R2
S13 - faster strategy calculation 7d Underpins the ISR's "~1 second" recalc target

Solution approach. The ISR presents a calendar and grid that stay in sync; each day exposes season/event/override dropdowns and a per-day rate-to-publish choice (with bulk save and audit, folded in from the former R13). The ISR also carries dynamic date filters (folded in from R3) and lazy tab calculation so only the active tab calculates on load (folded in from R14). Changing a day triggers a fast per-day recalculation path (separate from the full refresh) so results appear within ~1 second - which is why S13 is bundled here. The report exports to Excel and re-imports with only the two permitted columns writable, every change preview-checked and audited; price overrides are created directly from the ISR.

flowchart TD
    Cal["Calendar"] <--> Grid["Data grid"]
    Grid --> Drop["Per-day dropdowns (season/event/override)"]
    Drop --> Recalc{"Per-day live recalc (~1s)"}
    Recalc --> Calc["Strategy calculation (sped up by S13)"]
    Calc --> Grid
    Grid --> Publish["Per-day rate-to-publish (bulk save + audit)"] --> Audit[("Audit trail")]
    Grid --> Excel["Export to Excel"] --> Reimport{"Import (2 columns writable)<br/>+ preview + audit"}
    Reimport --> Grid
    Grid --> Override["Create price override"] --> History[("Override history")]

What "done" looks like. A live per-day pricing workspace with per-day rate-to-publish, Excel round-trip, price overrides and audit - all responsive.


7. Sprint 2D - Summary Report Redesign & Home Page

A fully redesigned Summary report, shown automatically as the home page after login, so every user starts on a clear, useful overview. Lead: R18. ~12 dev-days.

Item Effort Role in sprint
R18 - Summary redesign + post-login home page 12d Lead (standalone)

Solution approach. After login, a landing resolver sends the user to the redesigned Summary report, which is rebuilt with a new layout and rendering and handles the empty/no-data case gracefully.

flowchart LR
    Login["User logs in"] --> Landing{"Landing resolver"} --> Summary["Redesigned Summary report (home)"]
    click Summary "#card-r18"

What "done" looks like. Users land on a polished, redesigned Summary report at login.


8. Impacted items & modules - consolidated view

Module / area Touched in sprint(s) Items
Strategies 2A, 2C S7, S9, S15, S13
Attributes 2A, 2B S5, T2
Templates 2B T1, T2, T12
Data Loading / Ingestion 2B T15
Reports 2C, 2D R1, R2, R12, R18
Pricing / Overrides 2C T10, R2
Data Import/Export 2A, 2C S7, S5, R12
Notifications 2B T15
Authentication (login landing) 2D R18
Audit trails 2C R2, R12

9. Sequencing notes & assumptions

  • Delivery order is 2A -> 2B -> 2C -> 2D, starting 08 June 2026. Hard dependencies sit inside each sprint so nothing waits on a later sprint.
  • Client UAT runs after each sprint (~20% of the sprint's build time, rounded), client-side and in parallel with the next sprint's build - so it is not added to the development effort. Each release goes live on the Wednesday after the UAT window (see the UAT & release schedule in section 2).
  • Sprint 2C (ISR) is the long pole (~8.5 weeks). For a faster first demo, split into build / per-day-actions / consumers iterations.
  • Two items have an open scope point to settle: S5 (exact attribute import/export rules) and R18 (whether the redesigned Summary is shipped as a shared "standard report," which would add a dependency).
  • Effort totals are developer-days for one developer/architect, including unit testing (UAT excluded).

Parked / folded items

Item Disposition Reason
T8 - batch-upload multi-file auto-routing Parked Superseded by T15; no value in a separate batch-upload UI once SFTP-type bulk pickup exists.
R13 - per-day rate-to-publish Folded into R2 Delivered as part of the ISR; no separate effort (R13 set to 0 / inactive).
R3 - dynamic date filters Folded into R2 Delivered within the ISR; no separate effort (R3 set to 0 / inactive).
R14 - lazy tab calculation Folded into R2 Delivered within the ISR; no separate effort (R14 set to 0 / inactive).
S8 - duplicate condition names + refresh Merged into S15 Same defensive duplicate-name + refresh pattern.
R16 - report view inheritance; T11 - user preferences; R17 - remember Summary settings Removed from this roadmap Not dependent on the R18 redesign; remain in the backlog for a later release.

Appendix A - Development Cards

One card per referenced item, with everything needed to build and accept it. Effort is in developer-days (including unit testing).


S7 - Bulk import/export of strategies with validation

Field Value
Type / Epic Story · Pricing Strategies
Sprint 2A (lead)
Effort 5 dev-days
UI change Minor
Complexity / Risk M / M
Dependencies none
Impacted modules Strategies; Data Import/Export
  • Business problem. Moving many strategies between hotels or environments is manual and error-prone.
  • User story. As a strategy manager, I want to import/export strategies in bulk with a validation report, so that I can move them safely and see problems up front.
  • Scope. Bulk import/export with duplicate/error detection and a validation summary.
  • Unit tests.
    • An import with deliberate errors produces a clear report
    • A valid batch imports
    • Export round-trips
  • Exit criteria.
    • A batch of strategies imports correctly
    • Duplicates and errors are detected and listed in a report
    • Export round-trips
  • Effort & reasoning. Builds on the existing, production-tested strategy-copy logic, so the new work is only the bulk wrapper, file parsing and the validation report - 5 days.

S9 - One-click full strategy copy

Field Value
Type / Epic Story · Pricing Strategies
Sprint 2A
Effort 1 dev-day
UI change Minor
Complexity / Risk L / L
Dependencies none
Impacted modules Strategies
  • Business problem. Copying a complete strategy isn't exposed in the app even though it's possible behind the scenes.
  • User story. As a user, I want a one-click "copy strategy" with confirmation, so that I can duplicate quickly.
  • Scope. A copy button and confirmation.
  • Unit tests.
    • A copied strategy matches the original
  • Exit criteria.
    • Users can fully copy a strategy in one click
  • Effort & reasoning. The copy logic is complete and tested; only a button and confirmation dialog are new - 1 day.

S15 - Duplicate-name stability (strategy copy + condition names) + edit refresh

Field Value
Type / Epic Story · Pricing Strategies
Sprint 2A
Effort 1 dev-day
UI change Minor
Complexity / Risk M / M
Dependencies none
Impacted modules Strategies
  • Business problem. Copying a strategy into a duplicate name crashes the app; separately, duplicate condition names within a strategy can cause issues and edits sometimes don't show until the page is refreshed.
  • User story. As a strategy author, I want duplicate names (a copied strategy or a condition) handled gracefully, and my edits to appear immediately, so the builder is reliable and never crashes.
  • Scope. Detect duplicate strategy names on copy and duplicate condition names in the builder, showing a clear message instead of failing; refresh the view automatically after an edit.
  • Unit tests.
    • Duplicate-name copy is handled gracefully
    • A duplicate condition name is caught
    • An edit shows immediately without a manual refresh
  • Exit criteria.
    • Duplicate strategy/condition names never crash and always explain the problem
    • Edits show without a manual refresh
  • Effort & reasoning. Combines the former S15 (copy-crash fix) and S8 (condition names + edit refresh) - the same defensive duplicate-name and view-refresh pattern, applied across two screens - 1 day.

S5 - Shorter attribute names + template-based import/export

Field Value
Type / Epic Story · Pricing Strategies
Sprint 2A
Effort 3 dev-days
UI change Minor
Complexity / Risk M / L
Dependencies none
Impacted modules Strategies; Attributes; Data Import/Export
  • Business problem. Attribute names are long and awkward day to day; a template-based import/export is wanted but the rules need clarifying.
  • User story. As a strategy author, I want shorter attribute names (full name on hover) and a template-based import/export, so that the workspace is cleaner and setup is reusable.
  • Scope. Short names with full name on hover; an import/export round-trip. Exact import/export rules to be confirmed.
  • Unit tests.
    • Hover reveals the full name
    • A round-trip export/import is lossless
  • Exit criteria.
    • Short names shown (full on hover)
    • Import/export round-trip is lossless once rules are confirmed
  • Effort & reasoning. The name map is a simple lookup and the import/export reuses the existing data pipeline - 3 days. Scope confirmation could change this.

T1 - Source-based templates

Field Value
Type / Epic Story · Data Loading & Templates
Sprint 2B (lead)
Effort 6 dev-days
UI change Minor
Complexity / Risk M / M
Dependencies none
Impacted modules Templates
  • Business problem. Templates are managed per hotel, so similar ones pile up and there's no way to see all templates for a given source.
  • User story. As an admin, I want templates labelled by data source (Lighthouse/Duetto/PMS/Other), so I can filter and manage by source instead of hotel by hotel.
  • Scope. Add a source label to every template; label existing templates; add a source filter.
  • Unit tests.
    • Filtering by each source shows only matching templates
    • A new template requires a source
  • Exit criteria.
    • Every template has a source
    • The templates screen can be filtered by source
    • Existing templates are labelled
  • Effort & reasoning. The change itself is small, but assigning a source to all existing templates (back-fill) and testing the filter across all four sources adds time - 6 days.

T2 - Master template with per-hotel inheritance changes

Field Value
Type / Epic Story (Epic-sized) · Data Loading & Templates
Sprint 2B
Effort 12 dev-days
UI change Medium
Complexity / Risk H / H
Dependencies T1
Impacted modules Templates; Attributes; Reports
  • Business problem. Every hotel needs its own near-identical template, so one change must be repeated across many hotels.
  • User story. As a hotel ops user, I want one master template that each hotel tweaks only where it differs, so I maintain one master, not dozens of copies.
  • Scope. Base a hotel template on a master; resolve final values automatically (master unless overridden); show inherited vs overridden markers.
  • Unit tests.
    • A hotel shows master values until overridden
    • An override wins
    • The system prevents a template referencing itself in a loop
  • Exit criteria.
    • Changing the master updates non-overridden hotels
    • Overrides are respected
    • Inherited vs overridden is clearly marked
    • Reports are no slower
  • Effort & reasoning. No inheritance model exists today, so value-resolution (with loop protection), the inherited-vs-overridden handling, and the on-screen markers are all new and sit on a performance-sensitive path - 12 days. Delivered as additional changes on top of T1.

T12 - Delete / duplicate / mark-common templates

Field Value
Type / Epic Story · Data Loading & Templates
Sprint 2B
Effort 2 dev-days
UI change Minor
Complexity / Risk M / M
Dependencies none
Impacted modules Templates
  • Business problem. No easy in-app way to delete or duplicate a template, or to mark shared/common ones.
  • User story. As an admin, I want buttons to delete, duplicate and flag common templates without back-office help.
  • Scope. Delete and duplicate buttons; a delete preview showing impact; a common flag.
  • Unit tests.
    • Deleting shows dependents then removes on confirm
    • Duplicating produces an identical copy
  • Exit criteria.
    • Delete shows an impact preview before commit
    • Duplicate works
    • The common flag is remembered
  • Effort & reasoning. The delete logic (with preview) is already in production, so the work is just two buttons, two dialogs and a flag - 2 days.

T15 - Per-hotel shared-drive (SFTP) auto-pickup + alerts

Field Value
Type / Epic Story · Data Loading & Templates
Sprint 2B
Effort 4 dev-days
UI change Medium
Complexity / Risk M / M
Dependencies none
Impacted modules Data Loading; Notifications
  • Business problem. Someone has to manually upload files per hotel; files dropped on a shared drive sit there until a person loads them.
  • User story. As an operations user, I want files placed on a hotel's shared drive to load automatically, with an email on success or failure, so that loading is hands-off and I'm told if something is wrong.
  • Scope. Scheduled check of each hotel's drive; automatic loading of new files routed to the right template; success and failure email alerts.
  • Unit tests.
    • A valid file loads automatically and alerts
    • A failed load triggers a failure alert
    • A wrong-hotel file is flagged
  • Exit criteria.
    • A dropped file loads on the next scheduled check
    • Both success and failure send an alert
    • Misrouted files are flagged, not silently mishandled
  • Effort & reasoning. Automatic per-hotel file discovery and routing to the existing load pipeline, scheduled polling with success/failure alerts, plus edge-case handling and testing - 4 days. Replaces the parked batch-upload UI (T8).

R1 - Column formatting (currency / % / number + decimals)

Field Value
Type / Epic Story · Reports & ISR
Sprint 2C
Effort 1 dev-day
UI change Minor
Complexity / Risk M / L
Dependencies none
Impacted modules Reports
  • Business problem. Report columns don't show currency/percentage/number symbols or control decimals.
  • User story. As a report user, I want to format each column as currency/percentage/number with chosen decimals.
  • Scope. Per-column formatting options that render in the report.
  • Unit tests.
    • Each format type and decimal setting displays correctly, including zero/empty values
  • Exit criteria.
    • A column can be formatted with symbol and decimals
    • Formatting renders correctly
  • Effort & reasoning. The report already supports conditional formatting, so this is a small extension of existing rendering - 1 day.

R2 - Interactive Strategy Report (ISR) - new build (incl. rate-to-publish, dynamic date filters, lazy tabs)

Field Value
Type / Epic Story (Epic-sized) · Reports & ISR
Sprint 2C (lead, headline)
Effort 10 dev-days
UI change Large
Complexity / Risk XH / H
Dependencies R1
Impacted modules Reports; Strategies; Pricing Overrides; Audit trails
  • Business problem. No single interactive place to review/adjust pricing per day; seasons, events, overrides and rate-to-publish decisions are handled separately and don't update live.
  • User story. As a revenue manager, I want a live calendar-and-grid report where I adjust season/event/override settings and choose the rate-to-publish strategy per day, and see results immediately.
  • Scope. New report on the Daily Pick-Up layout; synced calendar+table; per-day dropdowns; multi-select filter; live recalc (~1s); mandatory columns protected. Includes per-day rate-to-publish selection with bulk save and audit (folded in from R13), dynamic date filters (folded in from R3), and lazy tab calculation so only the active tab calculates on load (folded in from R14).
  • Unit tests.
    • Changing a per-day dropdown updates the grid promptly
    • Calendar and table stay in sync
    • A timed recalc meets the target
    • Per-day rate-to-publish bulk save commits valid days, flags conflicts, and writes audit rows
    • Dynamic date tokens resolve correctly
    • Only the active tab calculates on load
  • Exit criteria.
    • Per-day dropdowns drive a live recalc (~1s)
    • Calendar and table never desync
    • Mandatory columns can't be removed
    • The advanced filter and dynamic date filters work
    • Rate-to-publish can be chosen per day, saved in bulk and audited
    • Only the active tab auto-calculates
  • Effort & reasoning. The headline build: a new page with a synced calendar+grid, per-day dropdowns and a fast per-day recalculation that must return in about a second. The per-day rate-to-publish (R13), dynamic date filters (R3) and lazy tab calculation (R14) are delivered within the same 10 days by reusing the report and per-day-dropdown infrastructure.

R12 - Round-trip Excel editing for the ISR

Field Value
Type / Epic Story · Reports & ISR
Sprint 2C
Effort 5 dev-days
UI change Medium
Complexity / Risk M / M
Dependencies R2
Impacted modules Reports (ISR); Data Import/Export
  • Business problem. Users want to edit ISR data in Excel and load it back, but only some columns should be changeable.
  • User story. As a revenue manager, I want to export the ISR to Excel, edit only Manual Override and Strategy-to-Publish, and import it back.
  • Scope. Export to Excel; on import accept only the two allowed columns; preview changes; audit changes.
  • Unit tests.
    • Editing a protected column has no effect on import
    • The preview lists intended changes
  • Exit criteria.
    • Only the two allowed columns import
    • A preview shows changes before applying
    • Changes are audited
  • Effort & reasoning. The import pipeline exists; the new work is restricting edits to two columns, a change preview, and audit records - 5 days.

T10 - Price overrides become history-only; created from the ISR

Field Value
Type / Epic Story · Data Loading & Templates
Sprint 2C
Effort 5 dev-days
UI change Medium
Complexity / Risk M / M
Dependencies R2
Impacted modules Pricing Overrides; Reports (ISR)
  • Business problem. Price overrides are entered on a separate page, disconnected from where pricing decisions are made.
  • User story. As a revenue manager, I want to create price overrides in the ISR and use the old page only for history.
  • Scope. Make the old override page read-only history; let the ISR create overrides.
  • Unit tests.
    • An override set in the ISR appears in history
    • The old page is read-only
  • Exit criteria.
    • Overrides are created in the ISR and the old page shows history only
  • Effort & reasoning. Making the old page read-only and wiring the ISR to create overrides is moderate work, and it can only start once the ISR exists - 5 days.

S13 - Faster strategy calculation (target ~2s)

Field Value
Type / Epic Story · Pricing Strategies
Sprint 2C (conditional - see below)
Effort 7 dev-days
UI change No UI
Complexity / Risk H / H
Dependencies none (enables R2 target)
Impacted modules Strategies; Reports (ISR live recalc)
  • Business problem. Strategy calculations can be slow, holding up pricing decisions and the live ISR.
  • User story. As a user, I want strategy calculations to finish within about two seconds.
  • Scope. Review and speed up the calculation and its caching, with no change to results.
  • Unit tests.
    • Benchmark calculation is timed and output compared before/after
  • Exit criteria.
    • Calculations meet the speed target with no change in output
  • Effort & reasoning. Performance work on the core calculation engine and its cache: profiling, targeted rewrites, and a performance test harness - 7 days. Required only if the ISR's ~1-second target is a firm commitment.

R18 - Redesign Summary report + set as default home page

Field Value
Type / Epic Story (Epic-sized) · Reports & ISR
Sprint 2D (lead)
Effort 12 dev-days
UI change Major
Complexity / Risk H / M
Dependencies none confirmed (see note)
Impacted modules Reports; Authentication (login landing)
  • Business problem. The Summary report needs a refresh, and after login users don't land on a useful overview.
  • User story. As a user, I want a redesigned Summary report shown automatically as my home page after login.
  • Scope. Fully redesign the Summary report (new layout/render) and set it as the default landing page after login.
  • Unit tests.
    • Logging in lands the user on the redesigned Summary report
    • It renders with real and empty data
    • Other screens unaffected
  • Exit criteria.
    • Summary report redesigned
    • After login users land on it by default
    • Renders correctly including the empty state
  • Effort & reasoning. A full redesign (new layout and rendering), plus making it the post-login landing page and handling default views - 12 days. Note: if shipped as a shared company/hotel/user "standard report," the underlying standard-report capability must exist (to be confirmed).