Skip to main content Enter
ERP.AI Field Service Management

Field Service Management

Start now
Pricing Frequently asked questions Get started
Build with Proto

Modules

Dispatch and schedulingMatch each service visit to qualified people and a feasible customer window. Routes and mobile workGive technicians the route, job context and work history they need in the field. Parts and truck stockKeep field consumption, replenishment and inventory corrections connected.
Estimates and signaturesAgree additional work and retain the exact scope the customer accepted. Billing and paymentsTurn accepted service work into reconciled invoices and confirmed collections. Service contracts and follow-upKeep recurring visits, service history and customer feedback connected.

Field Service Management

Start now
Pricing Frequently asked questions Get started
Build with Proto

Processes

Request to dispatchAccept a service request and commit a feasible assignment. Extra work to signed completionApprove additional scope and close the visit with the right evidence.
Parts consumption to replenishmentPost material usage and replenish the right truck with an auditable stock trail. Completed visit to reconciled billingCreate one invoice handoff and match confirmed payment outcomes.

Field Service Management

Start now
Pricing Frequently asked questions Get started
Build with Proto

Industries

HVAC and refrigeration servicePlan qualified visits, recurring maintenance and equipment repair work. Property maintenance serviceCoordinate customer sites, access instructions and repeat service commitments.
Electrical and appliance serviceBring dispatch, on-site diagnosis and billing into a connected service workflow.

Field Service Management

Start now
Pricing Frequently asked questions Get started
Build with Proto

Reference

Roles and permissionsGive dispatch, field staff and the back office their own clear responsibilities. Reports and analyticsReview accepted service outcomes, utilization, materials and reconciliation. Data modelConnect service locations, accepted visits, posted stock and billing receipts.
IntegrationsConnect helpdesk, routes, payments, AR, inventory and customer feedback. ImplementationConfigure the service operation around its real appointments and controls. Agent referenceUse Proto to configure dispatch, mobile work, stock and billing controls.

Field Service Management

Start now
Pricing Frequently asked questions Get started
Build with Proto
All systems
Modules
Dispatch and schedulingMatch each service visit to qualified people and a feasible customer window.Routes and mobile workGive technicians the route, job context and work history they need in the field.Parts and truck stockKeep field consumption, replenishment and inventory corrections connected.Estimates and signaturesAgree additional work and retain the exact scope the customer accepted.Billing and paymentsTurn accepted service work into reconciled invoices and confirmed collections.Service contracts and follow-upKeep recurring visits, service history and customer feedback connected.
Processes
Request to dispatchAccept a service request and commit a feasible assignment.Extra work to signed completionApprove additional scope and close the visit with the right evidence.Parts consumption to replenishmentPost material usage and replenish the right truck with an auditable stock trail.Completed visit to reconciled billingCreate one invoice handoff and match confirmed payment outcomes.
Industries
HVAC and refrigeration servicePlan qualified visits, recurring maintenance and equipment repair work.Property maintenance serviceCoordinate customer sites, access instructions and repeat service commitments.Electrical and appliance serviceBring dispatch, on-site diagnosis and billing into a connected service workflow.
Reference
Roles and permissionsGive dispatch, field staff and the back office their own clear responsibilities.Reports and analyticsReview accepted service outcomes, utilization, materials and reconciliation.Data modelConnect service locations, accepted visits, posted stock and billing receipts.IntegrationsConnect helpdesk, routes, payments, AR, inventory and customer feedback.ImplementationConfigure the service operation around its real appointments and controls.Agent referenceUse Proto to configure dispatch, mobile work, stock and billing controls.
Sign in
Sign in Start now
Field Service Management References
Data model3 of 6
  • Roles and permissions1 of 6
  • Reports and analytics2 of 6
  • Data model3 of 6
  • Integrations4 of 6
  • Implementation5 of 6
  • Agent reference6 of 6

Data model

Connect service locations, accepted visits, posted stock and billing receipts.

35 tables · 88 relationships

