58 lines
2.6 KiB
Python
58 lines
2.6 KiB
Python
from __future__ import annotations
|
|
|
|
from datetime import datetime
|
|
from typing import Any
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class SupplierInput(BaseModel):
|
|
rut: str = Field(
|
|
description="Chilean RUT in canonical format (recommended: no dots, with dash).",
|
|
examples=["12345678-9"],
|
|
)
|
|
name: str | None = Field(default=None, description="Optional supplier/company name.", examples=["ACME SpA"])
|
|
|
|
|
|
class CreateCheckRequest(BaseModel):
|
|
supplier: SupplierInput = Field(description="Supplier to evaluate.")
|
|
|
|
|
|
class EvaluationJobOut(BaseModel):
|
|
id: str = Field(alias="_id", description="Evaluation job id (MongoDB ObjectId as string).", examples=["507f1f77bcf86cd799439011"])
|
|
tenantId: str = Field(description="Tenant id (string stored in jobs/results collections).")
|
|
status: str = Field(description="Job status.", examples=["processing"])
|
|
type: str = Field(description="Job type.", examples=["single"])
|
|
createdBy: str = Field(description="User id that created the job (string).")
|
|
totalEvaluations: int = Field(description="Total evaluations tracked by this job.", examples=[1])
|
|
completedEvaluations: int = Field(description="Number of successful results.", examples=[0])
|
|
failedEvaluations: int = Field(description="Number of failed results.", examples=[0])
|
|
createdAt: datetime | None = None
|
|
updatedAt: datetime | None = None
|
|
supplierData: dict[str, Any] | None = None
|
|
|
|
|
|
class ListJobsResponse(BaseModel):
|
|
jobs: list[EvaluationJobOut]
|
|
total: int = Field(description="Total jobs in this tenant.", examples=[42])
|
|
pages: int = Field(description="Total pages for the current limit.", examples=[5])
|
|
|
|
|
|
class EvaluationResultOut(BaseModel):
|
|
id: str = Field(alias="_id", description="Evaluation result id (MongoDB ObjectId as string).")
|
|
jobId: str = Field(description="Evaluation job id (as string or ObjectId string).")
|
|
tenantId: str = Field(description="Tenant id (string stored in jobs/results collections).")
|
|
rut: str = Field(description="Supplier RUT.", examples=["12345678-9"])
|
|
name: str | None = Field(default=None, description="Optional supplier name.", examples=["ACME SpA"])
|
|
status: str = Field(description="Result status.", examples=["success"])
|
|
error: str | None = Field(default=None, description="Error message if failed.")
|
|
data: dict[str, Any] | None = None
|
|
createdAt: datetime | None = None
|
|
updatedAt: datetime | None = None
|
|
|
|
|
|
class ListResultsResponse(BaseModel):
|
|
results: list[EvaluationResultOut]
|
|
total: int = Field(description="Total results in this job.", examples=[1])
|
|
pages: int = Field(description="Total pages for the current limit.", examples=[1])
|