255 lines
10 KiB
Python
255 lines
10 KiB
Python
from pydantic import BaseModel, Field
|
|
from typing import Optional
|
|
|
|
|
|
class FamilleCreateRequest(BaseModel):
|
|
"""Schéma pour création de famille d'articles"""
|
|
|
|
code: str = Field(..., max_length=18, description="Code famille (max 18 car)")
|
|
intitule: str = Field(..., max_length=69, description="Intitulé (max 69 car)")
|
|
type: int = Field(0, ge=0, le=1, description="0=Détail, 1=Total")
|
|
compte_achat: Optional[str] = Field(
|
|
None, max_length=13, description="Compte général achat (ex: 607000)"
|
|
)
|
|
compte_vente: Optional[str] = Field(
|
|
None, max_length=13, description="Compte général vente (ex: 707000)"
|
|
)
|
|
|
|
class Config:
|
|
json_schema_extra = {
|
|
"example": {
|
|
"code": "PRODLAIT",
|
|
"intitule": "Produits laitiers",
|
|
"type": 0,
|
|
"compte_achat": "607000",
|
|
"compte_vente": "707000",
|
|
}
|
|
}
|
|
|
|
|
|
class FamilleResponse(BaseModel):
|
|
"""Modèle complet d'une famille avec données comptables et fournisseur"""
|
|
|
|
code: str = Field(..., description="Code famille")
|
|
intitule: str = Field(..., description="Intitulé")
|
|
type: int = Field(..., description="Type (0=Détail, 1=Total)")
|
|
type_libelle: str = Field(..., description="Libellé du type")
|
|
est_total: bool = Field(..., description="True si type Total")
|
|
est_detail: bool = Field(..., description="True si type Détail")
|
|
|
|
unite_vente: Optional[str] = Field(None, description="Unité de vente par défaut")
|
|
unite_poids: Optional[str] = Field(None, description="Unité de poids")
|
|
coef: Optional[float] = Field(None, description="Coefficient multiplicateur")
|
|
|
|
suivi_stock: Optional[bool] = Field(None, description="Suivi du stock activé")
|
|
garantie: Optional[int] = Field(None, description="Durée de garantie (mois)")
|
|
delai: Optional[int] = Field(None, description="Délai de livraison (jours)")
|
|
nb_colis: Optional[int] = Field(None, description="Nombre de colis")
|
|
|
|
code_fiscal: Optional[str] = Field(None, description="Code fiscal par défaut")
|
|
escompte: Optional[bool] = Field(None, description="Escompte autorisé")
|
|
|
|
est_centrale: Optional[bool] = Field(None, description="Famille d'achat centralisé")
|
|
nature: Optional[int] = Field(None, description="Nature de la famille")
|
|
pays: Optional[str] = Field(None, description="Pays d'origine")
|
|
|
|
categorie_1: Optional[int] = Field(
|
|
None, description="Catégorie comptable 1 (CL_No1)"
|
|
)
|
|
categorie_2: Optional[int] = Field(
|
|
None, description="Catégorie comptable 2 (CL_No2)"
|
|
)
|
|
categorie_3: Optional[int] = Field(
|
|
None, description="Catégorie comptable 3 (CL_No3)"
|
|
)
|
|
categorie_4: Optional[int] = Field(
|
|
None, description="Catégorie comptable 4 (CL_No4)"
|
|
)
|
|
|
|
stat_01: Optional[str] = Field(None, description="Statistique libre 1")
|
|
stat_02: Optional[str] = Field(None, description="Statistique libre 2")
|
|
stat_03: Optional[str] = Field(None, description="Statistique libre 3")
|
|
stat_04: Optional[str] = Field(None, description="Statistique libre 4")
|
|
stat_05: Optional[str] = Field(None, description="Statistique libre 5")
|
|
hors_statistique: Optional[bool] = Field(
|
|
None, description="Exclue des statistiques"
|
|
)
|
|
|
|
vente_debit: Optional[bool] = Field(None, description="Vente au débit")
|
|
non_imprimable: Optional[bool] = Field(
|
|
None, description="Non imprimable sur documents"
|
|
)
|
|
contremarque: Optional[bool] = Field(None, description="Article en contremarque")
|
|
fact_poids: Optional[bool] = Field(None, description="Facturation au poids")
|
|
fact_forfait: Optional[bool] = Field(None, description="Facturation forfaitaire")
|
|
publie: Optional[bool] = Field(None, description="Publié (e-commerce)")
|
|
|
|
racine_reference: Optional[str] = Field(
|
|
None, description="Racine pour génération auto de références"
|
|
)
|
|
racine_code_barre: Optional[str] = Field(
|
|
None, description="Racine pour génération auto de codes-barres"
|
|
)
|
|
raccourci: Optional[str] = Field(None, description="Raccourci clavier")
|
|
|
|
sous_traitance: Optional[bool] = Field(
|
|
None, description="Famille en sous-traitance"
|
|
)
|
|
fictif: Optional[bool] = Field(None, description="Famille fictive (nomenclature)")
|
|
criticite: Optional[int] = Field(None, description="Niveau de criticité (0-5)")
|
|
|
|
compte_vente: Optional[str] = Field(None, description="Compte général de vente")
|
|
compte_auxiliaire_vente: Optional[str] = Field(
|
|
None, description="Compte auxiliaire de vente"
|
|
)
|
|
tva_vente_1: Optional[str] = Field(None, description="Code TVA vente principal")
|
|
tva_vente_2: Optional[str] = Field(None, description="Code TVA vente secondaire")
|
|
tva_vente_3: Optional[str] = Field(None, description="Code TVA vente tertiaire")
|
|
type_facture_vente: Optional[int] = Field(None, description="Type de facture vente")
|
|
|
|
compte_achat: Optional[str] = Field(None, description="Compte général d'achat")
|
|
compte_auxiliaire_achat: Optional[str] = Field(
|
|
None, description="Compte auxiliaire d'achat"
|
|
)
|
|
tva_achat_1: Optional[str] = Field(None, description="Code TVA achat principal")
|
|
tva_achat_2: Optional[str] = Field(None, description="Code TVA achat secondaire")
|
|
tva_achat_3: Optional[str] = Field(None, description="Code TVA achat tertiaire")
|
|
type_facture_achat: Optional[int] = Field(None, description="Type de facture achat")
|
|
|
|
compte_stock: Optional[str] = Field(None, description="Compte de stock")
|
|
compte_auxiliaire_stock: Optional[str] = Field(
|
|
None, description="Compte auxiliaire de stock"
|
|
)
|
|
|
|
fournisseur_principal: Optional[str] = Field(
|
|
None, description="N° compte fournisseur principal"
|
|
)
|
|
fournisseur_unite: Optional[str] = Field(
|
|
None, description="Unité d'achat fournisseur"
|
|
)
|
|
fournisseur_conversion: Optional[float] = Field(
|
|
None, description="Coefficient de conversion"
|
|
)
|
|
fournisseur_delai_appro: Optional[int] = Field(
|
|
None, description="Délai d'approvisionnement (jours)"
|
|
)
|
|
fournisseur_garantie: Optional[int] = Field(
|
|
None, description="Garantie fournisseur (mois)"
|
|
)
|
|
fournisseur_colisage: Optional[int] = Field(
|
|
None, description="Colisage fournisseur"
|
|
)
|
|
fournisseur_qte_mini: Optional[float] = Field(
|
|
None, description="Quantité minimum de commande"
|
|
)
|
|
fournisseur_qte_mont: Optional[float] = Field(None, description="Quantité montant")
|
|
fournisseur_devise: Optional[int] = Field(
|
|
None, description="Devise fournisseur (0=Euro)"
|
|
)
|
|
fournisseur_remise: Optional[float] = Field(
|
|
None, description="Remise fournisseur (%)"
|
|
)
|
|
fournisseur_type_remise: Optional[int] = Field(
|
|
None, description="Type de remise (0=%, 1=Montant)"
|
|
)
|
|
|
|
nb_articles: Optional[int] = Field(
|
|
None, description="Nombre d'articles dans la famille"
|
|
)
|
|
|
|
FA_CodeFamille: Optional[str] = Field(None, description="[Legacy] Code famille")
|
|
FA_Intitule: Optional[str] = Field(None, description="[Legacy] Intitulé")
|
|
FA_Type: Optional[int] = Field(None, description="[Legacy] Type")
|
|
CG_NumVte: Optional[str] = Field(None, description="[Legacy] Compte vente")
|
|
CG_NumAch: Optional[str] = Field(None, description="[Legacy] Compte achat")
|
|
|
|
class Config:
|
|
json_schema_extra = {
|
|
"example": {
|
|
"code": "ELECT",
|
|
"intitule": "Électronique et Informatique",
|
|
"type": 0,
|
|
"type_libelle": "Détail",
|
|
"est_total": False,
|
|
"est_detail": True,
|
|
"unite_vente": "U",
|
|
"unite_poids": "KG",
|
|
"coef": 2.5,
|
|
"suivi_stock": True,
|
|
"garantie": 24,
|
|
"delai": 5,
|
|
"nb_colis": 1,
|
|
"code_fiscal": "C19",
|
|
"escompte": True,
|
|
"est_centrale": False,
|
|
"nature": 0,
|
|
"pays": "FR",
|
|
"categorie_1": 1,
|
|
"categorie_2": 0,
|
|
"categorie_3": 0,
|
|
"categorie_4": 0,
|
|
"stat_01": "HIGH_TECH",
|
|
"stat_02": "",
|
|
"stat_03": "",
|
|
"stat_04": "",
|
|
"stat_05": "",
|
|
"hors_statistique": False,
|
|
"vente_debit": False,
|
|
"non_imprimable": False,
|
|
"contremarque": False,
|
|
"fact_poids": False,
|
|
"fact_forfait": False,
|
|
"publie": True,
|
|
"racine_reference": "ELEC",
|
|
"racine_code_barre": "339",
|
|
"raccourci": "F5",
|
|
"sous_traitance": False,
|
|
"fictif": False,
|
|
"criticite": 2,
|
|
"compte_vente": "707100",
|
|
"compte_auxiliaire_vente": "",
|
|
"tva_vente_1": "C19",
|
|
"tva_vente_2": "",
|
|
"tva_vente_3": "",
|
|
"type_facture_vente": 0,
|
|
"compte_achat": "607100",
|
|
"compte_auxiliaire_achat": "",
|
|
"tva_achat_1": "C19",
|
|
"tva_achat_2": "",
|
|
"tva_achat_3": "",
|
|
"type_facture_achat": 0,
|
|
"compte_stock": "350000",
|
|
"compte_auxiliaire_stock": "",
|
|
"fournisseur_principal": "FTECH001",
|
|
"fournisseur_unite": "U",
|
|
"fournisseur_conversion": 1.0,
|
|
"fournisseur_delai_appro": 7,
|
|
"fournisseur_garantie": 12,
|
|
"fournisseur_colisage": 10,
|
|
"fournisseur_qte_mini": 5.0,
|
|
"fournisseur_qte_mont": 100.0,
|
|
"fournisseur_devise": 0,
|
|
"fournisseur_remise": 5.0,
|
|
"fournisseur_type_remise": 0,
|
|
"nb_articles": 156,
|
|
}
|
|
}
|
|
|
|
|
|
class FamilleListResponse(BaseModel):
|
|
"""Réponse pour la liste des familles"""
|
|
|
|
familles: list[FamilleResponse]
|
|
total: int
|
|
filtre: Optional[str] = None
|
|
inclure_totaux: bool = True
|
|
|
|
class Config:
|
|
json_schema_extra = {
|
|
"example": {
|
|
"familles": [],
|
|
"total": 42,
|
|
"filtre": "ELECT",
|
|
"inclure_totaux": False,
|
|
}
|
|
}
|