Data model 34 of 35 tables drawn
mastertransactionline itemfinance Technicians.User → Users Crews.Lead → Technicians TruckStock.Technician → Technicians TruckStock.Part → Parts ScheduleSlots.Technician → Technicians CreditPolicies.ServiceCategory → ServiceCategories CreditPolicies.Customer → Customers CreditPolicies.PublishedBy → Users ServiceContracts.Customer → Customers ServiceCalls.Customer → Customers ServiceCalls.ServiceLocation → ServiceLocations ServiceCalls.ServiceCategory → ServiceCategories ServiceCalls.ServiceContract → ServiceContracts ServiceCalls.AssignedTechnician → Technicians ServiceCalls.AssignedCrew → Crews ServiceCalls.AssignedBy → Users ServiceCalls.ContractItem → ServiceContractItems ServiceCalls.CompletionSignature → Signatures ServiceCalls.CreditPolicy → CreditPolicies ServiceCalls.CreditDecisionReceipt → ServiceCallActivities PartsReplenishments.Part → Parts PartsReplenishments.ToTechnician → Technicians PartsReplenishments.CreatedBy → Users Schedules.Technician → Technicians Schedules.Crew → Crews Routes.Technician → Technicians Signatures.ServiceCall → ServiceCalls Signatures.Estimate → Estimates Signatures.CapturedBy → Users Estimates.ServiceCall → ServiceCalls Estimates.Customer → Customers Estimates.ApprovalSignature → Signatures Estimates.CreatedBy → Users Surveys.ServiceCall → ServiceCalls Surveys.Customer → Customers MobileSyncQueue.Technician → Technicians MobileSyncQueue.ServiceCall → ServiceCalls StockMovements.Part → Parts StockMovements.FromTruck → TruckStock StockMovements.ServiceCallPart → ServiceCallParts StockMovements.Replenishment → PartsReplenishments StockMovements.PostedBy → Users ScheduleExceptions.Technician → Technicians ScheduleExceptions.RecordedBy → Users TechnicianAvailabilityDays.Technician → Technicians TechnicianAvailabilityDays.FrozenBy → Users TechnicianSkills.Technician → Technicians ServiceContractItems.ServiceContract → ServiceContracts ServiceContractItems.ServiceCategory → ServiceCategories ServiceContractItems.ServiceLocation → ServiceLocations CrewMembers.Crew → Crews CrewMembers.Technician → Technicians ServiceCallActivities.ServiceCall → ServiceCalls ServiceCallActivities.ChangedBy → Users ServiceCallParts.ServiceCall → ServiceCalls ServiceCallParts.Part → Parts ServiceCallParts.FromTruckStock → TruckStock ServiceCallParts.Estimate → Estimates ServiceCallLabor.ServiceCall → ServiceCalls ServiceCallLabor.Technician → Technicians ServiceCallLabor.Estimate → Estimates ServiceCallNotes.ServiceCall → ServiceCalls ServiceCallNotes.Author → Users ServiceCallPhotos.ServiceCall → ServiceCalls ServiceCallPhotos.TakenBy → Technicians ServiceLocations.Customer → Customers RouteStops.Route → Routes RouteStops.ServiceCall → ServiceCalls Invoices.ServiceCall → ServiceCalls Invoices.Customer → Customers InvoiceLines.Invoice → Invoices InvoiceLines.SourceServiceCallPart → ServiceCallParts InvoiceLines.SourceServiceCallLabor → ServiceCallLabor Payments.ServiceCall → ServiceCalls Payments.Invoice → Invoices Payments.Customer → Customers Payments.CollectedBy → Technicians TechniciansmasterBadgeNumberStatusUser CrewsmasterLeadCrewNameMemberCount ServiceCategoriesmasterCategoryCodeNameTrade CustomersmasterCustomerNumberNameType PartsmasterPartDescriptionTrade TruckStockmasterTechnicianPartQuantity ScheduleSlotsmasterTechnicianDayOfWeekStartAt UsersmasterUserNumberPrincipalIdDisplayName CreditPoliciesmasterPolicyNumberStatusServiceCategory ServiceContractstransactionContractNumberStatusCustomer ServiceCallstransactionCallNumberStatusCustomer PartsReplenishmentstransactionReplenishmentNumberStatusExternalStatus SchedulestransactionTechnicianCrewScheduleDate RoutestransactionRouteNumberStatusTechnician SignaturestransactionSignatureNumberServiceCallEstimate EstimatestransactionEstimateNumberStatusServiceCall SurveystransactionSurveyNumberStatusServiceCall MobileSyncQueuetransactionQueueNumberStatusTechnician StockMovementstransactionMovementNumberStatusPart ScheduleExceptionstransactionExceptionNumberStatusTechnician TechnicianAvailabilityDaystransactionAvailabilityNumberStatusTechnician TechnicianSkillslineCertificationNumberTechnicianSkill ServiceContractItemslineServiceContractServiceCategoryServiceLocation CrewMemberslineCrewTechnicianRoleOnCrew ServiceCallActivitieslineServiceCallChangedByEventType ServiceCallPartslineStatusServiceCallPart ServiceCallLaborlineServiceCallTechnicianEstimate ServiceCallNoteslineServiceCallAuthorBody ServiceCallPhotoslineServiceCallTakenByPhase ServiceLocationslineCustomerLocationNameAddressLine1 RouteStopslineRouteServiceCallStopOrder InvoicestransactionInvoiceNumberStatusSyncStatus InvoiceLineslineInvoiceSourceServiceCallPartSourceServiceCallLabor PaymentstransactionPaymentNumberStatusServiceCall
Data model34 of 35 tables, within two hops of ServiceCalls

How the model is organised

People and capacity

Users, Technicians, TechnicianSkills, Crews, CrewMembers, Schedules, ScheduleSlots, ScheduleExceptions, TechnicianAvailabilityDays. Map real principals and participating technicians to usable working time.

  • Users
  • Technicians
  • TechnicianSkills
  • Crews
  • CrewMembers
  • Schedules
  • ScheduleSlots
  • ScheduleExceptions
  • TechnicianAvailabilityDays

Customers and agreements

Customers, ServiceLocations, ServiceCategories, ServiceContracts, ServiceContractItems, CreditPolicies. Keep customer locations, service obligations and versioned credit terms connected.

  • Customers
  • ServiceLocations
  • ServiceCategories
  • ServiceContracts
  • ServiceContractItems
  • CreditPolicies

Visits and mobile work

ServiceCalls, ServiceCallActivities, ServiceCallLabor, ServiceCallNotes, ServiceCallPhotos, Routes, RouteStops, MobileSyncQueue. Retain accepted appointments, field evidence and original synchronization identities.

  • ServiceCalls
  • ServiceCallActivities
  • ServiceCallLabor
  • ServiceCallNotes
  • ServiceCallPhotos
  • Routes
  • RouteStops
  • MobileSyncQueue

Parts and inventory

Parts, TruckStock, WarehouseStock, ServiceCallParts, StockMovements, PartsReplenishments. Trace each draw, replenishment and compensating return to the exact stock source.

  • Parts
  • TruckStock
  • WarehouseStock
  • ServiceCallParts
  • StockMovements
  • PartsReplenishments

Commercial evidence

Estimates, Signatures, Invoices, InvoiceLines, Payments, Surveys. Connect exact customer-authorized scope to invoices, confirmed collection and actual feedback.

  • Estimates
  • Signatures
  • Invoices
  • InvoiceLines
  • Payments
  • Surveys

