Monorepo Requirements Documentation
NCIA Timesheet Requirements

1. 1. Time Entry Management

TS-FR-001
1.1. Create Time Entry TS-FR-001

When the user has finished a block of work, the NCIA Timesheet shall allow the user to create a time entry specifying a project, a task, a date, and a duration.

TS-FR-002
1.2. Retrospective Time Entry TS-FR-002

When the user recalls work done at an earlier date that was not logged at the time, the NCIA Timesheet shall allow the user to create a time entry by specifying a past date, a start time, and a duration.

TS-FR-003
1.3. Period Review View TS-FR-003

When the user's reporting period is due, the NCIA Timesheet shall display all time entries for the selected period in a single view so the user can verify completeness and accuracy before submission.

TS-FR-004
1.4. Edit Time Entry TS-FR-004

When the user identifies an error in a time entry, the NCIA Timesheet shall allow the user to edit the project, task, date, start time, or duration of the entry without requiring administrator intervention.

TS-FR-005
1.5. Delete Time Entry TS-FR-005

When the user deletes a time entry, the NCIA Timesheet shall remove the entry from the active record and write a deletion record to the audit log before the removal is committed.

TS-FR-006
1.6. Audit Log — Record Mutations TS-FR-006

When the user creates, edits, or deletes a time entry, the NCIA Timesheet shall append an immutable record to the audit log containing the operation type, the document state before the change, the document state after the change, a UTC timestamp, and the identifier and display name of the active user profile.

TS-FR-007
1.7. Audit Log — View TS-FR-007

When the user opens the audit log view, the NCIA Timesheet shall display all time entry mutations in chronological order, showing for each record the operation type, the previous value, the new value, the timestamp, and the profile that performed the change.

TS-FR-008
1.8. Duplicate Time Entry TS-FR-008

When the user selects an existing time entry and requests a duplicate, the NCIA Timesheet shall create a new draft entry pre-populated with the same project, task, and duration, which the user can adjust before saving.

TS-FR-063
1.9. Record Work Location per Day TS-FR-063

When the user logs time for a working day, the NCIA Timesheet shall allow the user to record the location from which they are working for that date, selecting from OFFICE, HOME, or REMOTE. One location record shall be stored per profile per calendar date, independent of individual time entries.

2. 2. Timer

TS-FR-009
2.1. Start Timer TS-FR-009

When the user selects a project and task and activates the timer, the NCIA Timesheet shall begin tracking elapsed time and display the running duration in real time on the active view.

TS-FR-010
2.2. Timer State Persistence TS-FR-010

While a timer is running, the NCIA Timesheet shall persist the timer start timestamp and accumulated duration to the local database at intervals of no more than 30 seconds so that elapsed time is recoverable if the application is closed or the device is restarted.

TS-FR-011
2.3. Switch Active Timer TS-FR-011

When the user switches to a different project or task while a timer is running, the NCIA Timesheet shall pause the current timer and start a new timer for the newly selected project and task in a single action.

TS-FR-012
2.4. Pause Timer TS-FR-012

When the user pauses the active timer, the NCIA Timesheet shall stop incrementing elapsed time, retain the accumulated duration, and display the paused state until the user explicitly resumes or stops the timer.

TS-FR-013
2.5. Inactivity Alert TS-FR-013

While a timer is running and the elapsed time since the last recorded user interaction exceeds a configurable inactivity threshold (default: 2 hours), the NCIA Timesheet shall display a notification prompting the user to confirm, adjust, or discard the accumulated time.

TS-FR-014
2.6. Stale Timer Recovery on Start TS-FR-014

When the application starts and a running timer is found whose last heartbeat timestamp is older than the configured inactivity threshold, the NCIA Timesheet shall prompt the user to confirm, adjust, or discard the elapsed time before creating a time entry.

TS-FR-015
2.7. Stop Timer and Create Draft Entry TS-FR-015

When the user stops the active timer, the NCIA Timesheet shall create a draft time entry pre-populated with the elapsed duration, the project, and the task and present it to the user for review and confirmation before saving.

3. 3. Projects and Tasks

TS-FR-016
3.1. Project Types TS-FR-016

The NCIA Timesheet shall classify all projects as one of three types: FORMAL (defined by the organisation), PROVISIONAL (created by the user), or OVERHEAD (system-defined for non-project time), and shall display this classification visually in all project and task lists.

TS-FR-017
3.2. Create Provisional Project TS-FR-017

When the user is working on an initiative without a formal project code, the NCIA Timesheet shall allow the user to create a provisional project with a user-defined name and log time against it immediately.

TS-FR-018
3.3. Bulk Reassign Provisional Entries to Formal Project TS-FR-018

When a formal project code becomes available, the NCIA Timesheet shall allow the user to select one or more provisional projects and reassign all associated time entries to the formal project in a single operation, retaining the original provisional projects with a resolved timestamp for audit purposes.

TS-FR-019
3.4. Overhead Codes TS-FR-019

The NCIA Timesheet shall provide a set of pre-defined OVERHEAD codes including at minimum: meetings, administration, training, and leave, against which the user can log time that does not belong to a specific project.

TS-FR-020
3.5. Split Time Entry Across Projects TS-FR-020

