# Beauty Business service snapshot — Phases 14.0–14.7 complete. # Spec: docs/ai-framework/service-snapshot-policy.md schema_version: 1 snapshot_version: 1 service_name: beauty_business commercial_product: Torbat Beauty current_version: "0.14.7.0" current_phase: beauty-business-14-7 last_completed_phase: beauty-business-14-7 next_phase: null completed_phases: - beauty-business-14-0 - beauty-business-14-1 - beauty-business-14-2 - beauty-business-14-3 - beauty-business-14-4 - beauty-business-14-5 - beauty-business-14-6 - beauty-business-14-7 remaining_phases: [] registered_modules: - organizations - branches - roles - permissions_catalog - configuration - settings - external_providers - audit - staff_schedules - staff_availabilities - schedule_exceptions - appointment_types - appointments - waiting_list - treatment_rooms - stations - branch_policies - service_categories - beauty_services - customer_profiles - package_definitions - membership_plans - staff_profiles - commission_rules - marketing_campaign_refs - loyalty_integrations - communication_integrations - integration_dispatches - outbox enabled_capabilities: - foundation - booking_engine - salon_management - service_catalog - customer_management - packages_memberships - staff_commission - marketing_loyalty_integration enabled_bundles: - torbat_beauty public_apis: - { method: GET, path: /health, permission: public } - { method: GET, path: /capabilities, permission: public } - { method: GET, path: /metrics, permission: public } - { method: "*", path: /api/v1/organizations, permission: beauty_business.organizations.* } - { method: "*", path: /api/v1/branches, permission: beauty_business.branches.* } - { method: "*", path: /api/v1/appointments, permission: beauty_business.appointments.* } - { method: "*", path: /api/v1/services, permission: beauty_business.services.* } - { method: "*", path: /api/v1/customers, permission: beauty_business.customers.* } - { method: "*", path: /api/v1/staff, permission: beauty_business.staff.* } - { method: "*", path: /api/v1/marketing-campaigns, permission: beauty_business.marketing.* } - { method: "*", path: /api/v1/integration-dispatches, permission: beauty_business.integrations.* } published_events: - { event_type: beauty_business.organization.created, version: "1" } - { event_type: beauty_business.branch.created, version: "1" } - { event_type: beauty_business.appointment.created, version: "1" } - { event_type: beauty_business.appointment.completed, version: "1" } - { event_type: beauty_business.service.created, version: "1" } - { event_type: beauty_business.customer.created, version: "1" } - { event_type: beauty_business.staff.created, version: "1" } - { event_type: beauty_business.integration.dispatched, version: "1" } permission_prefix: beauty_business.* active_adrs: [] integration_contracts: - CRMProvider - AccountingProvider - LoyaltyProvider - CommunicationProvider - DeliveryProvider - ExperienceProvider - StorageProvider - AIProvider - IdentityProvider known_limitations: - Secondary entities (ServiceVariant, BranchOperatingHours, PackageLine, CommissionEntry) have models/migrations but no dedicated CRUD routes - Integration dispatches use mock providers locally; no live CRM/Loyalty/Communication SDK calls - Event publisher uses transactional outbox; no external bus drain wired - Independent from Healthcare module (separate service, DB, frontend /beauty) open_todos: [] last_handover_reference: docs/phase-handover/phase-14-7.md last_updated: "2026-07-26"