Keys and references

Use unique source, occurrence, device and connector command identities. Customer/location/call ownership must agree across references. Preserve exact signed revisions and immutable posted movements; never use a display name as an authorization key.

Migration order

  1. 1 Map Users, Technicians, skills, crews and service categories.
  2. 2 Load customer locations, access controls, contracts and item recurrence.
  3. 3 Configure working slots, dated unavailability, parts and the single inventory ownership mode.
  4. 4 Load validated open calls, accepted assignments and opening stock evidence.
  5. 5 Configure estimate/signature and versioned credit policy, payment requests, AR mapping and survey connection.
  6. 6 Reconcile test visits, denied actions, mobile conflicts, stock reversals and billing acknowledgements before release.

Tables

35 tables
TechniciansThe field-tech master. Every dispatched-and-on-site human is onemaster
FieldTypeRequiredDetails
TechtextyesTech ID, e.g. T-1042
FullNametextyes
EmployeeReftextHRIS Employee number
MobilePhonetextyesUS 10-digit; used for 10DLC SMS to Tech
BadgeNumbertextOn-site ID badge
Emailtextyes
StatusselectyesActive, OnLeave, Inactive
HomeBaseLocationtextWarehouse / depot the truck returns to
ServiceAreatextZIP-code list or metro tag
HireDatedate
HourlyBillableRatecurrencyUSD; used by ServiceCallLabor default
Activetoggleyes
Userreferenceyes→ Users; unique mapping to Technician or Crew Lead principal
TimeZonetextyesIANA scheduling time zone; weekly working slots and technician day boundaries resolve to UTC instants in this zone
TechnicianSkillsPer-Tech skills and certifications with expiry. The Line item of Technicians.line item
FieldTypeRequiredDetails
Technicianreferenceyes→ Technicians
SkillselectyesHVAC, HVAC-Refrigerant-EPA, Electrical, Electrical-HighVoltage, Plumbing, Plumbing-Gas, Refrigeration, Appliance, Boiler, SolarPV, Other
RatingselectApprentice, Journeyman, Master
CertificationNumbertext
IssuedAtdate
ExpiresAtdateAuto-drops from eligibility once past
Activetoggleyes
CrewsMulti-tech crew for jobs that need more than one body — installmaster
FieldTypeRequiredDetails
CrewNametextyes
Leadreferenceyes→ Technicians
MemberCountformulayesfx: COUNT_DISTINCT(CrewMembers.Technician where Crew=this AND Active=true AND EffectiveFrom <= now AND (EffectiveTo IS NULL OR EffectiveTo > now))
ServiceAreatext
Activetoggleyes
CrewMembersThe roster of techs in a crew. A Tech can be in more than one crew Line item of Crews.line item
FieldTypeRequiredDetails
Crewreferenceyes→ Crews
Technicianreferenceyes→ Technicians
RoleOnCrewselectLead, Helper, Apprentice
Activetoggleyes
EffectiveFromdatetimeyesInclusive membership start; history referenced by accepted assignments cannot be deleted
EffectiveTodatetimeExclusive membership end; empty means open-ended. A crew assignment requires membership covering its full scheduled interval
ServiceCategoriesThe service taxonomy the dispatcher and the customer pick from.master
FieldTypeRequiredDetails
CategoryCodetextyes
Nametextyese.g. HVAC-Repair, HVAC-Maintenance, Electrical-Service, Plumbing-Emergency
TradeselectyesHVAC, Electrical, Plumbing, Refrigeration, Appliance, Other
DefaultDurationMinutesnumberyesUsed by ScheduleSlots and route ETA
RequiredSkillstextyesComma-separated skill tags; matched against TechnicianSkills.Skill
DefaultPriorityselectyesLow, Medium, High, Emergency
BillableRateOverridecurrencyIf set, overrides Tech.HourlyBillableRate
RequiresPaymentOnCompletiontoggleyesDrives the on-site payment flow
Activetoggleyes
CrewLeadApprovalLimitcurrencyyesUSD; effective configuration copied to each submitted estimate; zero routes all decisions to Operations Manager
RequiredPhotoPhasestextConfigured Before, During or After evidence required before completion
CustomersThe account a service is rendered to. May be a residentialmaster
FieldTypeRequiredDetails
CustomerNumbertextyes
Nametextyes
TypeselectyesResidential, Commercial, Property-Manager, Government
ContactPhonetextyesUS 10-digit
ContactEmailtextyes
BillingAddressLine1text
BillingCitytext
BillingStateselectUS state, two-letter
BillingZiptextUS 5-digit (or ZIP+4)
TCPAOptInForSMStoggleyesRequired before any 10DLC SMS to this customer
TCPAOptInAtdatetimeEvidence time for the recorded SMS permission; revocation clears send eligibility without deleting history
AccessNotestextGate code, dog-on-property, side-entrance — masked except to assigned Tech
Activetoggleyes
ServiceLocationsThe physical site the Tech is going to. A Customer can have many Line item of Customers.line item
FieldTypeRequiredDetails
Customerreferenceyes→ Customers
LocationNametextyes"Main Office", "Unit B", "Roof of 4th & Main"
AddressLine1textyes
AddressLine2text
Citytextyes
StateselectyesUS state, two-letter
ZiptextyesUS 5-digit
LatitudenumberGeocoded; used by route-planning
Longitudenumber
AccessNotestextSite-specific gate code, key location
Activetoggleyes
TimeZonetextyesIANA time zone used for customer windows, recurrence and route dates
ServiceContractsRecurring service contracts — an HVAC tune-up twice a year, atransaction
FieldTypeRequiredDetails
ContractNumbertextyes
Customerreferenceyes→ Customers
ContractTermStartdateyes
ContractTermEnddateyes
FrequencyselectyesMonthly, Quarterly, SemiAnnual, Annual
NextScheduledAtdateyesWhen the next ServiceCall auto-generates
ContractValuecurrencyyesUSD, total annualized
BillingFrequencyselectyesUpFront, Monthly, Quarterly, PerVisit
StatusselectyesDraft, Active, Suspended, Cancelled, Expired
RevisionnumberyesSchedule changes version future uncreated occurrences; created calls retain their original obligation
ServiceContractItemsThe included services per contract. The cadence engine reads these Line item of ServiceContracts.line item
FieldTypeRequiredDetails
ServiceContractreferenceyes→ ServiceContracts
ServiceCategoryreferenceyes→ ServiceCategories
ServiceLocationreferenceyes→ ServiceLocations
VisitsPerYearnumberyes
IncludedDurationMinutesnumberPast which billable-time kicks in
Notestext
NextDueDatedateyesNext service obligation for this item; recurrence uses the customer location time zone
ServiceDaystextExplicit annual calendar for irregular VisitsPerYear; required when not implied by contract Frequency
ServiceCallsOne on-site visit with a committed assignment, customer window and completion receipt. Created → Scheduled → Dispatched → EnRoute → OnSite → Completed is the successful path. Cancelled and Rescheduled are controlled exception branches before completion, not transitions after a completed signed visit.transaction
FieldTypeRequiredDetails
CallNumbertextyes
Customerreferenceyes→ Customers
ServiceLocationreferenceyes→ ServiceLocations
ServiceCategoryreferenceyes→ ServiceCategories
SourceselectyesHelpdeskTicket, CustomerWebform, Phone, ServiceContract, RecallVisit, Manual
HelpdeskTicketNumbertextSet when Source=HelpdeskTicket; the originating Ticket
ServiceContractreference→ ServiceContracts (set when Source=ServiceContract)
PriorityselectyesLow, Medium, High, Emergency
StatusselectyesCreated, Scheduled, Dispatched, EnRoute, OnSite, Completed, Cancelled, Rescheduled
RequestedAtdatetimeyesWhen the customer asked
RequestedWindowStartdatetimeCustomer's preferred earliest
RequestedWindowEnddatetimeCustomer's preferred latest
ScheduledStartdatetimeCommitted by Dispatcher after eligibility and overlap checks
EstimatedDurationMinutesnumberyesDefaulted from ServiceCategory.DefaultDurationMinutes
AssignedTechnicianreference→ Technicians (null if Crew assigned)
AssignedCrewreference→ Crews (null if single Tech)
ArrivedAtdatetimeStamped on EnRoute → OnSite
CompletedAtdatetimeStamped on OnSite → Completed
CancelledAtdatetime
CancelReasonselectCustomerCancelled, NoAccess, NoPartsAvailable, WeatherDelay, TechUnavailable, Duplicate, Other
ResolutionSummarytextWhat got fixed, in plain English
InvoiceGeneratedAtdatetimeSet by invoice-generation-from-completed-call
RevisionnumberyesServer incremented on each accepted state, assignment or scope change
ScheduledEnddatetimeScheduledStart plus accepted duration; include configured travel buffers when checking resource conflicts
AssignedByreference→ Users; dispatcher who committed the current assignment
SourceRequestKeytextyesUnique per source connector and source event or recurring occurrence
ContractItemreference→ ServiceContractItems; required for generated contract visits
OccurrenceDueDatedateContract-item occurrence date; unique with ContractItem
OriginalCallreference→ ServiceCalls; required for RecallVisit or a replacement after Rescheduled
CompletionSignaturereference→ Signatures; exact current call and completion scope
AssignedMembersSnapshotlongtextServer-written unique Technician IDs selected at accepted assignment revision, including every crew member; required when scheduled. Preserve prior snapshots in ServiceCallActivities; later roster edits do not rewrite accepted capacity history
CreditPolicyreference→ CreditPolicies; exact published revision selected by server for this call
CreditDecisionselectyesNotRequested, Pending, Approved, Declined, Invalidated
CreditRequestedByreference→ Users; assigned Technician or Crew Lead; required after a request
CreditRequestedAtdatetimeServer credit request time
CreditApprovedByreference→ Users; Operations Manager, different from requester and CreditPolicy.PublishedBy; only set by a successful decision
CreditApprovedAtdatetimeServer decision time; present only for Approved current decision
CreditCallRevisionnumberExact call revision approved; immutable completion-only transition may consume this revision without invalidation
CreditUnpaidAmountcurrencyUSD positive outstanding amount authorized after verified net captures; frozen with signed completion scope
CreditDecisionReceiptreference→ ServiceCallActivities; immutable CreditApproved event containing policy ID/version/hash/full terms, call revision, completion-signature hash, unpaid amount, currency, requester, independent approver and decision time
ServiceCallActivitiesImmutable audit of every status transition and assignment change Line item of ServiceCalls.line item
FieldTypeRequiredDetails
ServiceCallreferenceyes→ ServiceCalls
EventTypeselectyesStatusChange, TechAssigned, TechReassigned, CrewAssigned, Rescheduled, Cancelled, Reopened, NoteAdded, CreditRequested, CreditApproved, CreditDeclined, CreditInvalidated
OldValuetext
NewValuetext
ChangedByreferenceyes→ Users; server actor, including an explicitly configured service principal
ChangedAtdatetimeyes
ServiceCallPartsPosted parts consumed on an assigned call, with immutable cost/price snapshots and an atomic StockMovements posting. A draft mobile event is not a posted consumption record. Linked reversals compensate stock and trigger billing reconciliation. Line item of ServiceCalls.line item
FieldTypeRequiredDetails
ServiceCallreferenceyes→ ServiceCalls
Partreferenceyes→ Parts
QuantitynumberyesPositive quantity for an original draw or its full compensating reversal; reversal preserves original part, call and price/cost snapshots
FromTruckStockreference→ TruckStock (the row this drew from)
UnitCostcurrencyyesUSD; snapshot of Parts.Cost at time of use
UnitPricecurrencyyesUSD; snapshot of Parts.Price at time of use
LineTotalformulayesfx: IF(ReversalOf IS NULL, 1, -1) * Quantity * UnitPrice; include both original and reversal for net usage/billing reconciliation, even when the original Status is Reversed
AddedAtdatetimeyes
CommandKeytextyesUnique client event or server operation key
StatusselectyesPosted, Reversed
ReversalOfreference→ ServiceCallParts; a reversal creates a linked immutable compensating row
Estimatereference→ Estimates; approved exact scope required for additional work
ServiceCallLaborLabor entries — one per Tech per session on the call. The Line item of ServiceCalls.line item
FieldTypeRequiredDetails
ServiceCallreferenceyes→ ServiceCalls
Technicianreferenceyes→ Technicians
StartAtdatetimeyes
EndAtdatetimeNull while clock is open
Hoursformulayesfx: (EndAt − StartAt) in hours
BillableRatecurrencyyesUSD; defaulted from Tech or Category override
LineTotalformulayesfx: Hours × BillableRate
CommandKeytextyesUnique labor-session start/end command identity
Estimatereference→ Estimates; approved exact scope required for additional work
ServiceCallNotesFree-form notes — Tech observations, dispatcher dispatch instructions, Line item of ServiceCalls.line item
FieldTypeRequiredDetails
ServiceCallreferenceyes→ ServiceCalls
Authorreferenceyes→ Users; authenticated author with access to this call
Bodytextyes
VisibilityselectyesInternal, OnReceipt, OnInvoice
CreatedAtdatetimeyes
ServiceCallPhotosBefore / during / after photos — the dispute-killer. Required by Line item of ServiceCalls.line item
FieldTypeRequiredDetails
ServiceCallreferenceyes→ ServiceCalls
PhaseselectyesBefore, During, After
FileNametextyes
StorageURLtextyes
Captiontext
TakenByreferenceyes→ Technicians
TakenAtdatetimeyes
PartsThe parts-and-materials catalog carries current approved warehouse cost and customer price. Changes retain an audit record; historical ServiceCallParts and billing revisions preserve the exact accepted price snapshot.master
FieldTypeRequiredDetails
ParttextyesSKU
Descriptiontextyes
TradeselectHVAC, Electrical, Plumbing, Refrigeration, Appliance, Other
UnitOfMeasureselectyesEach, Foot, Pound, Gallon, Box
CostcurrencyyesUSD; landed cost into warehouse
PricecurrencyyesUSD; billable price to customer
MinReordernumberyesWarehouse-level reorder threshold
TruckMinPerTechnumberIf set, every Tech's TruckStock should hold at least this many
Activetoggleyes
TruckStockPer-Technician parts inventory on the truck. The most-frequentlymaster
FieldTypeRequiredDetails
Technicianreferenceyes→ Technicians
Partreferenceyes→ Parts
QuantitynumberyesSigned StockMovements sum for this exact stock row: incoming Quantity minus outgoing Quantity across both Posted and Reversed rows, including original and compensating rows; nonnegative
LastReplenishedAtdate
LastCountedAtdateSet on physical truck count
BelowMinimumformulayesfx: Quantity < Parts.TruckMinPerTech
WarehouseStockCentral warehouse parts inventory. The source for replenishmentmaster
FieldTypeRequiredDetails
Partreferenceyes→ Parts
WarehousetextyesWarehouse / depot name
QuantitynumberyesLocal mode: incoming Quantity minus outgoing Quantity across both Posted and Reversed StockMovements for this row. External mode: correlated acknowledged balance only; never both ledgers
LastCountedAtdate
BelowMinimumformulayesfx: Quantity < Parts.MinReorder
PartsReplenishmentsInventory requests prepared by the Inventory Clerk and independently approved by Operations Manager. Warehouse-to-truck moves progress through Approved, Picked and Loaded; procurement requests remain Sent until acknowledged. Posted stock is corrected by linked compensating movements.transaction
FieldTypeRequiredDetails
ReplenishmentNumbertextyes
TypeselectyesWarehouseToTruck, WarehouseToSupplier
Partreferenceyes→ Parts
Quantitynumberyes
FromWarehousetextSet on WarehouseToTruck
ToTechnicianreference→ Technicians (set on WarehouseToTruck)
ToSuppliertextSet on WarehouseToSupplier
StatusselectyesSuggested, Approved, Picked, Loaded, Sent, Completed, Cancelled
RequestedAtdateyes
CompletedAtdate
CreatedByreferenceyes→ Users; source request actor
ApprovedByreference→ Users; Operations Manager, different from CreatedBy
ApprovedAtdatetimeRequired only when Status IN (Approved, Picked, Loaded, Sent, Completed)
RevisionnumberyesExact quantity/source/destination version approved
CommandKeytextyesUnique replenishment intent; retries reuse it
ExternalStatusselectyesNotRequested, Pending, Succeeded, Failed, Unknown
ExternalReftextAcknowledged procurement or external inventory request identity
SchedulesDaily / weekly schedule view header. One per Day per Technician (ortransaction
FieldTypeRequiredDetails
ScheduleDatedateyes
Technicianreference→ Technicians (null if Crew schedule)
Crewreference→ Crews (null if individual schedule)
TotalCallsformulayesfx: COUNT_DISTINCT(ScheduleCalls(this)); helper scope and day-overlap rules are defined in Scheduling calculations below
ScheduledMinutesformulayesfx: SUM_UNION_MINUTES(PlannedIntervals(this)); person-minutes, per-technician interval union clipped to this schedule day
AvailableMinutesformulafx: IF(schedule day is closed, FrozenAvailabilityMinutes(this), SUM_UNION_MINUTES(AvailableIntervals(this))); exact people/day basis; missing required historical snapshot yields NULL and an incomplete-basis exception
UtilizationPercentformulafx: IF(AvailableMinutes IS NOT NULL AND AvailableMinutes > 0, 100 * ScheduledMinutes / AvailableMinutes, NULL); planned ratio, distinct from the actual closed-labor Tech Utilization report
TimeZonetextyesIANA zone defining this ScheduleDate. Individual schedule uses Technician.TimeZone; crew schedule uses the configured dispatch zone shown to its dispatcher
ScheduleSlotsPer-Technician time-slot configuration — when each tech ismaster
FieldTypeRequiredDetails
Technicianreferenceyes→ Technicians
DayOfWeekselectyesMon, Tue, Wed, Thu, Fri, Sat, Sun
StartAttextyesLocal time, HH:MM
EndAttextyesLocal time, HH:MM
MaxCallsnumberyes
AcceptsEmergencytoggleyesTrue if this slot is eligible for Priority=Emergency calls
Activetoggleyes
RoutesPer-Tech daily route header. Generated by `route-planning`transaction
FieldTypeRequiredDetails
RouteNumbertextyes
Technicianreferenceyes→ Technicians
RouteDatedateyes
StartLocationtextDefaults to Tech.HomeBaseLocation
EndLocationtext
TotalDriveMinutesformulayesfx: SUM(RouteStops.DriveMinutesFromPrevious)
TotalDistanceMilesformulayesfx: SUM(RouteStops.MilesFromPrevious)
StatusselectyesPlanned, Active, Completed, Abandoned
RouteStopsThe ordered stops on a day's route. One per ServiceCall in the Line item of Routes.line item
FieldTypeRequiredDetails
Routereferenceyes→ Routes
StopOrdernumberyes1-based sequence
StopTypeselectyesServiceCall, WarehousePickup, Lunch, EndOfDay
ServiceCallreference→ ServiceCalls (set when StopType=ServiceCall)
ETAArrivaldatetime
ETADeparturedatetime
DriveMinutesFromPreviousnumber
MilesFromPreviousnumber
SignaturesImmutable customer signature receipts bound to an exact displayed document, scope revision and authorized signer. EstimateApproval and CompletionAcknowledgment have separate purposes and cannot substitute for each other.transaction
FieldTypeRequiredDetails
ServiceCallreferenceyes→ ServiceCalls
SignerNametextyesThe person who signed
SignerRoleselectHomeowner, Tenant, PropertyManager, BusinessOwner, AuthorizedAgent
SignedAtdatetimeyes
SignatureImageURLtextyesDocument-store URL
SignedDocumentTypeselectyesWorkAuthorization, CompletionAcknowledgment, EstimateApproval
GeoLatitudenumberCaptured at sign-time for proof
GeoLongitudenumber
SignatureNumbertextyesUnique capture receipt
Estimatereference→ Estimates; required for EstimateApproval
DocumentRevisionnumberyesExact estimate revision or completion scope revision signed
DocumentHashtextyesHash of displayed scope, prices and document content
CapturedByreferenceyes→ Users; authorized capture actor
SignerAuthorityEvidencetextyesRecorded reason the customer signer can authorize this customer/location/scope
InvoicesThe invoice generated from a completed ServiceCall. Header here;transaction
FieldTypeRequiredDetails
InvoiceNumbertextyes
ServiceCallreferenceyes→ ServiceCalls
Customerreferenceyes→ Customers
InvoiceDatedateyes
DueDatedateyes
CurrencyselectyesUSD only
Subtotalformulayesfx: SUM(InvoiceLines.LineTotal); tax is excluded from all line totals
TaxAmountcurrencyUSD; per US state / local rules
TotalAmountformulayesfx: Subtotal + TaxAmount
AmountPaidformulayesfx: SUM(Payments.NetCaptured where Invoice=this); do not count authorizations, unknown captures or refunded amounts
BalanceDueformulayesfx: TotalAmount − AmountPaid
StatusselectyesDraft, Sent, PartiallyPaid, Paid, Void, Disputed
ARSyncedAtdatetimeRequired only when SyncStatus is Succeeded; server verified acknowledgement time
SyncStatusselectyesNotRequested, Pending, Succeeded, Failed, Unknown
SyncRequestKeytextyesUnique call billing revision sent to AR; retries use the same key
ExternalInvoiceReftextVerified AR invoice identity; populated only after acknowledged success
BillingRevisionnumberyesFrozen completion billing snapshot
TaxRuleVersiontextyesEffective configured tax decision reference; never infer a rate from a state abbreviation
InvoiceLinesOne row per ServiceCallParts line and one per ServiceCallLabor Line item of Invoices.line item
FieldTypeRequiredDetails
Invoicereferenceyes→ Invoices
LineTypeselectyesParts, Labor, TripFee, Discount, Other
Descriptiontextyes
Quantitynumberyes
UnitPricecurrencyyesUSD
LineTotalformulayesfx: Quantity × UnitPrice; discounts use signed negative UnitPrice; tax is carried once in Invoices.TaxAmount
SourceServiceCallPartreference→ ServiceCallParts (when LineType=Parts)
SourceServiceCallLaborreference→ ServiceCallLabor (when LineType=Labor)
PaymentsOn-site payment record. Calls into `fin-payments` for processortransaction
FieldTypeRequiredDetails
PaymentNumbertextyes
ServiceCallreferenceyes→ ServiceCalls
Invoicereference→ Invoices
Customerreferenceyes→ Customers
MethodselectyesCard, Check, Cash, ACH
AmountcurrencyyesUSD
ProcessorReftextStripe Terminal / Square charge ID — masked except Admin / Operations Manager
ProcessorNameselectStripeTerminal, SquareInPerson, Manual
StatusselectyesPending, Authorized, Captured, Unknown, Failed, PartiallyRefunded, Refunded, Voided
CollectedByreferenceyes→ Technicians
CollectedAtdatetimeRequired only when Status IN (Captured, PartiallyRefunded, Refunded); never a pending intent timestamp
CommandKeytextyesStable payment request identity; replays never create another charge
RequestedAtdatetimeyesPayment intent creation time
ConfirmedAtdatetimeRequired only when Status IN (Captured, PartiallyRefunded, Refunded); verified processor or approved cash/check receipt
RefundedAmountcurrencyyesUSD; sum of acknowledged refunds, bounded from zero to captured Amount
NetCapturedformulayesfx: captured Amount minus acknowledged RefundedAmount; zero before confirmed capture
EstimatesPre-work quote. Required when a Tech finds work beyond thetransaction
FieldTypeRequiredDetails
EstimateNumbertextyes
ServiceCallreferenceyes→ ServiceCalls
Customerreferenceyes→ Customers
EstimatedAmountcurrencyyesUSD
StatusselectyesDraft, Submitted, InternallyApproved, PresentedToCustomer, Approved, Declined, Expired, Cancelled
PresentedAtdatetime
ApprovedAtdatetime
ApprovalSignaturereference→ Signatures (with SignedDocumentType=EstimateApproval)
ExpiresAtdatetime
RevisionnumberyesIncremented for scope, price or terms changes; prior decisions never apply to a changed revision
ScopelongtextyesExact additional work, quantities, price basis and exclusions presented to the customer
TermslongtextyesExpiry and payment terms shown with the estimate
CreatedByreferenceyes→ Users; originating technician or crew lead
SubmittedAtdatetimeServer submission time
ApprovalLimitSnapshotcurrencyConfigured Crew Lead limit frozen on submission
ReviewedByreference→ Users; eligible Crew Lead or Operations Manager, different from CreatedBy
ReviewedAtdatetimeInternal independent decision time
ApprovedRevisionnumberRevision accepted internally and signed by the customer
SurveysPost-call CSAT trigger. Lightweight mirror of the survey trip; thetransaction
FieldTypeRequiredDetails
ServiceCallreferenceyes→ ServiceCalls
Customerreferenceyes→ Customers
Scorenumber1–5; populated when customer responds
Commenttext
TriggeredAtdatetimeVerified survey provider accepted time
RespondedAtdate
SurveyNumbertextyesUnique completed-call survey intent
StatusselectyesPending, Sent, Responded, Failed, Unknown, Suppressed
RequestKeytextyesUnique completed ServiceCall and survey purpose
RequestedAtdatetimeyesLocal follow-up intent time
MobileSyncQueuePending mobile commands captured while disconnected. Notes, labor, photos and signature captures wait for authenticated server validation and revision checks. Payments remain unconfirmed requests, and server completion is not claimed until all required checks succeed.transaction
FieldTypeRequiredDetails
QueueNumbertextyes
Technicianreferenceyes→ Technicians
ServiceCallreference→ ServiceCalls
EventTypeselectyesStatusChange, PartsAdded, LaborStarted, LaborEnded, PhotoUploaded, SignatureCaptured, PaymentCollected, NoteAdded
PayloadtextyesJSON-serialized event body
QueuedAtdatetimeyes
AppliedAtdatetime
StatusselectyesQueued, Applied, Failed, Discarded
FailureReasontext
DeviceEventKeytextyesUnique authenticated device and event identity; reused for replay
ExpectedCallRevisionnumberyesRevision observed when action was captured
CapturedAtdatetimeyesDevice-observed time retained separately from server acceptance time
ResultReftextOriginal accepted command receipt, stock posting or payment intent identity
UsersLocal mapping of authenticated principals; identity login is owned by ERP.AI. Each mapped user has one local role; immutable actions retain their real actor.master
FieldTypeRequiredDetails
UserNumbertextyesUnique operational principal mapping
PrincipalIdtextyesUnique authenticated identity; never supplied as actor by the client
DisplayNametextyes
RoleselectyesAdmin, Operations Manager, Dispatcher, Technician, Crew Lead, Inventory Clerk, Viewer
ActivebooleanyesInactive users cannot execute commands
StockMovementsImmutable inventory postings for receipts, truck consumption, replenishment and compensating reversals. Balance projections and a posted movement commit atomically in local mode. Reversed originals remain in the signed ledger sum; the linked compensating row supplies the opposite effect.transaction
FieldTypeRequiredDetails
MovementNumbertextyesUnique movement number
CommandKeytextyesUnique operation key; duplicate requests return original result
Partreferenceyes→ Parts
QuantitynumberyesPositive movement quantity
FromWarehousereference→ WarehouseStock
FromTruckreference→ TruckStock
ToWarehousereference→ WarehouseStock
ToTruckreference→ TruckStock
ServiceCallPartreference→ ServiceCallParts; consumption source
Replenishmentreference→ PartsReplenishments; transfer source
ReversalOfreference→ StockMovements; at most one full compensating reversal
StatusselectyesPosted, Reversed; lifecycle label only: both remain included in signed balance aggregation
PostedAtdatetimeyesServer committed time
PostedByreferenceyes→ Users; authenticated authorized operation
SourceEvidenceattachmentVerified accessible authorization receipt required for an opening receipt, count adjustment or reversal; immutable after posting
ScheduleExceptionsAccepted technician unavailability for leave, training and nonworking time. Operations Manager records or cancels these operational intervals; an HR connector may import them only with a scoped service identity and source receipt. This is a scheduling mirror, not HR leave approval.transaction
FieldTypeRequiredDetails
ExceptionNumbertextyesUnique operational exception identity
Technicianreferenceyes→ Technicians
StartAtdatetimeyesInclusive UTC instant
EndAtdatetimeyesExclusive UTC instant after StartAt
ReasonselectyesLeave, Training, Nonworking
StatusselectyesActive, Cancelled
SourceKeytextyesUnique local request or source-system exception/revision key; retries return the accepted interval
SourceEvidencetextyesRetained authorized instruction or acknowledged HR event; excludes private medical details
RecordedByreferenceyes→ Users; authenticated Operations Manager or configured service actor
RecordedAtdatetimeyesServer acceptance time
CreditPoliciesVersioned permission to finish a service visit with an unpaid balance. Admin publishes an exact category/customer policy revision; an independent Operations Manager still approves each call-specific exception. Published terms are immutable, and retiring a policy stops new decisions and prevents consumption of unused approvals; it preserves receipts already used for completed work. This records payment terms rather than a payment or cleared receivable.master
FieldTypeRequiredDetails
PolicyNumbertextyesStable policy identifier; unique with Version
VersionnumberyesPositive integer; a change creates a new revision
ServiceCategoryreferenceyes→ ServiceCategories; exact category scope
Customerreference→ Customers; null covers eligible customers of this category
EffectiveFromdatetimeyesInclusive eligibility start
EffectiveTodatetimeExclusive eligibility end
MaximumUnpaidAmountcurrencyyesUSD; positive per-call unpaid limit
PaymentTermDaysnumberyesNonnegative integer days after completed visit used for the resulting receivable
TermslongtextyesFull customer-facing credit terms
StatusselectyesDraft, Active, Retired
ContentHashtextServer hash of published category/customer, effective dates, limit and terms; required once Active or Retired
PublishedByreference→ Users; authenticated Admin; required once published
PublishedAtdatetimeServer publication time; required once published
TechnicianAvailabilityDaysImmutable available-time basis for each technician and local calendar day, including zero-call and zero-capacity days. The server freezes one row after day close from the accepted scheduling basis; later slot, leave or employment changes cannot rewrite the historical denominator.transaction
FieldTypeRequiredDetails
AvailabilityNumbertextyesUnique Technician and AvailabilityDate identity
Technicianreferenceyes→ Technicians
AvailabilityDatedateyesTechnician-local calendar day; populated even when no call or labor exists
TimeZonetextyesIANA zone frozen for that day; later technician-zone changes do not shift this record
DayStartdatetimeyesInclusive UTC day boundary
DayEnddatetimeyesExclusive next-day boundary
WorkingIntervalslongtextyesServer-validated sorted disjoint UTC intervals from accepted weekly working configuration for this day
UnavailableIntervalslongtextyesUnion of accepted dated leave, training and nonworking intervals clipped to this day
AvailableMinutesnumberyesNonnegative elapsed minutes in WorkingIntervals minus UnavailableIntervals; zero is a recorded value
SourceSnapshotlongtextyesImmutable full working-slot values, technician eligibility effective for the day, exception identities and accepted/cancelled interval state; source IDs alone are insufficient
StatusselectyesFrozen
FrozenAtdatetimeyesServer day-close publication instant
FrozenByreferenceyes→ Users; configured service identity
ERP•AI workspace

Start now Field Service Management

Create your ERP.AI account and get started with Proto.

Start now Download agent
Previous · reference 2 of 6Reports and analyticsNext · reference 4 of 6Integrations

Customize Field Service Management. With Proto, your desktop AI agent.

Ask Proto to help you customize Field Service Management.

Customize
Field Service Management.
Ask: “Adapt Dispatch and scheduling.”
ProtoYour desktop AI agent
Download nowFree install · ~1 GB · AI usage extra
macOSWindowsLinux

Bring your first idea to Proto.

Keep this page open while you install Proto. Connect your account and model, then paste this into a new chat.

AI usage is paid separately. You can edit the prompt before copying.

ERP.AI

Business apps and the Proto desktop agent.

  • Business Apps
  • Proto
  • Workflows
  • Headless SaaS
  • Enterprise
  • Pricing
  • Contact
  • Terms of Service
  • Privacy Policy
  • Cookie Policy
© 2026 ERP•AI. All rights reserved.
System status

Your Privacy, Your Choice

We use essential cookies to run the site and optional cookies for features, analytics, and relevant content. See Cookie policy

Manage Your Cookie Preferences

We use cookies to enhance your experience, analyze site traffic, and serve relevant content. By clicking "Accept All," you agree to our use of cookies. You can customize your preferences at any time.

Learn more about how we use cookies

These cookies are required for the website to function properly. They ensure security, enable basic features like page navigation, and store user session data. You cannot disable these cookies.

These cookies enable additional features that enhance your experience, such as live chat, video playback, personalized content recommendations, and remembering user preferences.

These cookies help us understand how visitors interact with our site by collecting anonymous usage data. This allows us to measure performance, detect issues, and continuously improve the user experience.

These cookies allow us and advertising partners, including X, to deliver ads tailored to your interests. They track browsing habits across sites to provide relevant advertising and measure ad effectiveness.