PAUMS – System Requirements Specification (SRS) v2.0

Document Type: SRS | Version: v2.0 | Status: Production-ready | Last Updated: 10 Jan 2026
Type to filter questions
No matching questions found. Try different keywords.

System Overview

What is PAUMS v2.0?

A:

PAUMS v2.0 is a production-ready enterprise system that provides authoritative, audit-safe utilization reporting across multiple regions with heterogeneous data sources. The system has evolved from a basic dashboard to a hierarchy-driven capacity planning system with executive-grade reporting.

What technology stack does PAUMS use?

A:

The system is built using FastAPI, MariaDB, and a lightweight HTML/JS frontend, with immutable snapshots as the core architectural principle.

Database Schema

How many core tables does PAUMS have?

A:

The PAUMS database consists of 9 core tables that implement the dual-region, snapshot-based architecture. All tables use InnoDB engine with appropriate indexing for performance.

What is the purpose of the audit_logs table?

A:

Stores audit trail for all system events including snapshot rebuilds, data uploads, and admin actions. Critical for compliance and traceability.

FieldTypeDescription
idint(11)Primary key, auto-increment
event_typevarchar(255)Type of audit event
usernamevarchar(255)User who performed the action

What does the emea_allocations table store?

A:

Stores EMEA region allocation data. Contains monthly FTE allocation percentages that are converted to hours during snapshot creation.

What is the employees table used for?

A:

Master employee table containing workforce data. Includes FTE defaults, region, and role classification information.

What is the monthly_snapshot table and why is it critical?

A:

Core immutable snapshot table. Contains frozen monthly metrics at both organization and employee levels. This is the source of truth for all reporting.

Key Design: This table is immutable - historical snapshots never recalculated.

What is the project_hierarchy table for?

A:

Canonical project hierarchy table extracted from EMEA allocation files. Supports multi-level rollup reporting and drilldowns.

What is the purpose of the staging_apac table?

A:

Staging table for raw APAC timesheet data imported from Clockify exports. Used for data validation before processing into timesheets.

What are the key database relationships?

A:
employees (1) —— (many) timesheets
employees (1) —— (many) emea_allocations
employees (1) —— (many) monthly_snapshot (scope='EMPLOYEE')
projects (1) —— (many) timesheets
projects (1) —— (many) emea_allocations
project_hierarchy (1) —— (1) projects (via project_code)
    

Architecture & Design

What are the core design principles of PAUMS?

A:

What are the key architectural enhancements in v2.0?

A:
EnhancementDescription
Dual Region Calculation ModelAPAC: Actual hours from timesheets, EMEA: FTE allocation percentages
Immutable Snapshot LayerMonthly snapshots with controlled rebuild capability
Project Hierarchy SystemCanonical hierarchy storage with multi-level rollup
Executive Reporting Engine6-page PDF reports with narrative + KPI layers

User Roles & Authentication

What user roles does PAUMS support?

A:
RoleDescriptionCapabilities
AdminSystem administratorSnapshot rebuild, uploads, exports, audit overrides
ViewerRead-only userDashboards, reports, PDF exports
ExecutiveLeadership userExecutive summaries, narrative views

How does authentication work?

A:

Core Data Model

What is the source of truth for reporting?

A:

The monthly_snapshot table is the single source of truth for all reporting.

How are employees classified in PAUMS?

A:

Represents workforce master data including region, job title, FTE defaults. Leadership classification via deterministic rules.

What is the project hierarchy system?

A:

Regional Processing Rules

How does APAC processing work?

A:

How does EMEA processing work?

A:

Are APAC and EMEA data merged at raw level?

A:
Design Decision: APAC and EMEA data are never merged at raw level. Only snapshot outputs are aggregated for reporting.

Utilization Calculation Logic

What are the authoritative metric definitions?

A:
MetricDefinitionSource
Available HoursFTE default hoursmonthly_snapshot.available_hours
Utilized HoursBillable hours excluding TPMOmonthly_snapshot.utilized_hours
TPMO HoursProject code 27290 hoursmonthly_snapshot.tpmo_hours
Billable HoursAll project hours (including TPMO)monthly_snapshot.billable_hours

What are the core calculation formulas?

A:
Utilization % = (Utilized Hours / Available Hours) × 100
Billable % = (Billable Hours / Available Hours) × 100
TPMO % of Available = (TPMO Hours / Available Hours) × 100
Idle Hours = Available Hours − Utilized Hours
    

How is leadership classification determined?

A:
Leadership Definition:
1. job_title IN LEADERSHIP_TITLES
   OR
2. full_name IN LEADERSHIP_NAME_EXCEPTIONS

All other employees → Project Managers
    

Snapshot Lifecycle

How are snapshots created?

A:

When can snapshots be rebuilt?

A:

What does snapshot lock mean?

A:

API Requirements

What dashboard APIs are available?

A:
EndpointDescriptionVersion
/api/v1/dashboard/summaryMonthly KPIs and metricsv1/v2
/api/v1/dashboard/trends/exec/narrativeExecutive narrative and alertsv2 only
/api/v1/dashboard/yearly-summaryYearly aggregated viewv2 only

What reporting APIs are available?

A:
EndpointOutputPurpose
/api/v1/reports/executive-summary/pdf6-page PDF reportExecutive review
/api/v1/exports/yearly-csvCSV exportData analysis
/api/v1/exports/employee-drilldownExcel formatDetailed review

Functional Requirements

What is the executive summary requirement?

A:

What is the PDF export requirement?

A:

What are the data integrity requirements?

A:

Troubleshooting

What should I check if charts show wrong data?

A:
  1. Check UI Layer - Compare chart labels vs tooltip values
  2. Inspect Network Tab - Examine API payloads in developer tools
  3. Check Service Logic - Validate allocation sums and aggregation
  4. Query Database - Direct database validation
  5. Trace Back to Ingestion - Excel row → normalized row → snapshot

What are common frontend failure patterns?

A:
SymptomRoot Cause
"Cannot set properties of null" errorsHTML ID changed but JS references old ID
Executive KPIs stuck at "Loading…"Narrative API failed or no data
Single green bar in APAC chartsBackend aggregating into "Billable Work" category

What SQL checks can I run for validation?

A:
-- Allocation validation (EMEA)
SELECT employee_id, year, month,
       alloc_control,
       SUM(allocation) AS summed
FROM emea_allocations
GROUP BY employee_id, year, month
HAVING ABS(alloc_control - SUM(allocation)) > 0.001;

-- Snapshot vs project mismatch detection
SELECT s.employee_id, s.year, s.month,
       s.utilized_hours,
       SUM(p.billable_hours + p.tpmo_hours) AS project_total
FROM monthly_snapshot s
JOIN employee_project_monthly p USING (employee_id, year, month)
GROUP BY s.employee_id, s.year, s.month
HAVING ABS(s.utilized_hours - project_total) > 0.01;
    

System Components

What are the frontend components?

A:
FilePurposeStatus
dashboard.htmlMain dashboard UI, charts, modals✅ Stable
dashboard.jsDashboard controller, API calls✅ Stable
org_trend_chart.jsOrg utilization trend chart✅ Existing
org_billable_tpmo_chart.jsBillable vs TPMO chart✅ Existing

What are the backend services?

A:
FilePurposeStatus
dashboard_service.pyMonthly summaries, resource list
dashboard_trends_service.pyOrg & employee trends
yearly_summary_service.pyExecutive yearly aggregation
data_health_service.pyMissing data / anomalies