# Schema Reference — Professional Services

Vertical schema for `businessType: "professional-services"` — consultants, agencies, accountants, solicitors, advisors.

This reference extends the base schema. All base node types remain valid. Load `schema-base.md` first.

When loading this reference, confirm: "Using schema-base + schema-professional-services".

---

## Additional Node Types

| Entity | Neo4j Label | Schema.org Type | Required Properties |
|--------|-------------|-----------------|---------------------|
| Engagement | `Engagement` | `cdm:Opportunity` | `accountId`, `client` (id), `scope`, `startDate`, `endDate`, `value`, `status` |
| Retainer | `Retainer` | `schema:Order` (subtype) | `accountId`, `client` (id), `monthlyValue`, `hoursIncluded`, `renewalDate` |
| Deliverable | `Deliverable` | `schema:DigitalDocument` | `accountId`, `engagement` (id), `name`, `dueDate`, `status`, `version` |
| TimeEntry | `TimeEntry` | `cdm:Activity` | `accountId`, `engagement` (id), `date`, `hours`, `description`, `billable` |

### Retainer vs base Order

`Retainer` is the professional-services-specific label for recurring service agreements. Use `Retainer` (not `Order`) for ongoing client contracts with monthly billing. One-off project work uses a base `Order` linked to an `Engagement`.

---

## Relationship Patterns

```
(:Engagement)-[:FOR_CLIENT]->(:Person|Organization)
(:Deliverable)-[:PART_OF]->(:Engagement)
(:TimeEntry)-[:LOGGED_AGAINST]->(:Engagement)
(:Invoice)-[:FOR_ENGAGEMENT]->(:Engagement)
```
