system-prompts-and-models-o.../salesflow-saas/backend/app/api/v1/saudi_workflow.py
Claude 11e0beb294
feat(dealix): wire ALL 17 schemas + Saudi workflow + release gate
Structured Output Producers (structured_output_producers.py):
  Wire ALL 17 Pydantic schemas to live code:
  - LeadScoreCard: from real Lead model (score, tier, signals)
  - QualificationMemo: from lead score + deal data
  - ProposalPack: from real Deal model (value, terms)
  - PricingDecisionRecord: with discount approval logic
  - HandoffChecklist: sales-to-onboarding transition
  - PartnerDossier, EconomicsModel, ApprovalPacket: (golden path)
  - TargetProfile, ValuationMemo, SynergyModel: M&A track
  - ExpansionPlan, StopLossPolicy: expansion track
  - ExecWeeklyPack, BoardPackDraft, ICMemo, PMIProgramPlan: (executive)
  All with Provenance (trace_id, confidence, freshness).

Structured Outputs API (POST /api/v1/structured-outputs/...):
  11 endpoints exposing schema-bound producers.

Saudi Sensitive Workflow (POST /api/v1/saudi-workflow/share-partner-data):
  Live PDPL-controlled partner data sharing workflow:
  1. Data classification (internal/confidential/restricted)
  2. PDPL consent verification
  3. Cross-border export rules check (GCC allowed)
  4. Class B+ approval with 12h SLA
  5. Audit trail via domain events
  6. Evidence pack auto-assembly
  Blocks if no consent or export restricted.

Release Readiness Matrix (scripts/release_readiness_matrix.py):
  26 checks covering governance + services + APIs + trust + sales.
  SCORE: 100.0% (26/26) = RELEASE READY: YES

https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-17 06:27:15 +00:00

40 lines
1.4 KiB
Python

"""Saudi Sensitive Workflow API — partner data sharing with PDPL controls."""
from fastapi import APIRouter, Depends
from pydantic import BaseModel as PydanticBase
from typing import Any, Dict, List
router = APIRouter(prefix="/saudi-workflow", tags=["Saudi Sensitive Workflow"])
class DataSharingRequest(PydanticBase):
partner_name: str
data_categories: List[str] = ["company_name", "contact_name", "contact_email"]
purpose: str = "partnership_evaluation"
requested_by: str = "00000000-0000-0000-0000-000000000000"
async def _get_db():
from app.database import get_db
async for session in get_db():
yield session
@router.post("/share-partner-data")
async def share_partner_data(
body: DataSharingRequest,
tenant_id: str = "00000000-0000-0000-0000-000000000000",
db=Depends(_get_db),
) -> Dict[str, Any]:
"""Execute Saudi-sensitive partner data sharing workflow.
Enforces: PDPL classification → consent check → export rules →
Class B+ approval → audit trail → evidence pack assembly.
"""
from app.services.saudi_sensitive_workflow import saudi_sensitive_workflow
return await saudi_sensitive_workflow.share_partner_data(
db, tenant_id=tenant_id, partner_name=body.partner_name,
data_categories=body.data_categories, purpose=body.purpose,
requested_by=body.requested_by,
)