PC Fleet Management
Track, analyze, and manage the 640+ Dell PCs deployed inside PSI machines running PRIMS/CITS HMI software. Provides fleet-wide visibility into PC age, Windows version, Dell warranty status, and replacement history — enabling proactive upgrade planning before customers experience failures.
Overview
Every PSI machine ships with one or more Dell PCs running PRIMS or CITS HMI software. Over time these PCs age out — Windows versions go end-of-life, warranties expire, and hardware fails. Until now, there was no centralized view of the fleet. The PC Fleet Management system solves this by:
- Ingesting the PRIMS Installations spreadsheet (640 rows, 619 Dell service tags)
- Enriching with Dell warranty data (ship dates, warranty start/end, service levels)
- Joining with project data (customer names, machine descriptions, serial numbers)
- Presenting an interactive dashboard in PSI Explorer with filtering, sorting, and upgrade letter generation
| Property | Value |
|---|---|
| Access | PSI Explorer > PC Fleet |
| Data Source | PRIMS Installations spreadsheet + Dell Command Warranty |
| PCs Tracked | 640+ total, 619 with Dell service tags |
| Data Pipeline | psi-data-pipeline (prims_installations table) |
| Refresh | GitHub Actions PRIMS PC Fleet Sync workflow |
Why It Matters
- Proactive service — Identify machines running Windows 7/XP or PCs past warranty before they fail in production
- Retrofit planning — Know which customers need PC upgrades and generate personalized upgrade letters
- Fleet visibility — Answer “How many PCs are running Win 7?” or “What’s our average PC age?” instantly
- Customer conversations — CS managers can discuss specific PC status during service calls
Accessing the Tool
- Open PSI Explorer
- Click the Monitor icon (PC Fleet) in the left navigation bar
- Or navigate directly to
#pc-fleet
Requires VPN or corporate network access. Authenticated via Azure AD.
Features
Machine-Centric View
The default view groups PCs by project (machine). Each project card shows:
- Project number, customer name, and machine description
- PC timeline — shows the original PC and any retrofit replacements in chronological order
- Current PC highlighted with service tag, Windows version, age, and warranty status
- Prior/replaced PCs shown as historical entries
This view makes it easy to see the full PC history for a machine, including when retrofits replaced older hardware.
Flat View
Toggle to a flat table showing every PC as a single row. All columns are sortable:
- Project number, customer, description
- Dell service tag (linked to Dell support)
- Windows version, SQL Server version
- Ship date, PC age
- Warranty status and dates
Best for fleet-wide analysis and finding specific PCs.
Age Color Coding
PC age is calculated from the Dell ship date and displayed with color-coded badges:
| Color | Age Range | Meaning |
|---|---|---|
| Green | < 5 years | Current, no action needed |
| Amber | 5-8 years | Aging, plan for replacement |
| Red | 8-10 years | Overdue for replacement |
| Dark Red | > 10 years | Critical, high failure risk |
Windows Version Badges
| Badge Color | Version | Status |
|---|---|---|
| Green | Windows 11 | Current |
| Blue | Windows 10 | Supported (EOL Oct 2025) |
| Amber | Windows 7 | End of life |
| Red | Windows XP | Critically obsolete |
Warranty Status Badges
Each PC shows its Dell warranty status:
- Active — warranty still valid, with end date shown
- Expired — warranty lapsed, with expiration date
- Unknown — no warranty data available (non-Dell or unenriched)
Warranty data includes the Dell service level (ProSupport, Basic, Next Business Day, etc.).
Filters
- Text search — filter by project number, customer name, description, or service tag
- Windows version — filter to specific OS versions
- Warranty status — show only active, expired, or unknown warranty
- Age range — filter by PC age brackets
Summary Cards
Dashboard header shows fleet-wide metrics (excludes replaced PCs from calculations):
- Current PCs — count of active (non-replaced) PCs in the fleet
- Warranty Status — active vs. expired warranty breakdown
- Legacy OS — count of PCs running Windows 7 or XP
- Average Age — mean PC age across the current fleet
Generate Upgrade Letter
Click the letter icon on any PC to generate a personalized customer upgrade letter. The template includes:
- Customer name and machine details
- Current PC specifications and age
- Recommended upgrade path
- PSI contact information
Based on the template at \\ad.ptihome.com\DFS\DATA\ (originally from C:\git\prims-pc-info\PC Upgrade - jmw edits (002).odt).
Data Sources
PRIMS Installations Spreadsheet
The primary data source is an Excel spreadsheet maintained by the controls department:
\\ad.ptihome.com\DFS\DATA\dept\eng\controls\apps\Prims Pro\PRIMS Installations.xls
Contains 640 rows with fields including:
- Project/SPN (Sales Project Number)
- Customer name and machine description
- Dell service tag
- Windows version, SQL Server version
- PRIMS/CITS software version
- Installation notes and dates
Important: SPN (Sales Project Number) is NOT the machine serial number. Machine serial numbers come from the UniData API, not the analytics database.
Dell Command | Warranty
Dell warranty and ship date data is enriched via Dell Command | Warranty CLI:
"C:\Program Files (x86)\Dell\CommandIntegrationSuite\DellWarranty-CLI.exe"
This tool queries the Dell warranty API for all 618 service tags in approximately 2 seconds. Returns:
- Dell ship date (used for age calculation)
- Warranty start and end dates
- Service level / plan type (ProSupport, Basic, Next Business Day, etc.)
- Service contracts
Note: An earlier approach using Playwright-based web scraping (enrich_dell_support.py) was attempted but Dell blocks headless browsers. The CLI tool is the working method.
Projects Table
The production projects table in Azure SQL PSI_Analytics (published by the data pipeline) provides:
- Customer names
- Machine descriptions
- Project status
The PC Fleet API endpoint joins prims_installations with projects in Azure SQL to show customer and machine context alongside PC data. The upstream SQLite files (psi_ingest.db, psi_analytics.db) are pipeline stages, not the app’s live query target.
Architecture
Data Flow
PRIMS Installations.xls (K: drive)
↓
load_prims_standalone.py (parse into durable ingest DB)
↓
psi_ingest.db → prims_installations table (durable scraper-owned SQLite, PS-PROXY)
↓
enrich_dell_support.py (Dell ship dates + warranty enrichment)
↓
publish_ingest_tables.py (copy ingest-owned table into psi_analytics.db)
↓
sync_table_to_azure.py (push prims_installations to Azure SQL)
↓
Azure SQL: PSI_Analytics.prims_installations
↓
PSI Explorer: /api/analytics/pc-fleet (Azure SQL join with projects)
↓
PC Fleet page (#pc-fleet) in browser
Key Components
| Component | Location | Purpose |
|---|---|---|
load_prims_standalone.py | psi-data-pipeline repo | Standalone loader that parses XLS into psi_ingest.db |
enrich_dell_support.py | psi-data-pipeline repo | Dell Command Warranty enrichment (adds ship dates, warranty data) |
publish_ingest_tables.py | psi-data-pipeline repo | Copies ingest-owned tables into psi_analytics.db for downstream rebuild/publish |
sync_table_to_azure.py | psi-data-pipeline repo | Syncs any SQLite table to Azure SQL PSI_Analytics |
analytics-routes.js | bom-explorer-web/server | Express route: /api/analytics/pc-fleet |
PcFleetPage.tsx | bom-explorer-web/src | React page component |
| GitHub Actions workflow | psi-data-pipeline | PRIMS PC Fleet Sync — independent data refresh |
Infrastructure
- ODBC Driver 18 installed on PS-PROXY for Azure SQL connectivity
- Azure SQL
PSI_Analyticsdatabase hosts the production copy ofprims_installations - PSI Explorer backend queries Azure SQL directly via the analytics routes
- Workflow verification now checks that
prims_installationsrow counts match across ingest, analytics, and Azure SQL before the refresh job succeeds
How to Refresh Data
Full Refresh (Spreadsheet + Warranty)
- Update the spreadsheet — Controls department updates
PRIMS Installations.xlson the K: drive - Run the loader — Execute
load_prims_standalone.pyon PS-PROXY. This loadsprims_installationsintopsi_ingest.db - Enrich with Dell data — Run
enrich_dell_support.pyto query Dell Command Warranty for any new/changed service tags inpsi_ingest.db - Publish to analytics — Run
publish_ingest_tables.py prims_installationsso the analytics rebuild/publish path sees the current ingest-owned table - Sync to Azure — Run
sync_table_to_azure.py prims_installationsto push to Azure SQL - Verify — Check the PC Fleet page in PSI Explorer
Automated Refresh
The GitHub Actions workflow PRIMS PC Fleet Sync can be triggered to run the spreadsheet load, analytics publish, Azure sync, and row-count verification. This runs as an independent job, not part of the monolithic nightly pipeline.
Dell Warranty Enrichment Only
To refresh just the Dell warranty data without reloading the spreadsheet:
cd /path/to/psi-data-pipeline
python enrich_dell_support.py
python publish_ingest_tables.py prims_installations
python sync_table_to_azure.py prims_installationsKey Concepts
Current vs. Replaced PCs
When a project number appears multiple times in the PRIMS spreadsheet, it means the machine has had PC replacements via retrofit work orders. The system determines:
- Current PC — the latest/newest PC for a given project number (shown prominently)
- Prior/Replaced PC — older PCs that were swapped out (shown as historical entries)
Only current PCs are included in fleet summary metrics (average age, warranty counts, etc.). Replaced PCs are still visible in the machine-centric view for historical context.
Retrofit Work Orders
Duplicate project numbers indicate a retrofit — a return visit to upgrade or replace hardware on an existing machine. The PC Fleet timeline shows these as sequential entries, making it clear when a PC was replaced and what it was replaced with.
Age Thresholds
PSI uses the following guidelines for PC replacement planning:
- < 5 years — No action needed, hardware is current
- 5-8 years — Begin planning replacement, discuss with customer during service calls
- 8-10 years — Actively recommend replacement, generate upgrade letter
- > 10 years — Critical risk of hardware failure, prioritize replacement
SPN vs. Serial Number
The SPN (Sales Project Number) in the PRIMS spreadsheet is a PSI internal project number, NOT the machine serial number that appears on the nameplate. Machine serial numbers are sourced from the UniData API and are not currently included in the PC Fleet data (planned improvement).
Related Pages
- PSI Explorer Web — The application hosting the PC Fleet dashboard
- Data Pipeline — The data infrastructure behind
prims_installations - Project Explorer — Extended with PRIMS PC component cards and obsolescence badges