# Clients and sites

> Add the customers you supply staff to and the sites where your staff work, including the GPS point and geofence radius used for the attendance location check.

Sidebar → **Clients & Sites** (route `/clients-sites`). A **client** is a company you bill, such as a residents' association or one company of a corporate group. A **site** is a place where your staff work for that client: a building, a gate or a campus. One client can have many sites.

Above clients sit **customer groups** (a customer with several sister companies), and between clients and sites sit **contracts** (one contract can cover several sites):

**Customer group** › **Client (company)** › **Contract** › **Site**

Both are optional: a single residents' association needs neither.

**Who can do this:** Admin, Ops Manager (permission `master_data.manage`).

> **New customer?** Use **Set up a customer** at the top of the page. It creates the group, companies, contracts, sites and approved headcount in one go — see [Customer setup](/docs/customer-setup). The lists below are for adding to or editing a customer afterwards.

## Customer groups

**Customer groups → Add customer group**: a **Group name** (unique in the workspace), an optional **Group code** and **Notes**. A group that still has clients can't be deleted; move its clients to another group, or none, first.

Use a group when one customer has several sister companies that you bill separately, e.g. *ABC Group* with *ABC Tech Pvt Ltd* and *ABC Realty LLP*. You then pick the group on each of those clients.

![Add customer group: (1) the group name, (2) an optional code, (3) notes, (4) Save](/docs-images/guide/cs-group-add.webp)

![Customer groups: (1) Add customer group](/docs-images/guide/cs-groups.webp)

## Contracts

**Contracts → Add contract**:

| Field | Required | Notes |
|---|---|---|
| Company | Yes | The client that holds the contract |
| Contract name | Yes | e.g. *FM Contract 2026*. Unique per client |
| Contract / PO number | | Unique in the workspace |
| Status | | draft / active / expired / terminated |
| Starts on / Ends on | | The end can't be before the start |
| Client NDA required | | Whether workers at these sites sign the client's NDA |
| Scope / notes | | |

![Add contract: (1) the company that holds it, (2) contract name, (3) PO number, (4–5) start and end, (6) client NDA, (7) Save](/docs-images/guide/cs-contract-add.webp)

The list shows each contract's company, period, whether the client NDA is required, and status:

![Contracts: (1) Add contract](/docs-images/guide/cs-contracts.webp)

On a site, pick the contract under **Contract (of the same client)**. A contract that sites are still under can't be deleted, and can't move to another company. Take the sites off it first (edit each site).

## Add a client

**Clients → Add client**:

![Add client: (1) the customer's name, (2) Save](/docs-images/guide/client-add.webp)

The **Clients** list shows each client's code, its customer group (or *Standalone*), industry and GSTIN:

![Clients: two companies under ABC Group, the rest standalone; (1) Add client](/docs-images/guide/cs-clients.webp)

| Field                      | Required   | Notes                                                       |
| -------------------------- | ---------- | ----------------------------------------------------------- |
| Client name                | Yes        | e.g. _Urban Greens Villa Owners Welfare Association_        |
| Client code                |            | Generated (CLI-0001)                                        when created; editing the client keeps it |
| Customer group | | The group this company belongs to. Empty for a standalone customer |
| Industry                   |            | e.g. _Residential community_                                |
| GST registration           |            | registered / unregistered. Registered clients need a GSTIN. |
| GSTIN                      | Registered | 15-character GSTIN; validated before saving                 |
| Default GST treatment      |            | intra-state, inter-state, exempt, nil or not configured     |
| Place of supply state code | Taxable    | Two-digit GST state code, e.g. `27`                         |
| Status                     |            | active / inactive / archived                                |

Client GST data is used with the supplier **Billing Profile**. The client's explicit treatment wins over the tenant default, so an exempt or nil client can be billed without GSTIN, place-of-supply or supplier-state details. Taxable invoices are blocked until the client and supplier records are complete.

## Add a site

**Client sites → Add site**, or **Edit** on a site's row to change it:

![Client sites: (1) Add site, (2) Edit a site](/docs-images/guide/sites-list.webp)

| Field | Required | Notes |
|---|---|---|
| Client | Yes | The customer this site belongs to |
| Contract | | A contract **of the same client**. Choosing another client's contract is refused |
| Servicing branch | | The branch that runs it ([Organization](/docs/organization)) |
| Site name | Yes | e.g. *Urban Greens Villas* |
| Site code | | Generated (CLS-0001) when created; editing the site keeps it |
| Site location | | Search / current location / map, which fills Latitude and Longitude (below) |
| Latitude | For attendance | The main gate, decimal degrees, e.g. 12.9716 |
| Longitude | For attendance | e.g. 77.5946 |
| Geofence radius (metres) | | e.g. 200. Drawn as a ring on the map. Without one, the workspace default from Field Attendance → Setup applies. |
| Status | | active / inactive / archived |
| Field            | Required       | Notes                                                                                          |
| ---------------- | -------------- | ---------------------------------------------------------------------------------------------- |
| Client           | Yes            | The customer this site belongs to                                                              |
| Servicing branch |                | The branch that runs it ([Organization](/docs/organization))                                   |
| Site name        | Yes            | e.g. _Urban Greens Villas_                                                                     |
| Site code        |                | Generated (CLS-0001)                                                                           |
| Latitude         | For attendance | The main gate, decimal degrees, e.g. 12.9716                                                   |
| Longitude        | For attendance | e.g. 77.5946                                                                                   |
| Geofence radius  |                | In metres, e.g. 200. Without one, the workspace default from Field Attendance → Setup applies. |
| Status           |                | active / inactive / archived                                                                   |

**Getting latitude and longitude** — the **Site location** box works like sharing a location on WhatsApp. Any of these fills **Latitude** and **Longitude** for you:

- **Search**: type a place, landmark or address and pick it from the list. You can also paste a `lat, lng` pair (e.g. from Google Maps) and press Enter.
- **Use current location**: while standing at the gate, press it and allow location when the browser asks. It shows how accurate the reading was.
- **Map**: tap the map or drag the green pin onto the exact gate. The address under the map shows where the pin is.

You can still type the numbers into **Latitude** and **Longitude** by hand; the pin follows what you type. Place search and the map use OpenStreetMap.

![A site's location: (1) search, (2) use current location at the gate, (3) the boundary in metres; the green ring shows it](/docs-images/guide/site-location.webp)

**The location check depends on this.** A guard's phone measures its distance from this point. Within the radius the guard can check in; outside it, the check-in is flagged or refused, depending on the rule in [Field Attendance](/docs/field-attendance#attendance-rules). A site without latitude and longitude can't be checked.

## Good to know

- If a client you just added isn't in the **Client** dropdown of **Add site**, reload the page. Dropdown lists load when the page opens.
- Set the **approved headcount** for each new site in Field Attendance → Setup, or the daily report has nothing to measure shortage against.
- Give the customer a login scoped to this client so they can see their own daily report ([Administration](/docs/administration#limit-what-someone-can-see-data-scopes)). That login also sees the client's own group and contracts, and nothing of other customers.
- The **Customer groups** and **Contracts** lists appear once the database has been updated for them; until then the page shows Clients and Client sites as before.

## How it connects

- [Deployments](/docs/deployment) and [roster assignments](/docs/shifts-and-roster) name a client and site.
- [Field Attendance](/docs/field-attendance) checks location against the site.
- The [daily report](/docs/daily-report) and [billing](/docs/payroll-and-billing) are per client and site.
- The [client portal](/docs/client-portal) shows a customer their sites.
