Skip to main content
L1

Field Tech Questions

← Back to Index

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

SourceData RetrievedAPI EndpointRefresh Frequency
HR SystemNew hires, role changes, contractor onboardingHRIS API /employees/changesReal-time
Service DeskAccess request ticketsServiceNow/Jira /tickets?type=access_requestReal-time
IDP (Entra/Okta)Current license assignments, user status/users/{id}/licenseDetailsHourly
License PoolsAvailable licenses by productInternal license management APIReal-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

SourceData RetrievedAPI EndpointRefresh Frequency
HR SystemTerminations, retirements, intern end datesHRIS API /employees/separationsReal-time
IDP (Entra/Okta)Current license assignments, account status/users/{id}/licenseDetailsHourly
UEM (Intune)Device return status, wipe statusDevice management APIHourly
License UsageLast activity date per licenseUsage telemetry aggregationDaily

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 │ │
│ │ Terminated: 14 days ago │ │
│ │ Account: Still Active! │ │
│ │ │ │
│ │ 💰 $2,340 in licenses │ │
│ │ • Salesforce ($1,200) │ │
│ │ • Adobe CC ($960) │ │
│ │ • Microsoft 365 E5 ($180) │ │
│ │ │ │
│ │ [🚨 Urgent Reclaim] [Contact Manager] │ │
│ └──────────────────────────────────────┘ │
│ │
│ 🟡 HIGH PRIORITY (8) │
│ ┌──────────────────────────────────────┐ │
│ │ Maria Garcia - Retired │ │
│ │ Last day: 30 days ago │ │
│ │ │ │
│ │ 💰 $1,680 in licenses │ │
│ │ • Oracle DB ($1,200) │ │
│ │ • Zoom ($300) │ │
│ │ • Slack ($180) │ │
│ │ │ │
│ │ ✓ Account disabled │ │
│ │ ⚠️ Device not returned │ │
│ │ │ │
│ │ [Reclaim Licenses] [Track Device] │ │
│ └──────────────────────────────────────┘ │
│ │
│ [+7 More High Priority] │
│ │
│ 🟢 STANDARD (12) │
│ │
│ ────────────────────────────────────── │
│ 📊 This week: 23 reclaimed | $18.2K value │
│ ⏱️ Avg reclaim time: 3.2 days │
│ 🎯 23 licenses ready for reassignment │
└─────────────────────────────────────────────┘

Interactions:

  • Tap employee card → View complete license list and reclamation checklist
  • Tap "Urgent Reclaim" → One-tap revoke all licenses and disable account
  • Tap "Contact Manager" → Call or email manager for device return
  • Swipe right → Mark licenses as reclaimed
  • Filter by reclamation priority or employment status
  • Scan employee badge → Auto-load their reclamation checklist

Copilot Query Example:

"Which licenses do I need to reclaim today?"

Answer: "You have 3 critical reclamations: John Smith (terminated 14 days ago, account STILL ACTIVE - security risk!) has $2,340 in licenses including Salesforce and Adobe. Maria Garcia (retired 30 days ago) has $1,680 in licenses ready to reclaim, but her device hasn't been returned yet. Total value to reclaim today: $4,020."


Q3: How many licenses I may have left to give out?

Why it matters: Field techs need instant visibility into license availability to inform users about wait times and make quick provisioning decisions without waiting for approvals.

Telemetry Sources

SourceData RetrievedAPI EndpointRefresh Frequency
ProcurementTotal purchased licenses per productERP/Procurement APIDaily
IDP (Entra/Okta)Assigned licenses/subscribedSkusHourly
License ManagementLicense pool allocations, reservationsInternal license mgmt APIReal-time
Provisioning QueuePending assignmentsService desk + HR onboardingReal-time

L1 Analytics (Bronze→Silver)