When logging time that spans multiple projects, the NCIA Timesheet shall allow the user to split a single time block across multiple projects by specifying a percentage or an explicit duration for each project.

TS-FR-021
3.6. Unassigned Provisional Entries View TS-FR-021

The NCIA Timesheet shall provide a view listing all provisional projects that have time entries and have not yet been reassigned to a formal project, enabling the user to identify and resolve outstanding unallocated time.

TS-FR-022
3.7. Map Custom Task to Formal Project TS-FR-022

When the user creates a custom task, the NCIA Timesheet shall allow the user to optionally map the task to a formal project so that reports can aggregate hours by the formal taxonomy while retaining the custom task detail in drill-down views.

4. 4. Allocations and Budget

TS-FR-023
4.1. Record Estimated and Allocated Hours TS-FR-023

When the user creates or edits a project or task, the NCIA Timesheet shall allow the user to record an estimated number of hours and, independently, an allocated number of hours representing the formally approved commitment.

TS-FR-024
4.2. Display Remaining Hours TS-FR-024

The NCIA Timesheet shall display remaining hours for each project as allocated hours minus hours logged where allocated hours are set, or estimated hours minus hours logged where only estimated hours are set.

TS-FR-025
4.3. Budget Warning Notification TS-FR-025

When the hours logged against a project reach a configurable warning threshold (default: 80%) of the applicable ceiling, the NCIA Timesheet shall display an in-app notification alerting the user that the budget is approaching its limit.

TS-FR-026
4.4. Budget Exceeded Notification TS-FR-026

If the hours logged against a project exceed the applicable allocated or estimated hours ceiling, the NCIA Timesheet shall display a persistent in-app notification indicating that the budget has been exceeded.

TS-FR-027
4.5. Capacity Status by Period TS-FR-027

When the user requests a capacity status view, the NCIA Timesheet shall display hours consumed and hours remaining for each active project, filterable by day, week, month, or year.

TS-FR-028
4.6. Total Remaining Capacity Summary TS-FR-028

The NCIA Timesheet shall provide a summary showing total remaining hours across all active project allocations so the user can assess overall availability before accepting new work.

TS-FR-029
4.7. Flag Overrun with Note TS-FR-029

When a time entry causes logged hours to exceed the allocated or estimated ceiling for a project, the NCIA Timesheet shall allow the user to attach a note explaining the reason for the overrun, stored with the project record.

TS-FR-030
4.8. Allocation Mismatch Warning TS-FR-030

If the allocated hours for a project are set lower than the estimated hours, the NCIA Timesheet shall display a visual indicator on the project record alerting the user to the discrepancy between planning intent and approved budget.

5. 5. Leave and Attendance

TS-FR-031
5.1. Log Leave by Type TS-FR-031

The NCIA Timesheet shall allow the user to log absence against configurable leave types including at minimum: annual leave, sick leave, training leave, and public holiday.

  • TS-FR-066
    5.9. Extended Absence Code Set TS-FR-066

    The NCIA Timesheet shall support the following absence types in addition to annual leave and sick leave already required by TS-FR-031: TDY (T), Special Leave (SL), Home Leave (HL), Unpaid Leave (UL), Compassionate Leave (CL), Family Leave (FL), and Special Administrative Absence (SAA). Each code shall be selectable when recording absence and shall be included in attendance summaries and exports.

TS-FR-032
5.2. Leave Balance Display TS-FR-032

The NCIA Timesheet shall display the user's remaining balance per leave type, calculated as the configured annual entitlement minus the days logged against that type in the current leave year.

  • TS-FR-071
    5.12. Annual Leave Entitlement Carry-Forward TS-FR-071

    The NCIA Timesheet shall allow the user to record an annual leave entitlement carried forward from the previous leave year, stored in hours per profile per leave year. The displayed leave balance shall be calculated as carried-forward hours plus current-year entitlement hours minus hours logged against annual leave in the current leave year.

  • TS-FR-032A
    5.15. Leave Balance Display — Amendment: hours unit TS-FR-032A

    The NCIA Timesheet shall display the user's remaining balance per leave type, calculated as the configured annual entitlement in hours minus the hours logged against that type in the current leave year, plus any hours carried forward from the previous leave year (TS-FR-071).

TS-FR-033
5.3. Annual Hours Progress TS-FR-033

