# Phase Handover — 14.7 Beauty Business Marketing & Loyalty Integration ## Metadata | Field | Value | | --- | --- | | Phase ID | `beauty-business-14-7` | | Title | Marketing & Loyalty Integration | | Status | Complete | | Service(s) | `beauty_business` | | Version | 0.14.7.0 | | Date | 2026-07-26 | | Commercial product | Torbat Beauty | ## Module completion summary Phases **14.0–14.7** are complete. Beauty Business is an independent platform (not merged with Healthcare). | Phase | Delivered | | --- | --- | | 14.0 | Foundation: orgs, branches, roles, config, audit, outbox | | 14.1 | Booking: schedules, appointments lifecycle, waiting list | | 14.2 | Salon: treatment rooms, stations, branch policies | | 14.3 | Catalog: service categories, beauty services | | 14.4 | Customers: profiles with CRM refs, preferences, visit history shells | | 14.5 | Packages: package definitions, membership plans | | 14.6 | Staff: staff profiles, commission rules | | 14.7 | Marketing: campaign refs, Loyalty/Communication integration configs, dispatch | ## Reusable components | Component | Location | Reuse notes | | --- | --- | --- | | TenantBaseRepository | `app/repositories/base.py` | All beauty repos | | TransactionalEventPublisher | `app/events/publisher.py` | Outbox events | | Provider Protocols | `app/providers/contracts.py` | CRM, Loyalty, Communication, Accounting, Delivery, Experience | | Provider mocks | `app/providers/mocks.py` | Local integration dispatch | | BusinessFormat enum | `app/models/types.py` | salon, barbershop, clinic, laser, skin_care, hair_treatment, spa | ## Public APIs (14.7 additions) | Method | Path | Permission | Notes | | --- | --- | --- | --- | | * | `/api/v1/marketing-campaigns` | `beauty_business.marketing.*` | Campaign ref shells | | * | `/api/v1/loyalty-integrations` | `beauty_business.integrations.*` | Earn mapping config | | * | `/api/v1/communication-integrations` | `beauty_business.integrations.*` | Template mapping | | POST | `/api/v1/integration-dispatches` | `beauty_business.integrations.*` | Mock dispatch to providers | ## Frontend | Route | Purpose | | --- | --- | | `/beauty` | Dashboard + health/capabilities | | `/beauty/organizations`, `/beauty/branches` | Foundation | | `/beauty/appointments` | Booking | | `/beauty/catalog/*` | Service catalog | | `/beauty/customers` | Customer management | | `/beauty/staff/*` | Staff & commissions | | `/beauty/marketing/*` | Campaigns & integrations | BFF: `/api/beauty-business/*` → port **8011**. ## Events | Event type | When | | --- | --- | | `beauty_business.marketing.campaign_ref.created` | Campaign ref registered | | `beauty_business.integration.loyalty_config.updated` | Loyalty mapping changed | | `beauty_business.integration.communication_config.updated` | Communication mapping changed | | `beauty_business.integration.dispatched` | Integration dispatch executed | ## Known limitations - Mock-only provider calls for Loyalty/Communication/Accounting/CRM/Delivery/Experience - Secondary catalog/package entities without dedicated list APIs - No dedicated mobile stylist / customer apps - Healthcare module remains separate (`healthcare_db`, port 8010, `/healthcare`) ## Migration notes | Item | Detail | | --- | --- | | Alembic revisions | `0001_initial` … `0008_phase_147_marketing` | | Database | `beauty_business_db` | | Compose | `beauty-business-service` port **8011** | | Tests | 30 passing (`pytest -q`) | ## Validation - Backend: 30/30 tests green - Frontend: `npm run build` exit 0 - Tenant isolation: enforced via `X-Tenant-ID` - Permissions: `beauty_business.*` tree ## Next steps (post-14.7 — not registered phases) - Retail POS-lite for beauty products - Advanced analytics dashboards - Live provider SDK wiring - Dedicated CRUD for secondary entities ## Related documents - [Beauty Business Roadmap](../beauty-business-roadmap.md) - [Service Snapshot](../service-snapshots/beauty-business.yaml) - [Phase area README](../phases/BeautyBusiness/README.md)