Field Tech Questions
Overview
Field Technicians need quick access to device information, software deployment capabilities, and troubleshooting guidance. Questions focus on provisioning devices, deploying software, and resolving technical issues.
Primary Components: Knowledge Graph, Experience Center, Copilot, Operator App
Q1: Who needs a license (Ability to provision and give access)?
Why it matters: Field techs need instant visibility into provisioning requests to quickly assign licenses to new employees, contractors, or employees changing roles. Speed is critical for employee productivity.
Telemetry Sources
| Source | Data Retrieved | API Endpoint | Refresh Frequency |
|---|---|---|---|
| HR System | New hires, role changes, contractor onboarding | HRIS API /employees/changes | Real-time |
| Service Desk | Access request tickets | ServiceNow/Jira /tickets?type=access_request | Real-time |
| IDP (Entra/Okta) | Current license assignments, user status | /users/{id}/licenseDetails | Hourly |
| License Pools | Available licenses by product | Internal license management API | Real-time |
L1 Analytics (Bronze→Silver)
-- Normalize provisioning requests from multiple sources
CREATE TABLE silver.provisioning_queue AS
SELECT
request_id,
pii_id,
employee_name,
employee_email,
department_name,
role_name,
manager_name,
request_type, -- 'new_hire', 'role_change', 'contractor', 'additional_access'
request_date,
required_software_products, -- JSON array based on role template
priority, -- 'urgent', 'standard', 'low'
requestor_pii_id,
status -- 'pending', 'in_progress', 'completed', 'blocked'
FROM bronze.hr_changes
UNION ALL
SELECT
ticket_id,
user_pii_id,
user_name,
user_email,
department,
role,
manager,
'manual_request',
created_date,
requested_software,
ticket_priority,
requestor_id,
ticket_status
FROM bronze.service_desk_tickets
WHERE ticket_type = 'software_access_request';
Transformations:
- Map roles to software entitlements via Cerebro Memory (Sales Rep → Salesforce, Slack, Zoom)
- Prioritize based on start date and role urgency
- Deduplicate requests across HR and service desk
- Enrich with manager approval status
L2 Analytics (Silver→Gold)
-- Create actionable provisioning work queue with license availability
CREATE TABLE gold.field_tech_provisioning_queue AS
SELECT
pq.request_id,
pq.pii_id,
pq.employee_name,
pq.employee_email,
pq.role_name,
pq.request_type,
pq.priority,
pq.status,
-- License availability check
sp.software_name,
lp.total_licenses,
lp.assigned_licenses,
lp.available_licenses,
CASE
WHEN lp.available_licenses > 0 THEN 'available'
WHEN lp.available_licenses = 0 AND lp.pending_reclamation > 0 THEN 'reclaim_needed'
ELSE 'purchase_needed'
END as license_status,
-- Assignment readiness
CASE
WHEN pq.status = 'pending' AND lp.available_licenses > 0 THEN 'ready_to_assign'
WHEN pq.status = 'pending' AND lp.available_licenses = 0 THEN 'blocked_no_license'
WHEN pq.status = 'in_progress' THEN 'being_processed'
ELSE 'completed_or_cancelled'
END as assignment_readiness,
-- SLA tracking
DATEDIFF(CURRENT_DATE, pq.request_date) as days_waiting,
CASE
WHEN pq.priority = 'urgent' AND DATEDIFF(CURRENT_DATE, pq.request_date) > 1 THEN TRUE
WHEN pq.priority = 'standard' AND DATEDIFF(CURRENT_DATE, pq.request_date) > 3 THEN TRUE
ELSE FALSE
END as sla_breach
FROM silver.provisioning_queue pq
CROSS JOIN UNNEST(pq.required_software_products) AS sp_id
JOIN silver.software_product sp ON sp_id = sp.software_product_id
JOIN gold.license_pool_status lp ON sp.software_product_id = lp.software_product_id
WHERE pq.status IN ('pending', 'in_progress')
ORDER BY pq.priority DESC, pq.request_date ASC;
Metrics Calculated:
- Active provisioning queue size
- SLA adherence (time to provision)
- Blocked requests (no available licenses)
- Provisioning velocity (requests/day)
Cerebro Enhancement
- Memory: Role-based provisioning templates (Sales Rep always gets Salesforce + Slack + Zoom)
- Intelligence: Predict license needs based on hiring pipeline from HR
- Intelligence: Identify similar employees to suggest additional software
- Reasoning: Auto-provision standard licenses for common roles (one-click provisioning)
- Reasoning: Flag requests requiring manager approval or exceptions
UI Representation
Component: Operator App - Provisioning Queue
Visualization:
┌─────────────────────────────────────────────┐
│ 📱 Provisioning Queue [Refresh] 🔄 │
├─────────────────────────────────────────────┤
│ │
│ 🔴 URGENT (2) │
│ ┌──────────────────────────────────────┐ │
│ │ Sarah Johnson - New Hire │ │
│ │ Sales Representative │ │
│ │ Start: Today │ │
│ │ │ │
│ │ ✓ Salesforce (Ready) │ │
│ │ ✓ Slack (Ready) │ │
│ │ ⚠️ Adobe CC (0 available) │ │
│ │ │ │
│ │ [Provision Available] [Request Adobe] │ │
│ └──────────────────────────────────────┘ │
│ │
│ 🟡 STANDARD (5) │
│ ┌──────────────────────────────────────┐ │
│ │ Mike Chen - Role Change │ │
│ │ Engineer → Senior Engineer │ │
│ │ Waiting: 2 days │ │
│ │ │ │
│ │ ✓ GitHub Enterprise (Ready) │ │
│ │ ✓ IntelliJ IDEA (Ready) │ │
│ │ │ │
│ │ [Quick Provision] │ │
│ └─── ───────────────────────────────────┘ │
│ │
│ [+4 More Standard Requests] │
│ │
│ 🟢 LOW PRIORITY (3) │
│ │
│ ────────────────────────────────────── │
│ 📊 Today: 8 completed | 2 blocked │
│ ⏱️ Avg provision time: 12 minutes │
└─────────────────────────────────────────────┘
Interactions:
- Tap request card → View full employee details and required software
- Tap "Provision Available" → Assign all ready licenses with one tap
- Tap "Request Adobe" → Escalate to license procurement
- Swipe right on request → Mark as in-progress
- Swipe left on request → View similar role assignments
- Scan employee badge → Auto-load their provisioning request
Copilot Query Example:
"Who needs licenses today?"
Answer: "You have 2 urgent requests: Sarah Johnson (Sales Rep, starting today) needs Salesforce, Slack, and Adobe CC. Adobe has 0 available licenses - reclamation needed. Mike Chen (role change to Senior Engineer) needs GitHub Enterprise and IntelliJ - both ready to assign."
Q2: Which licenses I have to take away (terminated, intern, retired)?
Why it matters: Field techs must quickly reclaim licenses from departing employees to maintain security and free up licenses for reassignment. Immediate deprovisioning prevents unauthorized access.
Telemetry Sources
| Source | Data Retrieved | API Endpoint | Refresh Frequency |
|---|---|---|---|
| HR System | Terminations, retirements, intern end dates | HRIS API /employees/separations | Real-time |
| IDP (Entra/Okta) | Current license assignments, account status | /users/{id}/licenseDetails | Hourly |
| UEM (Intune) | Device return status, wipe status | Device management API | Hourly |
| License Usage | Last activity date per license | Usage telemetry aggregation | Daily |
L1 Analytics (Bronze→Silver)
-- Identify employees requiring license reclamation
CREATE TABLE silver.reclamation_queue AS
SELECT
p.pii_id,
p.employee_name,
p.employee_email,
p.employment_status, -- 'terminated', 'retired', 'intern_ended', 'leave_of_absence'
p.separation_date,
p.last_day_worked,
p.department_name,
p.manager_name,
DATEDIFF(CURRENT_DATE, p.separation_date) as days_since_separation,
-- License assignments
la.software_license_id,
sp.software_name,
sp.vendor_name,
sl.unit_cost as license_value,
la.assignment_date,
-- Usage context
sue.last_usage_date,
DATEDIFF(CURRENT_DATE, sue.last_usage_date) as days_since_last_use,
-- Account status
ud.account_status, -- 'active', 'disabled', 'deleted'
ud.account_disabled_date,
-- Reclamation status
CASE
WHEN la.software_license_id IS NULL THEN 'no_licenses'
WHEN ud.account_status = 'deleted' AND la.software_license_id IS NOT NULL THEN 'orphaned_license'
WHEN ud.account_status = 'disabled' AND la.software_license_id IS NOT NULL THEN 'ready_to_reclaim'
WHEN ud.account_status = 'active' AND p.employment_status != 'active' THEN 'urgent_reclaim'
ELSE 'reclaimed'
END as reclamation_status
FROM silver.pii p
LEFT JOIN silver.license_assignment la ON p.pii_id = la.pii_id
LEFT JOIN silver.software_license sl ON la.software_license_id = sl.software_license_id
LEFT JOIN silver.software_product sp ON sl.software_product_id = sp.software_product_id
LEFT JOIN silver.software_usage_events sue ON p.pii_id = sue.pii_id AND sp.software_product_id = sue.software_product_id
LEFT JOIN silver.user_directory ud ON p.pii_id = ud.pii_id
WHERE p.employment_status IN ('terminated', 'retired', 'intern_ended', 'leave_of_absence')
AND p.separation_date >= CURRENT_DATE - INTERVAL '90 days';
Transformations:
- Flag high-value licenses for priority reclamation
- Identify accounts still active after termination (security risk)
- Cross-reference with device return status
- Calculate total license value to reclaim per person
L2 Analytics (Silver→Gold)
-- Create prioritized reclamation work queue
CREATE TABLE gold.field_tech_reclamation_queue AS
SELECT
rq.pii_id,
rq.employee_name,
rq.employment_status,
rq.separation_date,
rq.days_since_separation,
rq.reclamation_status,
-- Aggregate license information
COUNT(rq.software_license_id) as total_licenses,
SUM(rq.license_value) as total_license_value,
ARRAY_AGG(rq.software_name ORDER BY rq.license_value DESC) as software_list,
-- Priority calculation
CASE
WHEN rq.reclamation_status = 'urgent_reclaim' THEN 'critical' -- Still has active account
WHEN rq.employment_status = 'terminated' AND rq.days_since_separation > 7 THEN 'high'
WHEN SUM(rq.license_value) > 1000 THEN 'high' -- High-value licenses
WHEN rq.days_since_separation > 30 THEN 'medium'
ELSE 'low'
END as reclamation_priority,
-- Blocker detection
CASE
WHEN rq.account_status = 'active' THEN 'account_still_active'
WHEN dm.device_returned = FALSE THEN 'device_not_returned'
ELSE 'ready'
END as blocker_status,
-- Manager notification
rq.manager_name,
rq.manager_name as handoff_contact
FROM silver.reclamation_queue rq
LEFT JOIN silver.device_management dm ON rq.pii_id = dm.pii_id
WHERE rq.reclamation_status IN ('ready_to_reclaim', 'urgent_reclaim', 'orphaned_license')
GROUP BY rq.pii_id, rq.employee_name, rq.employment_status, rq.separation_date,
rq.days_since_separation, rq.reclamation_status, rq.manager_name, rq.account_status, dm.device_returned
ORDER BY
CASE WHEN reclamation_priority = 'critical' THEN 1
WHEN reclamation_priority = 'high' THEN 2
WHEN reclamation_priority = 'medium' THEN 3
ELSE 4 END,
rq.days_since_separation DESC;
Metrics Calculated:
- Total licenses to reclaim
- Total license value to reclaim
- Reclamation velocity (licenses/day)
- Average time to reclaim after separation
- Security risk (active accounts post-termination)
Cerebro Enhancement
- Memory: Typical license assignments per role (to validate completeness)
- Intelligence: Detect missed licenses not yet reclaimed
- Intelligence: Identify high-value licenses for priority reclamation
- Reasoning: Auto-generate reclamation checklists per employee
- Reasoning: Predict license reclamation needs based on HR pipeline (upcoming terminations)
UI Representation
Component: Operator App - Reclamation Queue
Visualization:
┌─────────────────────────────────────────────┐
│ 📱 License Reclamation [Refresh] 🔄 │
├─────────────────────────────────────────────┤
│ │
│ 🔴 CRITICAL (3) │
│ ┌──────────────────────────────────────┐ │
│ │ ⚠️ John Smith - SECURITY RISK │ │