# beveren-software-inc/field_service_management architecture

> Architecture diagram of the GitHub repository beveren-software-inc/field_service_management, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/beveren-software-inc/field_service_management
- Repository: https://github.com/beveren-software-inc/field_service_management

## Overview

Beveren FSM is an ERPNext field-service application. Its main lifecycle runs from customer request through optional quotation, service order, appointment and on-site work to invoicing; scheduling, technician dispatch, parts tracking, and reporting support that lifecycle. The React schedule SPA reads service-order tracking data through the Frappe API, while ERPNext forms and documents support operational workflows. The README documents several capabilities whose implementation is not sampled, so those are represented at their existing enclosing directories; wiring is shown only where source or documentation supports it.

Main entry points: [`beveren_fsm/field_service_management/doctype/service_order/service_order.py`](https://github.com/beveren-software-inc/field_service_management/blob/develop/beveren_fsm/field_service_management/doctype/service_order/service_order.py) (Service Order), [`beveren_fsm/field_service_management/doctype/service_appointment/service_appointment.py`](https://github.com/beveren-software-inc/field_service_management/blob/develop/beveren_fsm/field_service_management/doctype/service_appointment/service_appointment.py) (Service Appointment), [`beveren_fsm/field_service_management/doctype/service_request/service_request.py`](https://github.com/beveren-software-inc/field_service_management/blob/develop/beveren_fsm/field_service_management/doctype/service_request/service_request.py) (Service Request), [`beveren_fsm/field_service_management/api/service_appointment.py`](https://github.com/beveren-software-inc/field_service_management/blob/develop/beveren_fsm/field_service_management/api/service_appointment.py) (Appointment API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_operations["Service Operations"]
  node_request["Service Request<br/>[service_request.py]"]
  node_request_api["Request API<br/>[service_request.py]"]
  node_quotation["Service Quotation"]
  node_order["Service Order<br/>[service_order.py]"]
  node_report["Service Reports"]
end

subgraph group_dispatch["Scheduling Dispatch"]
  node_appointment["Service Appointment"]
  node_schedule_api["Appointment API"]
  node_area["Service Area<br/>[service_area.py]"]
  node_geocoding["Geocoding API<br/>[geocoding.py]"]
  node_technicians["Technician Records"]
end

subgraph group_inventory["Parts Tracking"]
  node_parts["Parts Movement"]
  node_repair["Repair Workflow"]
end

subgraph group_frontend["Web Interface"]
  node_schedule_ui["Dispatch Schedule<br/>[schedule.tsx]"]
  node_schedule_views["Schedule Views"]
  node_tracking_ui["Order Tracking"]
  node_tracking_hook["Tracking Fetch"]
end

subgraph group_platform["ERPNext Integration"]
  node_erpnext["ERPNext Sales"]
  node_invoice["Sales Invoice"]
end

node_operator(("Service Operator"))
node_technician(("Field Technician"))

node_operator -->|"logs request"| node_request
node_request -->|"creates optional quote"| node_quotation
node_request -->|"converts to order"| node_order
node_quotation -->|"maps to order"| node_order
node_order -->|"creates appointments"| node_appointment
node_operator -->|"assigns and dispatches"| node_schedule_ui
node_schedule_ui -->|"selects views"| node_schedule_views
node_schedule_ui -->|"requests appointments"| node_schedule_api
node_technician -->|"updates work"| node_appointment
node_schedule_api -->|"reads linked order"| node_order
node_schedule_api -->|"reads location"| node_area
node_area -->|"searches places"| node_geocoding
node_appointment -->|"assigns technicians"| node_technicians
node_appointment -->|"records movements"| node_parts
node_order -->|"tracks parts"| node_parts
node_tracking_ui -->|"fetches tracking"| node_tracking_hook
node_tracking_hook -->|"requests orders"| node_request_api
node_request_api -->|"reads related orders"| node_order
node_order -->|"generates invoice"| node_invoice
node_invoice -->|"creates sales document"| node_erpnext
node_order -.->|"supports repairs"| node_repair
node_order -.->|"reports service work"| node_report

click node_request "https://github.com/beveren-software-inc/field_service_management/blob/develop/beveren_fsm/field_service_management/doctype/service_request/service_request.py"
click node_request_api "https://github.com/beveren-software-inc/field_service_management/blob/develop/beveren_fsm/field_service_management/api/service_request.py"
click node_quotation "https://github.com/beveren-software-inc/field_service_management/blob/develop/beveren_fsm/field_service_management/doctype/service_quotation/service_quotation.py"
click node_order "https://github.com/beveren-software-inc/field_service_management/blob/develop/beveren_fsm/field_service_management/doctype/service_order/service_order.py"
click node_appointment "https://github.com/beveren-software-inc/field_service_management/blob/develop/beveren_fsm/field_service_management/doctype/service_appointment/service_appointment.py"
click node_schedule_api "https://github.com/beveren-software-inc/field_service_management/blob/develop/beveren_fsm/field_service_management/api/service_appointment.py"
click node_schedule_ui "https://github.com/beveren-software-inc/field_service_management/blob/develop/schedule/src/pages/schedule/schedule.tsx"
click node_schedule_views "https://github.com/beveren-software-inc/field_service_management/tree/develop/schedule/src/components/schedule"
click node_tracking_ui "https://github.com/beveren-software-inc/field_service_management/blob/develop/schedule/src/components/service-request/service-requests-view.tsx"
click node_tracking_hook "https://github.com/beveren-software-inc/field_service_management/blob/develop/schedule/src/hooks/use-service-requests.ts"
click node_area "https://github.com/beveren-software-inc/field_service_management/blob/develop/beveren_fsm/field_service_management/doctype/service_area/service_area.py"
click node_geocoding "https://github.com/beveren-software-inc/field_service_management/blob/develop/beveren_fsm/field_service_management/api/geocoding.py"
click node_technicians "https://github.com/beveren-software-inc/field_service_management/tree/develop/beveren_fsm/field_service_management/doctype/service_technician"
click node_parts "https://github.com/beveren-software-inc/field_service_management/blob/develop/beveren_fsm/field_service_management/doctype/product_movement/product_movement.py"
click node_repair "https://github.com/beveren-software-inc/field_service_management/tree/develop/beveren_fsm/field_service_management/doctype/repair_order"
click node_report "https://github.com/beveren-software-inc/field_service_management/tree/develop/beveren_fsm/field_service_management/doctype/service_report"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_request,node_request_api,node_quotation,node_order,node_report toneBlue
class node_appointment,node_schedule_api,node_area,node_geocoding,node_technicians toneAmber
class node_parts,node_repair toneMint
class node_schedule_ui,node_schedule_views,node_tracking_ui,node_tracking_hook toneRose
class node_erpnext,node_invoice,node_operator,node_technician toneIndigo
```

## Components

### Service Operations

- [Service Request](https://github.com/beveren-software-inc/field_service_management/blob/develop/beveren_fsm/field_service_management/doctype/service_request/service_request.py): `beveren_fsm/field_service_management/doctype/service_request/service_request.py`
- [Request API](https://github.com/beveren-software-inc/field_service_management/blob/develop/beveren_fsm/field_service_management/api/service_request.py): `beveren_fsm/field_service_management/api/service_request.py`
- [Service Quotation](https://github.com/beveren-software-inc/field_service_management/blob/develop/beveren_fsm/field_service_management/doctype/service_quotation/service_quotation.py): `beveren_fsm/field_service_management/doctype/service_quotation/service_quotation.py`
- [Service Order](https://github.com/beveren-software-inc/field_service_management/blob/develop/beveren_fsm/field_service_management/doctype/service_order/service_order.py): `beveren_fsm/field_service_management/doctype/service_order/service_order.py`
- [Service Reports](https://github.com/beveren-software-inc/field_service_management/tree/develop/beveren_fsm/field_service_management/doctype/service_report): `beveren_fsm/field_service_management/doctype/service_report`

### Scheduling Dispatch

- [Service Appointment](https://github.com/beveren-software-inc/field_service_management/blob/develop/beveren_fsm/field_service_management/doctype/service_appointment/service_appointment.py): `beveren_fsm/field_service_management/doctype/service_appointment/service_appointment.py`
- [Appointment API](https://github.com/beveren-software-inc/field_service_management/blob/develop/beveren_fsm/field_service_management/api/service_appointment.py): `beveren_fsm/field_service_management/api/service_appointment.py`
- [Service Area](https://github.com/beveren-software-inc/field_service_management/blob/develop/beveren_fsm/field_service_management/doctype/service_area/service_area.py): `beveren_fsm/field_service_management/doctype/service_area/service_area.py`
- [Geocoding API](https://github.com/beveren-software-inc/field_service_management/blob/develop/beveren_fsm/field_service_management/api/geocoding.py): `beveren_fsm/field_service_management/api/geocoding.py`
- [Technician Records](https://github.com/beveren-software-inc/field_service_management/tree/develop/beveren_fsm/field_service_management/doctype/service_technician): `beveren_fsm/field_service_management/doctype/service_technician`

### Parts Tracking

- [Parts Movement](https://github.com/beveren-software-inc/field_service_management/blob/develop/beveren_fsm/field_service_management/doctype/product_movement/product_movement.py): `beveren_fsm/field_service_management/doctype/product_movement/product_movement.py`
- [Repair Workflow](https://github.com/beveren-software-inc/field_service_management/tree/develop/beveren_fsm/field_service_management/doctype/repair_order): `beveren_fsm/field_service_management/doctype/repair_order`

### Web Interface

- [Dispatch Schedule](https://github.com/beveren-software-inc/field_service_management/blob/develop/schedule/src/pages/schedule/schedule.tsx): `schedule/src/pages/schedule/schedule.tsx`
- [Schedule Views](https://github.com/beveren-software-inc/field_service_management/tree/develop/schedule/src/components/schedule): `schedule/src/components/schedule`
- [Order Tracking](https://github.com/beveren-software-inc/field_service_management/blob/develop/schedule/src/components/service-request/service-requests-view.tsx): `schedule/src/components/service-request/service-requests-view.tsx`
- [Tracking Fetch](https://github.com/beveren-software-inc/field_service_management/blob/develop/schedule/src/hooks/use-service-requests.ts): `schedule/src/hooks/use-service-requests.ts`

### ERPNext Integration

- **ERPNext Sales**
- **Sales Invoice**

### Other components

- **Service Operator**
- **Field Technician**

## Connections

- Service Operator → Service Request: logs request
- Service Request → Service Quotation: creates optional quote
- Service Request → Service Order: converts to order
- Service Quotation → Service Order: maps to order
- Service Order → Service Appointment: creates appointments
- Service Operator → Dispatch Schedule: assigns and dispatches
- Dispatch Schedule → Schedule Views: selects views
- Dispatch Schedule → Appointment API: requests appointments
- Field Technician → Service Appointment: updates work
- Appointment API → Service Order: reads linked order
- Appointment API → Service Area: reads location
- Service Area → Geocoding API: searches places
- Service Appointment → Technician Records: assigns technicians
- Service Appointment → Parts Movement: records movements
- Service Order → Parts Movement: tracks parts
- Order Tracking → Tracking Fetch: fetches tracking
- Tracking Fetch → Request API: requests orders
- Request API → Service Order: reads related orders
- Service Order → Sales Invoice: generates invoice
- Sales Invoice → ERPNext Sales: creates sales document
- Service Order → Repair Workflow: supports repairs
- Service Order → Service Reports: reports service work