-- Calculate real-time license pool availability
CREATE TABLE silver.license_pool_availability AS
SELECT
sl.software_license_id,
sl.software_product_id,
sp.software_name,
sp.vendor_name,
sl.license_type, -- 'named_user', 'concurrent', 'site'
sl.quantity as total_purchased,
-- Current assignments
COUNT(DISTINCT la.pii_id) as currently_assigned,
sl.quantity - COUNT(DISTINCT la.pii_id) as physically_available,
-- Pending commitments
COUNT(DISTINCT pq.pii_id) as pending_assignments,
sl.quantity - COUNT(DISTINCT la.pii_id) - COUNT(DISTINCT pq.pii_id) as truly_available,
-- Reclamation pipeline
COUNT(DISTINCT rq.pii_id) as pending_reclamation,
sl.quantity - COUNT(DISTINCT la.pii_id) - COUNT(DISTINCT pq.pii_id) + COUNT(DISTINCT rq.pii_id) as projected_available,
-- Financial context
sl.unit_cost,
(sl.quantity - COUNT(DISTINCT la.pii_id) - COUNT(DISTINCT pq.pii_id)) * sl.unit_cost as available_license_value,
-- Contract context
sl.end_date,
DATEDIFF(sl.end_date, CURRENT_DATE) as days_until_renewal
FROM silver.software_license sl
JOIN silver.software_product sp ON sl.software_product_id = sp.software_product_id
LEFT JOIN silver.license_assignment la ON sl.software_license_id = la.software_license_id
LEFT JOIN gold.field_tech_provisioning_queue pq ON sp.software_product_id = pq.software_product_id AND pq.status = 'pending'
LEFT JOIN gold.field_tech_reclamation_queue rq ON la.pii_id = rq.pii_id AND rq.reclamation_status IN ('ready_to_reclaim', 'urgent_reclaim')
GROUP BY sl.software_license_id, sl.software_product_id, sp.software_name, sp.vendor_name,
sl.license_type, sl.quantity, sl.unit_cost, sl.end_date;

Transformations:

  • Account for pending assignments (reserved but not yet provisioned)
  • Include reclamation pipeline (will be available soon)
  • Calculate "truly available" vs "physically available"
  • Flag products approaching capacity (>90% assigned)

L2 Analytics (Silver→Gold)

-- Create license pool summary for field tech decision-making
CREATE TABLE gold.license_pool_status AS
SELECT
lpa.software_product_id,
lpa.software_name,
lpa.vendor_name,
lpa.license_type,
-- Availability metrics
SUM(lpa.total_purchased) as total_licenses,
SUM(lpa.currently_assigned) as assigned_licenses,
SUM(lpa.pending_assignments) as pending_licenses,
SUM(lpa.truly_available) as available_licenses,
SUM(lpa.pending_reclamation) as pending_reclamation,
SUM(lpa.projected_available) as projected_available,
-- Utilization
(SUM(lpa.currently_assigned)::FLOAT / NULLIF(SUM(lpa.total_purchased), 0)) * 100 as utilization_percentage,
-- Status classification
CASE
WHEN SUM(lpa.truly_available) > 10 THEN 'abundant'
WHEN SUM(lpa.truly_available) BETWEEN 5 AND 10 THEN 'adequate'
WHEN SUM(lpa.truly_available) BETWEEN 1 AND 4 THEN 'low'
WHEN SUM(lpa.truly_available) = 0 AND SUM(lpa.pending_reclamation) > 0 THEN 'exhausted_reclaim_pending'
ELSE 'exhausted'
END as availability_status,
-- Financial impact
SUM(lpa.available_license_value) as available_pool_value,
AVG(lpa.unit_cost) as avg_unit_cost,
-- Runway calculation
CASE
WHEN AVG(pq_daily.daily_demand) > 0 THEN
SUM(lpa.truly_available) / AVG(pq_daily.daily_demand)
ELSE NULL
END as days_of_supply,
-- Renewal context
MIN(lpa.days_until_renewal) as days_until_renewal
FROM silver.license_pool_availability lpa
LEFT JOIN (
SELECT software_product_id, COUNT(*)::FLOAT / 30 as daily_demand
FROM gold.field_tech_provisioning_queue
WHERE request_date >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY software_product_id
) pq_daily ON lpa.software_product_id = pq_daily.software_product_id
GROUP BY lpa.software_product_id, lpa.software_name, lpa.vendor_name, lpa.license_type
ORDER BY
CASE WHEN availability_status = 'exhausted' THEN 1
WHEN availability_status = 'exhausted_reclaim_pending' THEN 2
WHEN availability_status = 'low' THEN 3
ELSE 4 END,
lpa.software_name;

