| FR-01 |
Contractor sees only own contracts; marks days on-site / off-site,
full or half |
§6.1 |
B, C-app |
ADR-005 |
Confirmed |
| FR-02 |
On overlap days the contractor chooses which contract the day counts
against; the day is moved, never duplicated |
§6.1, §6.2 |
B, C-data |
ADR-008 |
Confirmed |
| FR-03 |
Contract manager creates/edits only contracts they manage, via the
form customizer; read-only on days |
§6.1 |
B, C-app |
ADR-005 |
Confirmed |
| FR-04 |
Site admin edits any contract, maintains Holidays, configures the
web part |
§6.1 |
B |
— |
Confirmed |
| FR-05 |
Three lists with dedicated content types: Contracts,
CalendarEntries, Holidays, columns as §6.2 |
§6.2 |
C-data |
ADR-006 |
Confirmed |
| FR-06 |
Weekends blocked by default (configurable); holidays for the
contract's country or * blocked |
§6.2, §6.4 |
B, C-app |
— |
Confirmed |
| FR-07 |
IDataService with Local (fixtures) and SharePoint
(PnPjs v4) implementations; selected in onInit; injected
via context |
§6.3 |
C-app |
ADR-003 |
Confirmed |
| FR-08 |
Web part property pane: list pickers filtered by content type,
useLocalData, demo user, months to show, weekend blocking,
approving-organisation label (default "Client approval"),
service-provider label (default "Service provider") |
§6.4 |
C-app |
— |
Confirmed |
| FR-09 |
Header with contract selector and metadata strip in PDF-header
order; selection-type radio; Monday-first month grids; click toggles;
same type removes |
§6.4 |
C-app |
— |
Confirmed |
| FR-10 |
Stats panel: full/half counts, used vs target, remaining, warning
colour when over |
§6.4 |
C-app |
— |
Confirmed |
| FR-11 |
Managers get read-only view plus Generate timesheet |
§6.4 |
C-app |
— |
Confirmed |
| FR-12 |
Contractors also get Generate timesheet |
§6.4, §9 |
C-app |
— |
Builder (recommended yes) |
| FR-13 |
Optimistic UI with rollback on error |
§6.4 |
C-app |
— |
Confirmed |
| FR-14 |
PDF: landscape A4, one page per 12 months, header rows, 1–31 grid
with hours and colours, per-month and grand totals, three signature
boxes |
§6.5 |
C-app |
ADR-004 |
Confirmed |
| FR-15 |
PDF period defaults to contract span, trimmable; file
Timesheet_<ContractCode>_<from>_<to>.pdf |
§6.5 |
C-app |
ADR-004 |
Confirmed |
| FR-16 |
Application customizer header (dark bar, wordmark, role-filtered
menu from properties: My calendar · Contracts · Holidays) and footer
(kicker, support mail, version) |
§6.6, §6.9 |
C-app |
— |
Confirmed |
| FR-17 |
Field customizer on RemainingDays: two bars, remaining
text, amber ≥ 80 %, red over; reads item columns only |
§6.7 |
C-app |
— |
Confirmed |
| FR-18 |
Service keeps OnSiteUsedDays /
OffSiteUsedDays current on every entry write, counting only
entries inside the contract period; the contract form recomputes them in
the same save when an edit changes the period |
§6.7 |
C-data, C-app |
ADR-003 |
Confirmed |
| FR-19 |
Form customizer: two-column layout, people pickers, validation
(regex configurable, date order, 0.5 steps), overlap notice, Display
form with timesheet link |
§6.8 |
C-app |
— |
Confirmed |
| FR-20 |
Idempotent provisioning script with -SiteUrl,
-Country, -WhatIf; creates content types,
lists, indexes, RemainingDays binding, form binding,
calendar page with lists preselected, starter holidays, customizer
properties |
§6.9 |
D, F |
ADR-006 |
Confirmed |
| FR-21 |
Calendar page honours contractId query parameter |
§6.9 |
C-app |
— |
Confirmed |
| FR-22 |
Fixtures: one active contract, bridge pair with 2-week overlap, half
days, holidays for BG and *, two demo users |
§6.3 |
C-data |
ADR-003 |
Confirmed |
| FR-23 |
Role derivation order: Contractor (on ≥ 1 contract) → manager
(manages ≥ 1 contract, or member of
Orpheus Contract Managers) → admin (site collection admin,
or member of the associated Owners group); roles can combine; a failed
role read rejects the derivation (fail closed) |
§7; owner decisions, wave 2 |
B, C-app |
ADR-005 |
Confirmed |
| FR-24 |
Timesheet layout can come from a site-hosted HTML template set in
the web part property Timesheet template (optional);
placeholders insert text, and grid, totals, header and signatures are
generated by the same code as the built-in PDF; empty property keeps the
built-in layout unchanged; a broken template downloads nothing and shows
the errors |
ADR-010 |
C-app |
ADR-010 |
Confirmed |
| FR-25 |
Five optional contract columns (ConsultantPosition,
Vendor, Lot, ApproverName,
TemplateFields) added by a separate idempotent script; read
tolerantly, so a site without them still works |
ADR-010 |
C-data, D |
ADR-010 |
Confirmed |
| FR-26 |
Contract agent in Copilot Chat: contractors book, remove and read
days, and everyone reads contracts and holidays within their visibility,
with the web part's rules (weekends, holidays, contract period, one
entry per contractor per date, used-days counters); an overlap day
without a chosen contract is asked about, never guessed |
Owner |
B, C-app |
ADR-011 |
Confirmed |
| FR-27 |
HR (members of Orpheus HR, Read) sees all contracts
through the agent, grouped by vendor and filterable by manager, read
only |
Owner |
B, C-data |
ADR-013 |
Confirmed |
| FR-28 |
Contract managers list their contracts grouped by vendor through the
agent; read only |
Owner |
C-app |
ADR-013 |
Confirmed |
| FR-29 |
Agent writes by anyone other than the contract's contractor are
refused by the server (forbidden) |
Owner |
C-app |
ADR-012 |
Confirmed |