The NCIA Timesheet shall display total productive hours worked by the user in the current year alongside the configured annual required hours target, showing the difference as a surplus or deficit.

  • TS-FR-067
    5.10. Flex Time Surplus and Deficit Tracking TS-FR-067

    For each calendar month, the Monthly Prescribed Hours Status Dashboard (TS-FR-072) shall display informational flex time values derived from the contracted hours profile (TS-FR-076): - Flex time gained: total hours worked in the month minus required hours for the month (where positive). - Flex time used: total hours recorded against the Flex Leave (FL) absence code in that month. Required hours for the month equals the number of working days (excluding official holidays for the user's duty location per TS-FR-075) multiplied by the standard day length derived from the contracted hours profile (TS-FR-070). The application shall not maintain a managed flex budget, shall not enforce a balance, and shall not prevent recording Flex Leave regardless of surplus. All values are informational.

TS-FR-034
5.4. Record Overtime Separately TS-FR-034

When the user logs hours that cause the total for a working day to exceed the configured standard working day length, the NCIA Timesheet shall record the excess as overtime, separate from standard hours.

  • TS-FR-034A
    5.16. Record Overtime Separately — Amendment: threshold source TS-FR-034A

    When the total hours logged by the user for a calendar day exceeds the standard day length derived from the contracted hours profile (contracted hours per week divided by workweek days, per TS-FR-070 and TS-FR-076), the NCIA Timesheet shall record and display the excess as overtime, separate from standard hours in all period totals and the monthly status dashboard (TS-FR-072). The overtime threshold is derived solely from the contracted hours profile and is not a separately configurable value. No entry shall be prevented or auto-split on account of the overtime threshold; the classification is for display purposes only.

TS-FR-035
5.5. Attendance Summary Report TS-FR-035

When the user requests an attendance summary for a selected period, the NCIA Timesheet shall display total standard hours worked, overtime hours, leave taken by type, and public holidays within that period.

TS-FR-036
5.6. Public Holiday Calendar TS-FR-036

The NCIA Timesheet shall maintain a configurable list of public holidays per year and shall automatically reduce the required hours target for any period containing a public holiday by the duration of one standard working day per holiday.

  • TS-FR-073
    5.13. Working Day and Official Holiday Count on Week View TS-FR-073

    On the weekly time entry view, the NCIA Timesheet shall display for the selected week: total working days in the week (Monday to Friday, i.e. 5 for a full week), and the number of those days that are official holidays for the user's duty location (TS-FR-075). These counts are informational. They shall not alter, lock, or pre-fill any time entry fields for days that coincide with official holidays.

  • TS-FR-074
    5.14. Official Holiday Indicator on Day TS-FR-074

    When a date in the time entry view coincides with an official holiday in the calendar applicable to the user's duty location (TS-FR-075), the NCIA Timesheet shall display a visual indicator (icon or label) next to that date identifying it as an official holiday. Time entries may still be created, edited, and deleted on official holiday dates without restriction. No hours shall be automatically attributed to the day as a result of the official holiday status. Holiday dates are managed by the user in a dedicated Holiday Calendar management UI. Users can add dates one at a time (date picker, year selector) or import from a CSV file (date, name, location columns). Dates are stored per duty location per year. The service provides a lookup API used by the day indicator, week view counts, and required hours derivation.

TS-FR-064
5.7. Work Location Breakdown in Attendance Summary TS-FR-064

When the user requests an attendance summary for a selected period, the NCIA Timesheet shall include a count of working days by location type (OFFICE, HOME, REMOTE) for that period, derived from the work location records associated with the user's profile.

TS-FR-065
5.8. Clock or Decimal Format for Reports and Exports TS-FR-065

Time entries are always entered in hours and minutes (HH:MM). There is no decimal entry mode. When reporting and exporting, the NCIA Timesheet shall allow the user to choose between two display formats via a persistent profile-level preference: Clock format (HH:MM) or Decimal format (hours as a decimal number, e.g. 1.5 for 1h 30m). The selected format shall apply to all duration and total values on the Reports page, the Monthly Prescribed Hours Status Dashboard, and all CSV/Excel exports. Changing the format shall not alter any stored time entry values — only the display representation in reports and exports changes.

  • TS-FR-031
    5.1. Log Leave by Type TS-FR-031

    The NCIA Timesheet shall allow the user to log absence against configurable leave types including at minimum: annual leave, sick leave, training leave, and public holiday.

TS-FR-066
5.9. Extended Absence Code Set TS-FR-066

The NCIA Timesheet shall support the following absence types in addition to annual leave and sick leave already required by TS-FR-031: TDY (T), Special Leave (SL), Home Leave (HL), Unpaid Leave (UL), Compassionate Leave (CL), Family Leave (FL), and Special Administrative Absence (SAA). Each code shall be selectable when recording absence and shall be included in attendance summaries and exports.

  • TS-FR-033
    5.3. Annual Hours Progress TS-FR-033

    The NCIA Timesheet shall display total productive hours worked by the user in the current year alongside the configured annual required hours target, showing the difference as a surplus or deficit.

TS-FR-067
5.10. Flex Time Surplus and Deficit Tracking TS-FR-067

For each calendar month, the Monthly Prescribed Hours Status Dashboard (TS-FR-072) shall display informational flex time values derived from the contracted hours profile (TS-FR-076): - Flex time gained: total hours worked in the month minus required hours for the month (where positive). - Flex time used: total hours recorded against the Flex Leave (FL) absence code in that month. Required hours for the month equals the number of working days (excluding official holidays for the user's duty location per TS-FR-075) multiplied by the standard day length derived from the contracted hours profile (TS-FR-070). The application shall not maintain a managed flex budget, shall not enforce a balance, and shall not prevent recording Flex Leave regardless of surplus. All values are informational.

  • TS-FR-076
    9.6. Contracted Hours and Standard Workweek on Profile TS-FR-076

    The NCIA Timesheet shall allow each user profile to store the following contract work schedule fields: contracted hours per week (the total number of hours per week specified in the user's contract, default 38) and standard workweek days (the number of working days per week, default 5). Both fields shall be editable in profile settings at any time. Changes take effect immediately on all display totals but do not alter any existing time entries. These fields are informational. The application shall use them solely to derive the standard day length (TS-FR-070) for the purpose of displaying period totals (required hours, overtime, flex surplus/deficit). The application shall not enforce contracted hours, shall not prevent the user from logging more or fewer hours than contracted on any day, and shall not auto-fill or auto-deduct entries.

TS-FR-070
5.11. Standard Day Length Derived from Contracted Hours TS-FR-070

The NCIA Timesheet shall derive the standard working day length as contracted hours per week (TS-FR-076) divided by standard workweek days (TS-FR-076). This derived value shall be used solely for the display of period totals, including required hours per week, month, and year; flex surplus or deficit (TS-FR-067); and the notional duration subtracted from required hours for each official holiday (TS-FR-036, TS-FR-072). It shall not enforce a cap on daily entries, shall not prevent time logging on any day, and shall not trigger automatic entries.

  • TS-FR-032
    5.2. Leave Balance Display TS-FR-032

    The NCIA Timesheet shall display the user's remaining balance per leave type, calculated as the configured annual entitlement minus the days logged against that type in the current leave year.

TS-FR-071
5.12. Annual Leave Entitlement Carry-Forward TS-FR-071

The NCIA Timesheet shall allow the user to record an annual leave entitlement carried forward from the previous leave year, stored in hours per profile per leave year. The displayed leave balance shall be calculated as carried-forward hours plus current-year entitlement hours minus hours logged against annual leave in the current leave year.

  • TS-FR-036
    5.6. Public Holiday Calendar TS-FR-036

    The NCIA Timesheet shall maintain a configurable list of public holidays per year and shall automatically reduce the required hours target for any period containing a public holiday by the duration of one standard working day per holiday.

TS-FR-073
5.13. Working Day and Official Holiday Count on Week View TS-FR-073

On the weekly time entry view, the NCIA Timesheet shall display for the selected week: total working days in the week (Monday to Friday, i.e. 5 for a full week), and the number of those days that are official holidays for the user's duty location (TS-FR-075). These counts are informational. They shall not alter, lock, or pre-fill any time entry fields for days that coincide with official holidays.

  • TS-FR-036
    5.6. Public Holiday Calendar TS-FR-036

    The NCIA Timesheet shall maintain a configurable list of public holidays per year and shall automatically reduce the required hours target for any period containing a public holiday by the duration of one standard working day per holiday.

TS-FR-074
5.14. Official Holiday Indicator on Day TS-FR-074

When a date in the time entry view coincides with an official holiday in the calendar applicable to the user's duty location (TS-FR-075), the NCIA Timesheet shall display a visual indicator (icon or label) next to that date identifying it as an official holiday. Time entries may still be created, edited, and deleted on official holiday dates without restriction. No hours shall be automatically attributed to the day as a result of the official holiday status. Holiday dates are managed by the user in a dedicated Holiday Calendar management UI. Users can add dates one at a time (date picker, year selector) or import from a CSV file (date, name, location columns). Dates are stored per duty location per year. The service provides a lookup API used by the day indicator, week view counts, and required hours derivation.

  • TS-FR-032
    5.2. Leave Balance Display TS-FR-032

    The NCIA Timesheet shall display the user's remaining balance per leave type, calculated as the configured annual entitlement minus the days logged against that type in the current leave year.

TS-FR-032A
5.15. Leave Balance Display — Amendment: hours unit TS-FR-032A

The NCIA Timesheet shall display the user's remaining balance per leave type, calculated as the configured annual entitlement in hours minus the hours logged against that type in the current leave year, plus any hours carried forward from the previous leave year (TS-FR-071).

  • TS-FR-034
    5.4. Record Overtime Separately TS-FR-034

    When the user logs hours that cause the total for a working day to exceed the configured standard working day length, the NCIA Timesheet shall record the excess as overtime, separate from standard hours.

TS-FR-034A
5.16. Record Overtime Separately — Amendment: threshold source TS-FR-034A

When the total hours logged by the user for a calendar day exceeds the standard day length derived from the contracted hours profile (contracted hours per week divided by workweek days, per TS-FR-070 and TS-FR-076), the NCIA Timesheet shall record and display the excess as overtime, separate from standard hours in all period totals and the monthly status dashboard (TS-FR-072). The overtime threshold is derived solely from the contracted hours profile and is not a separately configurable value. No entry shall be prevented or auto-split on account of the overtime threshold; the classification is for display purposes only.

TS-FR-075
5.17. Duty Location on User Profile TS-FR-075

The NCIA Timesheet shall require each user profile to specify a duty location, selecting from at minimum: Braine-l'Alleud (Belgium), Brussels (Belgium), Mons (Belgium), The Hague (Netherlands). The selected duty location shall determine which official holiday calendar is applied to that profile for all views and calculations that reference official holidays, including the day indicator (TS-FR-074), the working day counts (TS-FR-073), required hours derivation (TS-FR-070), and the monthly status dashboard (TS-FR-072).

6. 6. Reporting and Analysis

TS-FR-037
6.1. Period Report TS-FR-037

When the user selects a period type (day, week, month, or year) and a period value, the NCIA Timesheet shall display hours logged per project and task for that period.

  • TS-FR-078
    8.11. Weekly Report View in Reports Screen TS-FR-078

    When the user selects "Week" as the period type on the Reports screen and chooses an ISO week, the NCIA Timesheet shall render a read-only weekly summary table showing: one row per project-and-task combination that has at least one logged hour in the selected week; seven day columns (Mon–Sun) with the calendar date beneath the day name; each cell showing the decimal hours logged to that project on that day; a "Week total" column showing the row sum; a "Day total" row at the bottom of the table summing all project hours per day; a "Week grand total" cell at the intersection of the day total row and the week total column. Below the project rows the table shall show a separate leave-and-absence section with one row per leave type (annual leave, sick leave, overtime, flex leave taken, TDY, other absence) for any type that has a non-zero value in the selected week. The full table shall be exportable to CSV via the existing export mechanism (TS-FR-044).

TS-FR-038
6.2. Inline Actual versus Planned Display TS-FR-038

The NCIA Timesheet shall display actual hours alongside estimated hours and allocated hours for each project on the period report without requiring the user to navigate to a separate view.

TS-FR-039
6.3. Variance Notification TS-FR-039

When the variance between actual hours and the applicable ceiling for a project exceeds a configurable threshold, the NCIA Timesheet shall notify the user with an in-app alert identifying the project and the variance amount.

TS-FR-040
6.4. Project Status CSV Export TS-FR-040

When the user requests a project status report, the NCIA Timesheet shall generate a CSV file containing one row per project with columns for project name, estimated hours, allocated hours, actual hours logged, and variance.

TS-FR-041
6.5. Historical Actual versus Planned Reference TS-FR-041

The NCIA Timesheet shall retain actual-versus-planned data for all past periods and make it accessible in a historical view so the user can reference it when estimating future work.

TS-FR-042
6.6. Update Allocation Baseline TS-FR-042

When the user updates the estimated or allocated hours for a project, the NCIA Timesheet shall record the previous and new values in the project history and recalculate all variance figures from the point of the update.

TS-FR-043
6.7. Multi-Period Consolidation TS-FR-043

When the user selects multiple periods, the NCIA Timesheet shall aggregate the time data across all selected periods into a single consolidated view showing totals per project and a period-by-period breakdown.

TS-FR-072
6.8. Monthly Prescribed Hours Status Dashboard TS-FR-072

The NCIA Timesheet shall provide an annual status dashboard showing, for each calendar month of the selected year, the following columns: required hours (working days in the month, excluding official holidays for the user's duty location per TS-FR-075, multiplied by the standard day length derived from the contracted hours profile per TS-FR-070); hours worked (sum of all productive non-absence hours logged in that month); percentage (hours worked divided by required hours); surplus or deficit (hours worked minus required hours in decimal hours). The dashboard shall also display per month: standard hours total, overtime hours, flex leave taken, annual leave taken, sick leave taken, and other absence. The dashboard shall show an annual totals row beneath the twelve monthly rows. All values are informational and derived from logged entries. The application shall not prevent the user from logging entries that would produce unexpected totals.

7. 7. Export and Import

TS-FR-044
7.1. CSV Export — Encoding and Format TS-FR-044

When the NCIA Timesheet generates any CSV export file, it shall encode the file as UTF-8 with a byte-order mark, format all dates as ISO 8601 (YYYY-MM-DD), and include column headers in English.

TS-FR-045
7.2. Period Time Entry Export TS-FR-045

When the user selects a period and requests a time entries export, the NCIA Timesheet shall generate a CSV file containing one row per time entry for the selected period with all entry fields included.

TS-FR-046
7.3. Period Summary Export TS-FR-046

When the user requests a period summary export, the NCIA Timesheet shall generate a CSV file aggregating total hours per project per day for the selected period, suitable for direct entry into an HR or payroll system.

TS-FR-047
7.4. Scoped Export by Project or Task TS-FR-047

When the user applies a project or task filter before exporting, the NCIA Timesheet shall restrict the exported records to entries matching that filter.

TS-FR-048
7.5. Visual Period Breakdown TS-FR-048

When the user selects a period, the NCIA Timesheet shall display a chart showing time distribution by project and task for that period alongside the tabular data.

TS-FR-049
7.6. CSV Import with Preview TS-FR-049

When the user selects a CSV file for import, the NCIA Timesheet shall parse the file, display a preview of all records to be imported, report any rows that cannot be imported with the reason for rejection, and require explicit user confirmation before committing any changes.

TS-FR-050
7.7. Full Backup Export TS-FR-050

The NCIA Timesheet shall provide a full-backup export option that produces a set of CSV files covering all data collections: time entries, projects, allocations, leave records, user profiles, and the audit log.

8. 8. Desktop Application Shell

TS-FR-051
8.1. Native Desktop Window TS-FR-051

The NCIA Timesheet shall run as a native desktop application on Windows 10 version 1803 or later and Windows 11, displaying in a dedicated native window without a browser address bar, navigation controls, or tab strip.

TS-FR-052
8.2. Standard Window Controls TS-FR-052

The NCIA Timesheet application window shall support standard Windows window operations: minimise to taskbar, maximise to full screen, restore to previous size and position, free resize by dragging edges, and close.

TS-FR-053
8.3. Keep Window on Top TS-FR-053

When the user activates the keep-on-top control, the NCIA Timesheet window shall remain in front of all other application windows until the user explicitly deactivates the control.

TS-FR-054
8.4. Window Position Restore After Minimise TS-FR-054

When the user restores the NCIA Timesheet window after minimising it, the application shall restore the window to the same screen position and dimensions it occupied before minimisation.

TS-FR-055
8.5. Portable Executable Distribution TS-FR-055

The NCIA Timesheet shall be distributable as a single portable executable file that runs on Windows without requiring installation, an installer package, or administrator privileges.

TS-FR-056
8.6. Quick-Add Entry Mode TS-FR-056

The NCIA Timesheet shall provide a quick-add entry mode accessible from any view, allowing the user to select a project and task and enter a duration in a single compact form without navigating away from the current view.

TS-FR-057
8.7. Day View and Week View for Multi-Entry Editing TS-FR-057

When the user wants to review or edit multiple entries, the NCIA Timesheet shall provide a day view and a week view that display all time entries for the selected period in an editable grid. The week view shall present seven columns (Monday through Sunday) for the selected ISO week, one row per project-and-task combination, with an editable decimal-hours cell at each day intersection. A daily subtotal row shall appear beneath all project rows showing the sum of hours logged per day. A weekly subtotal cell shall appear at the right of the daily subtotal row showing the sum across all seven days. The user may add a new project-and-task row at any time during the week session. Saving any cell shall persist the change immediately without requiring a separate submit action. Official holiday dates shall be visually indicated on their column header per TS-FR-074 and working-day and holiday counts shall be shown per TS-FR-073.

  • TS-FR-077
    8.10. Weekly Time Entry Grid Route TS-FR-077

    The NCIA Timesheet shall provide a dedicated Weekly Time Entry screen accessible from the main navigation as "Weekly" under the Time Entries section. The screen shall default to the ISO week containing today's date and shall allow the user to navigate to any other week by week picker or previous/next arrows. The grid shall display seven columns (Mon–Sun) with the calendar date beneath each day name. Each row represents one project-and-task combination; the user may add a new row by selecting a project and task from dropdown controls in an empty row at the bottom of the grid. Each intersection cell accepts a decimal hours value (e.g. 7.6). A sticky "Day total" row at the bottom of the grid shall show the sum of all project hours for each day column. A "Week total" cell at the far right of the day total row shall show the grand total for the week. The user may delete a project row if all its hours are zero. Official holidays in the user's duty-location calendar shall be indicated on the column header with an icon per TS-FR-074, and the working-day and holiday count summary from TS-FR-073 shall appear above the grid. All edits shall be auto-saved on cell blur.

TS-FR-058
8.8. Copy Projects and Tasks from a Previous Week TS-FR-058

When the user opens a week view that contains no time entries, the NCIA Timesheet shall offer the option to copy all projects and tasks from the immediately preceding week or from a user-specified week number.

  • TS-FR-077
    8.10. Weekly Time Entry Grid Route TS-FR-077

    The NCIA Timesheet shall provide a dedicated Weekly Time Entry screen accessible from the main navigation as "Weekly" under the Time Entries section. The screen shall default to the ISO week containing today's date and shall allow the user to navigate to any other week by week picker or previous/next arrows. The grid shall display seven columns (Mon–Sun) with the calendar date beneath each day name. Each row represents one project-and-task combination; the user may add a new row by selecting a project and task from dropdown controls in an empty row at the bottom of the grid. Each intersection cell accepts a decimal hours value (e.g. 7.6). A sticky "Day total" row at the bottom of the grid shall show the sum of all project hours for each day column. A "Week total" cell at the far right of the day total row shall show the grand total for the week. The user may delete a project row if all its hours are zero. Official holidays in the user's duty-location calendar shall be indicated on the column header with an icon per TS-FR-074, and the working-day and holiday count summary from TS-FR-073 shall appear above the grid. All edits shall be auto-saved on cell blur.

TS-FR-059
8.9. Copy Week — Structural or Inclusive of Hours TS-FR-059

When the user copies projects and tasks from a previous week, the NCIA Timesheet shall allow the user to choose between copying the structure only with zero hours for all entries, or copying the full entries inclusive of the hours recorded in the source week.

  • TS-FR-077
    8.10. Weekly Time Entry Grid Route TS-FR-077

    The NCIA Timesheet shall provide a dedicated Weekly Time Entry screen accessible from the main navigation as "Weekly" under the Time Entries section. The screen shall default to the ISO week containing today's date and shall allow the user to navigate to any other week by week picker or previous/next arrows. The grid shall display seven columns (Mon–Sun) with the calendar date beneath each day name. Each row represents one project-and-task combination; the user may add a new row by selecting a project and task from dropdown controls in an empty row at the bottom of the grid. Each intersection cell accepts a decimal hours value (e.g. 7.6). A sticky "Day total" row at the bottom of the grid shall show the sum of all project hours for each day column. A "Week total" cell at the far right of the day total row shall show the grand total for the week. The user may delete a project row if all its hours are zero. Official holidays in the user's duty-location calendar shall be indicated on the column header with an icon per TS-FR-074, and the working-day and holiday count summary from TS-FR-073 shall appear above the grid. All edits shall be auto-saved on cell blur.

  • TS-FR-057
    8.7. Day View and Week View for Multi-Entry Editing TS-FR-057

    When the user wants to review or edit multiple entries, the NCIA Timesheet shall provide a day view and a week view that display all time entries for the selected period in an editable grid. The week view shall present seven columns (Monday through Sunday) for the selected ISO week, one row per project-and-task combination, with an editable decimal-hours cell at each day intersection. A daily subtotal row shall appear beneath all project rows showing the sum of hours logged per day. A weekly subtotal cell shall appear at the right of the daily subtotal row showing the sum across all seven days. The user may add a new project-and-task row at any time during the week session. Saving any cell shall persist the change immediately without requiring a separate submit action. Official holiday dates shall be visually indicated on their column header per TS-FR-074 and working-day and holiday counts shall be shown per TS-FR-073.

  • TS-FR-058
    8.8. Copy Projects and Tasks from a Previous Week TS-FR-058

    When the user opens a week view that contains no time entries, the NCIA Timesheet shall offer the option to copy all projects and tasks from the immediately preceding week or from a user-specified week number.

  • TS-FR-059
    8.9. Copy Week — Structural or Inclusive of Hours TS-FR-059

    When the user copies projects and tasks from a previous week, the NCIA Timesheet shall allow the user to choose between copying the structure only with zero hours for all entries, or copying the full entries inclusive of the hours recorded in the source week.

TS-FR-077
8.10. Weekly Time Entry Grid Route TS-FR-077

The NCIA Timesheet shall provide a dedicated Weekly Time Entry screen accessible from the main navigation as "Weekly" under the Time Entries section. The screen shall default to the ISO week containing today's date and shall allow the user to navigate to any other week by week picker or previous/next arrows. The grid shall display seven columns (Mon–Sun) with the calendar date beneath each day name. Each row represents one project-and-task combination; the user may add a new row by selecting a project and task from dropdown controls in an empty row at the bottom of the grid. Each intersection cell accepts a decimal hours value (e.g. 7.6). A sticky "Day total" row at the bottom of the grid shall show the sum of all project hours for each day column. A "Week total" cell at the far right of the day total row shall show the grand total for the week. The user may delete a project row if all its hours are zero. Official holidays in the user's duty-location calendar shall be indicated on the column header with an icon per TS-FR-074, and the working-day and holiday count summary from TS-FR-073 shall appear above the grid. All edits shall be auto-saved on cell blur.

  • TS-FR-037
    6.1. Period Report TS-FR-037

    When the user selects a period type (day, week, month, or year) and a period value, the NCIA Timesheet shall display hours logged per project and task for that period.

TS-FR-078
8.11. Weekly Report View in Reports Screen TS-FR-078

When the user selects "Week" as the period type on the Reports screen and chooses an ISO week, the NCIA Timesheet shall render a read-only weekly summary table showing: one row per project-and-task combination that has at least one logged hour in the selected week; seven day columns (Mon–Sun) with the calendar date beneath the day name; each cell showing the decimal hours logged to that project on that day; a "Week total" column showing the row sum; a "Day total" row at the bottom of the table summing all project hours per day; a "Week grand total" cell at the intersection of the day total row and the week total column. Below the project rows the table shall show a separate leave-and-absence section with one row per leave type (annual leave, sick leave, overtime, flex leave taken, TDY, other absence) for any type that has a non-zero value in the selected week. The full table shall be exportable to CSV via the existing export mechanism (TS-FR-044).

TS-FR-079
8.12. Consolidated Navigation Structure TS-FR-079

The NCIA Timesheet shall organise its primary navigation into five top-level sections as follows:

  1. Dashboard — the summary landing page (TS-FR-003).
  2. Time Entries — contains: List view (day view and week list), Weekly Grid (TS-FR-077, TS-FR-057), and Leave & Attendance (TS-FR-031 to TS-FR-036, TS-FR-063). Leave logging is a time-valued activity and shall not require navigating outside the time entry area.
  3. Projects — contains: Project Overview and Overhead Codes (TS-FR-016 to TS-FR-022), and Project Allocations (TS-FR-023 to TS-FR-030). Allocations are a property of projects and shall be accessible from within the Projects section.
  4. Reports — contains: Period Report (TS-FR-037), Weekly Report (TS-FR-078), Multi-Period Consolidation (TS-FR-043), Monthly Prescribed Hours Status Dashboard (TS-FR-072), Audit Log (TS-FR-006 to TS-FR-007), and Export & Import (TS-FR-044 to TS-FR-050). Export is a reporting output and the audit log is a reporting view; both shall be accessible from within the Reports section.
  5. Settings — contains: User Profile settings (TS-FR-060 to TS-FR-076) and Official Holiday Calendar management (TS-FR-075). The holiday calendar is a configuration input and shall be managed in Settings, not as a standalone top-level page.

The application shall not expose /allocations, /leave, /holiday-calendar, /status-dashboard, /audit-log, or /export as independent top-level navigation items. These destinations shall be reachable only through their parent section described above.

9. 9. User Profiles

TS-FR-060
9.1. Create Local User Profile TS-FR-060

The NCIA Timesheet shall allow the user to create one or more named local user profiles without requiring a password, a network connection, or an external account.

  • TS-FR-068
    9.4. Personnel Submission Metadata (Supervisor, Sponsor, Area) TS-FR-068

    The NCIA Timesheet shall allow each user profile to store the following submission metadata fields: Supervisor name, Sponsor name, and Area. These fields shall be pre-populated on any exported monthly timesheet report and shall be editable within the profile settings without affecting time entry data.

  • TS-FR-069
    9.5. Employment and Contract Type Classification TS-FR-069

    The NCIA Timesheet shall allow each user profile to be classified with a contract or employment type, selecting from at minimum: IWC (Individual Wage Contractor), PBC (Performance-Based Contractor), NIC (NATO International Civilian). The selected type shall be stored in the profile and displayed on exported timesheet reports.

TS-FR-061
9.2. Active Profile Display and Switching TS-FR-061

The NCIA Timesheet shall display the active user profile at all times in the application shell and shall allow the user to switch to a different profile with a single action.

TS-FR-062
9.3. Profile Attribution on Write Operations TS-FR-062

When the user creates, edits, or deletes a time entry, the NCIA Timesheet shall tag the resulting audit log record with the identifier and display name of the active user profile at the time of the operation.

  • TS-FR-060
    9.1. Create Local User Profile TS-FR-060

    The NCIA Timesheet shall allow the user to create one or more named local user profiles without requiring a password, a network connection, or an external account.

TS-FR-068
9.4. Personnel Submission Metadata (Supervisor, Sponsor, Area) TS-FR-068

The NCIA Timesheet shall allow each user profile to store the following submission metadata fields: Supervisor name, Sponsor name, and Area. These fields shall be pre-populated on any exported monthly timesheet report and shall be editable within the profile settings without affecting time entry data.

  • TS-FR-060
    9.1. Create Local User Profile TS-FR-060

    The NCIA Timesheet shall allow the user to create one or more named local user profiles without requiring a password, a network connection, or an external account.

TS-FR-069
9.5. Employment and Contract Type Classification TS-FR-069

The NCIA Timesheet shall allow each user profile to be classified with a contract or employment type, selecting from at minimum: IWC (Individual Wage Contractor), PBC (Performance-Based Contractor), NIC (NATO International Civilian). The selected type shall be stored in the profile and displayed on exported timesheet reports.

TS-FR-076
9.6. Contracted Hours and Standard Workweek on Profile TS-FR-076

The NCIA Timesheet shall allow each user profile to store the following contract work schedule fields: contracted hours per week (the total number of hours per week specified in the user's contract, default 38) and standard workweek days (the number of working days per week, default 5). Both fields shall be editable in profile settings at any time. Changes take effect immediately on all display totals but do not alter any existing time entries. These fields are informational. The application shall use them solely to derive the standard day length (TS-FR-070) for the purpose of displaying period totals (required hours, overtime, flex surplus/deficit). The application shall not enforce contracted hours, shall not prevent the user from logging more or fewer hours than contracted on any day, and shall not auto-fill or auto-deduct entries.

  • TS-FR-070
    5.11. Standard Day Length Derived from Contracted Hours TS-FR-070

    The NCIA Timesheet shall derive the standard working day length as contracted hours per week (TS-FR-076) divided by standard workweek days (TS-FR-076). This derived value shall be used solely for the display of period totals, including required hours per week, month, and year; flex surplus or deficit (TS-FR-067); and the notional duration subtracted from required hours for each official holiday (TS-FR-036, TS-FR-072). It shall not enforce a cap on daily entries, shall not prevent time logging on any day, and shall not trigger automatic entries.

10. 10. Non-Functional Requirements

TS-NFR-001
10.1. Full Offline Operation TS-NFR-001

The NCIA Timesheet shall operate fully without a network connection. No feature shall require internet access or contact any external server at runtime.

TS-NFR-002
10.2. Data Persistence Across Restarts TS-NFR-002

The NCIA Timesheet shall retain all user data across application restarts and device reboots without requiring any manual save action from the user.

TS-NFR-003
10.3. Data Location Independence TS-NFR-003

The NCIA Timesheet shall store all application data in the operating system user data directory independent of the location of the executable file, so that moving or renaming the executable does not result in data loss or inaccessibility.

TS-NFR-004
10.4. No Installation Required TS-NFR-004

The NCIA Timesheet shall run on Windows 10 version 1803 or later and Windows 11 without requiring the user or an administrator to run an installer, register the application with the operating system, or modify system configuration.

TS-NFR-005
10.5. Excel CSV Compatibility TS-NFR-005

All CSV files exported by the NCIA Timesheet shall open correctly in Microsoft Excel on Windows without requiring the user to perform an import wizard, adjust encoding settings, or apply any manual transformation.

TS-NFR-006
10.6. Schema Migration on Update TS-NFR-006

When the NCIA Timesheet is updated to a version with a changed local database schema, the application shall automatically migrate all existing data to the new schema on first launch without data loss and without requiring user action.