This is a clean-room public implementation inspired by common enterprise automation patterns. It does not contain proprietary code, production data, credentials, or confidential business logic from any employer or client.
Ops Time Intelligence Dashboard is a FastAPI operations application for consolidating engineering time from ServiceNow, Monday.com, and payroll/PTO imports into a single reporting surface. The public repository is a redacted clean-room version of the production pattern: integration names, data contracts, route shapes, storage behavior, and operational workflows are preserved; organization-specific names, domains, credentials, board numbers, user identities, ticket references, and internal deployment values are replaced with generic placeholders.
- Primary app entrypoint:
src/ops_time_dashboard/app.py - Runtime: Python, FastAPI, Pydantic, SQLite
- Data model: normalized time entries keyed by
(source, source_id) - Source systems represented: ServiceNow Table API, Monday.com GraphQL, payroll/PTO import
- Exports: CSV endpoint suitable for workbook/report generation
- Auth model: environment-ready; public version omits real SSO configuration
- Storage model: local SQLite path from
DATABASE_PATH
The app pulls operational time records from multiple source systems, normalizes them into one schema, and exposes summary views for utilization, billing, client allocation, and raw export.
Primary workflows:
- import ServiceNow
task_time_worked-style records - import Monday.com board item time tracking records
- import payroll/PTO rows into the same reporting model
- de-duplicate source records during repeat syncs
- calculate employee utilization and PTO impact
- calculate client and billable/non-billable pivots
- expose normalized entries for export
flowchart TD
User["Authorized operations user"] --> API["FastAPI app"]
API --> Sync["Sync service"]
Sync --> SN["ServiceNow Table API adapter"]
Sync --> Monday["Monday.com GraphQL adapter"]
Sync --> PTO["Payroll/PTO import adapter"]
Sync --> DB["SQLite time_entries"]
API --> Employee["Employee utilization summary"]
API --> Client["Client billing pivot"]
API --> Export["CSV export"]
| Path | Purpose |
|---|---|
src/ops_time_dashboard/app.py |
FastAPI routes for sync, entries, summaries, and export |
src/ops_time_dashboard/models.py |
Pydantic time-entry and summary models |
src/ops_time_dashboard/redacted_sources.py |
Redacted source adapters preserving ServiceNow/Monday/PTO data shape |
src/ops_time_dashboard/storage.py |
SQLite schema and source de-duplication |
src/ops_time_dashboard/service.py |
Sync and summary orchestration |
docs/integration-contracts.md |
Field-level source contracts |
.env.example |
Placeholder runtime configuration |
tests/test_dashboard.py |
Normalization, de-duplication, and summary tests |
| Source | Production contract represented | Redacted implementation |
|---|---|---|
| ServiceNow Table API | task_time_worked, related task number, company, caller, work notes, duration, created timestamp |
Local adapter returns records with ServiceNow-shaped source IDs and fields |
| Monday.com GraphQL | board item ID, group title, time tracking column, billing label, client board mapping | Local adapter returns Monday-shaped item records |
| Payroll/PTO import | spreadsheet rows for employee, date, earning type, hours | Local adapter maps PTO rows into normalized entries |
| SQLite | unique (source, source_id), incremental sync metadata pattern, queryable reporting table |
time_entries table enforces source uniqueness |
.env.example documents the deployment contract without including secrets:
| Setting | Purpose |
|---|---|
DATABASE_PATH |
SQLite database path |
SSO_ENABLED |
Enables production SSO when wired by a private deployment |
SERVICENOW_INSTANCE |
Redacted ServiceNow instance placeholder |
SERVICENOW_AUTH_REFERENCE |
Secret reference name, not a secret value |
MONDAY_AUTH_REFERENCE |
Secret reference name, not a token |
MONDAY_BOARD_IDS |
Placeholder board IDs |
| Route | Method | Purpose |
|---|---|---|
/sync |
POST | Run source ingestion |
/entries |
GET | Return normalized time entries |
/summary/employees |
GET | Employee utilization summary |
/summary/clients |
GET | Client/billing pivot |
/export.csv |
GET | CSV export |
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
pytest
uvicorn ops_time_dashboard.app:app --reload --port 8010This public repository keeps the system design, source contracts, route shape, storage model, and reporting logic. It intentionally replaces or omits:
- employer and client names
- real domains and user principal names
- ServiceNow instance names and ticket numbers
- Monday.com board identifiers
- credentials and secret values
- internal deployment URLs
- screenshots, logs, and exported workbooks