Diagrama 1 (CRM comercial) y Diagrama 2 (Operaciones) del spec de agente de carga: - crm.service_requests (RFQ) + crm.rate_requests (solicitud de tarifas a proveedores) - crm.quotes + crm.quote_items: conceptos costo/venta/margen, totales automáticos, estados borrador→enviada→aceptada/rechazada - schema ops: ops.shipments (booking, Cut Off, ETD/ETA, naviera/agente aduanal/destino) y ops.shipment_documents (MBL/HBL, MAWB/HAWB, CMR…) - liberar-a-operaciones: crea el embarque desde la cotización aceptada - migración b3c4d5e6f7a8, routers/permisos, seed del flujo completo - 52 tests pytest en verde Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
25 lines
682 B
Python
25 lines
682 B
Python
"""
|
|
Router principal de API v1
|
|
"""
|
|
|
|
from fastapi import APIRouter
|
|
|
|
from .modules.core.router import router as core_router
|
|
from .modules.crm.router import router as crm_router
|
|
from .modules.ops.router import router as ops_router
|
|
from .modules.example.routes import router as example_router
|
|
|
|
|
|
router = APIRouter()
|
|
|
|
router.include_router(core_router)
|
|
router.include_router(crm_router, prefix="/crm", tags=["crm"])
|
|
router.include_router(ops_router, prefix="/ops", tags=["ops"])
|
|
router.include_router(example_router, prefix="/example", tags=["example"])
|
|
|
|
|
|
@router.get("/status")
|
|
def status():
|
|
"""Health check de la API"""
|
|
return {"status": "ok", "version": "1.0.0", "api": "v1"}
|