Metrics Calculated:

  • Available licenses (total - assigned - pending)
  • Projected availability (including reclamation pipeline)
  • Utilization rate (assigned / total)
  • Days of supply (how long until exhausted at current demand)
  • Available pool value ($$$)

Cerebro Enhancement

  • Memory: Historical license demand patterns (seasonal hiring spikes)
  • Intelligence: Predict when pools will be exhausted based on demand trends
  • Intelligence: Identify opportunities to reallocate licenses between products
  • Reasoning: Recommend early license purchases before exhaustion
  • Reasoning: Suggest alternative software when preferred product is exhausted

UI Representation

Component: Operator App - License Availability Dashboard

Visualization:

┌─────────────────────────────────────────────┐
│ 📱 License Availability [Refresh] 🔄 │
├─────────────────────────────────────────────┤
│ Search: [____________] 🔍 │
│ │
│ 🟢 ABUNDANT (15 products) │
│ ┌──────────────────────────────────────┐ │
│ │ Microsoft 365 E3 │ │
│ │ ████████████████░░ 150 / 2,000 │ │
│ │ 1,850 available (92.5% assigned) │ │
│ │ │ │
│ │ 📊 High demand: 12/day │ │
│ │ 🕒 Supply: 154 days │ │
│ └──────────────────────────────────────┘ │
│ │
│ 🟡 LOW (5 products) │
│ ┌──────────────────────────────────────┐ │
│ │ Adobe Creative Cloud │ │
│ │ ████████████████████ 3 / 600 │ │
│ │ 3 available (99.5% assigned) │ │
│ │ │ │
│ │ ⚠️ Critical: Only 3 left! │ │
│ │ 📊 Demand: 8/day │ │
│ │ 🕒 Supply: <1 day ⚠️ │ │
│ │ ♻️ +12 pending reclamation │ │
│ │ │ │
│ │ [Request More] [View Reclamation] │ │
│ └──────────────────────────────────────┘ │
│ │
│ 🔴 EXHAUSTED (2 products) │
│ ┌──────────────────────────────────────┐ │
│ │ Salesforce Sales Cloud │ │
│ │ ████████████████████ 0 / 900 │ │
│ │ 0 available (100% assigned) │ │
│ │ │ │
│ │ ♻️ 8 licenses pending reclamation │ │
│ │ 🕒 Projected: 8 available in 2 days │ │
│ │ │ │
│ │ [Urgent Purchase Request] │ │
│ └──────────────────────────────────────┘ │
│ │
│ ────────────────────────────────────── │
│ 📊 Total Available: 2,143 licenses │
│ 💰 Pool Value: $287,430 │
│ ♻️ Reclamation Pipeline: 89 licenses │
└─────────────────────────────────────────────┘

Interactions:

  • Tap product card → View detailed allocation and assignment history
  • Tap "Request More" → Escalate license purchase request to procurement
  • Tap "View Reclamation" → Jump to reclamation queue for that product
  • Search bar → Quick lookup by product name
  • Pull down → Refresh pool status in real-time
  • Filter by vendor, status, or license type

Copilot Query Example:

"How many Salesforce licenses are available?"

Answer: "Salesforce Sales Cloud has 0 licenses available right now (900/900 assigned, 100% utilization). However, 8 licenses are in the reclamation queue and will be available in approximately 2 days. Current demand is 3 requests/day. You should request additional licenses to avoid blocking provisioning."


Summary: Field Tech Operational Focus

Field Technicians require mobile-optimized, action-oriented interfaces for rapid license provisioning and deprovisioning. Key characteristics:

Core Needs

  • Real-time visibility: License availability, provisioning queue, reclamation status
  • Quick actions: One-tap provisioning, bulk reclamation, emergency access revocation
  • Mobile-first: Optimized for Operator App with barcode scanning, offline capability
  • Security-critical: Immediate deprovisioning for terminated employees

Integration Points

  • HR System: Real-time employee lifecycle events (hires, terminations, role changes)
  • IDP: License assignments, account status, provisioning automation
  • Service Desk: Access request tickets, escalation workflows
  • UEM: Device return status, security compliance

Automation Opportunities

  • Auto-provisioning: Standard licenses for common roles (one-click setup)
  • Auto-reclamation: Triggered by HR termination events
  • Predictive alerts: Low license inventory warnings
  • Role-based templates: Predefined software bundles per job role