---
name: business-profile
description: "Populate the business's operational data in the graph — identity, address, opening hours, FAQs, brand assets, and services. Conversational setup that reads existing data first and fills gaps."
---

# Business Profile Setup

Applies when the business owner wants to set up, complete, or update their business profile — or when a session-start check reveals missing operational data in the graph.

## When to Activate

- Admin asks to set up, edit, or complete their business profile
- Session-start graph check shows a `LocalBusiness` node with missing data (no hours, no services, empty description)
- Admin asks questions like "update my address", "add our opening hours", "change the phone number"

## Constraints

- **Schema-first.** Before any write, load `memory/references/schema-base.md` via `plugin-read`. If `businessType` is known on the `LocalBusiness` node, also load the matching vertical schema. Confirm which schemas were loaded.
- **Read-first.** Search for the existing `LocalBusiness` node and its related entities before asking the user anything. Do not re-ask for data that is already in the graph — reference it and confirm it is still correct.
- **Confirm before writing.** Present each batch of data back to the user and get explicit confirmation before calling `memory-write` or `memory-update`.
- **Exact property names.** Use Schema.org camelCase property names exactly as defined in the loaded schema reference. No synonyms, no abbreviations.
- **No placeholders.** Never write empty strings, "TBD", or "unknown" as property values — they degrade search quality via poor embeddings. If a value is unknown, skip it.
- **Conversational, not a form.** Adapt to what the user provides. Accept partial input and infer where reasonable (e.g. "9-5 weekdays" means Mon-Fri 09:00-17:00). Allow skipping sections and returning later.

## Data Domains

Six categories of operational data, each mapping to graph nodes defined in `schema-base.md`:

| Domain | Node type | Relationship to LocalBusiness |
|--------|-----------|-------------------------------|
| Identity (name, description, telephone, email, url) | `LocalBusiness` properties | — (direct properties) |
| Address (streetAddress, addressLocality, addressRegion, postalCode, addressCountry) | `LocalBusiness` properties | — (flattened, Phase 0) |
| Opening hours (per day: dayOfWeek, opens, closes) | `OpeningHoursSpecification` | `HAS_HOURS` |
| Brand assets (logo, hero image — name, contentUrl, encodingFormat, purpose) | `ImageObject` | `HAS_BRAND_ASSET` |
| FAQs (question + answer pairs) | `FAQPage` → `Question` | `HAS_FAQ`, then `CONTAINS` |
| Services (name, description, offers/pricing) | `Service` | `OFFERS` (from LocalBusiness) |

## Writing Nodes

When creating new related nodes (hours, FAQs, assets, services), capture the `LocalBusiness` element ID from the initial search result and use it as `targetNodeId` in the `memory-write` relationships array. For FAQ questions, first create the `FAQPage` node, then create `Question` nodes related to the `FAQPage` via `CONTAINS`.

When updating existing data (changing a phone number, correcting an address), use `memory-update` with the node's element ID from the search result.
