Register all active platform services and base features in core DB so admin can manage them, add delivery/hospitality/sports-center backend phases, update apps catalog and production deploy tooling. Co-authored-by: Cursor <cursoragent@cursor.com>
95 lines
2.5 KiB
Python
95 lines
2.5 KiB
Python
"""Platform capability contracts — interfaces only; no implementations in Hospitality."""
|
|
from __future__ import annotations
|
|
|
|
from typing import Any, Protocol
|
|
from uuid import UUID
|
|
|
|
|
|
class AccountingProvider(Protocol):
|
|
"""Contract for Accounting. Hospitality must not post journals."""
|
|
|
|
async def create_receivable_ref(
|
|
self, *, tenant_id: UUID, reference: str, payload: dict[str, Any]
|
|
) -> dict[str, Any]: ...
|
|
|
|
|
|
class CRMProvider(Protocol):
|
|
"""Contract for CRM. Hospitality stores external_crm_contact_ref only."""
|
|
|
|
async def resolve_contact(
|
|
self, *, tenant_id: UUID, contact_ref: str
|
|
) -> dict[str, Any]: ...
|
|
|
|
|
|
class LoyaltyProvider(Protocol):
|
|
"""Contract for Loyalty. Hospitality must not own points/ledger."""
|
|
|
|
async def resolve_member(
|
|
self, *, tenant_id: UUID, member_ref: str
|
|
) -> dict[str, Any]: ...
|
|
|
|
|
|
class CommunicationProvider(Protocol):
|
|
"""Contract for Communication Platform. Hospitality must not own SMS providers."""
|
|
|
|
async def send(
|
|
self,
|
|
*,
|
|
tenant_id: UUID,
|
|
channel: str,
|
|
template_key: str,
|
|
to: str,
|
|
payload: dict[str, Any],
|
|
) -> None: ...
|
|
|
|
|
|
class DeliveryProvider(Protocol):
|
|
"""Contract for Delivery Platform. Hospitality must not own courier logistics."""
|
|
|
|
async def create_delivery_ref(
|
|
self, *, tenant_id: UUID, reference: str, payload: dict[str, Any]
|
|
) -> dict[str, Any]: ...
|
|
|
|
|
|
class WebsiteBuilderProvider(Protocol):
|
|
"""Contract for Website Builder. Hospitality stores site refs only."""
|
|
|
|
async def resolve_site(
|
|
self, *, tenant_id: UUID, site_ref: str
|
|
) -> dict[str, Any]: ...
|
|
|
|
|
|
class NotificationProvider(Protocol):
|
|
async def notify(
|
|
self,
|
|
*,
|
|
tenant_id: UUID,
|
|
channel: str,
|
|
template_key: str,
|
|
payload: dict[str, Any],
|
|
) -> None: ...
|
|
|
|
|
|
class StorageProvider(Protocol):
|
|
async def resolve_file(
|
|
self, *, tenant_id: UUID, file_ref: str
|
|
) -> dict[str, Any]: ...
|
|
|
|
|
|
class AIProvider(Protocol):
|
|
async def suggest(
|
|
self, *, tenant_id: UUID, task: str, context: dict[str, Any]
|
|
) -> dict[str, Any]: ...
|
|
|
|
|
|
class IdentityProvider(Protocol):
|
|
async def resolve_user(
|
|
self, *, tenant_id: UUID, user_ref: str
|
|
) -> dict[str, Any]: ...
|
|
|
|
|
|
class Customer360Provider(Protocol):
|
|
async def upsert_party_reference(
|
|
self, *, tenant_id: UUID, source: str, source_id: UUID, payload: dict[str, Any]
|
|
) -> None: ...
|