from typing import List, Optional from pydantic import BaseModel, Field from schemas.tiers.contact import Contact class TiersDetails(BaseModel): # IDENTIFICATION numero: Optional[str] = Field(None, description="Code tiers (CT_Num)") intitule: Optional[str] = Field(None, description="Raison sociale ou Nom complet (CT_Intitule)") type_tiers: Optional[int] = Field(None, description="Type : 0=Client, 1=Fournisseur (CT_Type)") qualite: Optional[str] = Field(None, description="Qualité Sage : CLI, FOU, PRO (CT_Qualite)") classement: Optional[str] = Field(None, description="Code de classement (CT_Classement)") raccourci: Optional[str] = Field(None, description="Code raccourci 7 car. (CT_Raccourci)") siret: Optional[str] = Field(None, description="N° SIRET 14 chiffres (CT_Siret)") tva_intra: Optional[str] = Field(None, description="N° TVA intracommunautaire (CT_Identifiant)") code_naf: Optional[str] = Field(None, description="Code NAF/APE (CT_Ape)") # ADRESSE contact: Optional[str] = Field(None, description="Nom du contact principal (CT_Contact)") adresse: Optional[str] = Field(None, description="Adresse ligne 1 (CT_Adresse)") complement: Optional[str] = Field(None, description="Complément d'adresse (CT_Complement)") code_postal: Optional[str] = Field(None, description="Code postal (CT_CodePostal)") ville: Optional[str] = Field(None, description="Ville (CT_Ville)") region: Optional[str] = Field(None, description="Région/État (CT_CodeRegion)") pays: Optional[str] = Field(None, description="Pays (CT_Pays)") # TELECOM telephone: Optional[str] = Field(None, description="Téléphone fixe (CT_Telephone)") telecopie: Optional[str] = Field(None, description="Fax (CT_Telecopie)") email: Optional[str] = Field(None, description="Email principal (CT_EMail)") site_web: Optional[str] = Field(None, description="Site web (CT_Site)") facebook: Optional[str] = Field(None, description="Profil Facebook (CT_Facebook)") linkedin: Optional[str] = Field(None, description="Profil LinkedIn (CT_LinkedIn)") # TAUX taux01: Optional[float] = Field(None, description="Taux personnalisé 1 (CT_Taux01)") taux02: Optional[float] = Field(None, description="Taux personnalisé 2 (CT_Taux02)") taux03: Optional[float] = Field(None, description="Taux personnalisé 3 (CT_Taux03)") taux04: Optional[float] = Field(None, description="Taux personnalisé 4 (CT_Taux04)") # STATISTIQUES statistique01: Optional[str] = Field(None, description="Statistique 1 (CT_Statistique01)") statistique02: Optional[str] = Field(None, description="Statistique 2 (CT_Statistique02)") statistique03: Optional[str] = Field(None, description="Statistique 3 (CT_Statistique03)") statistique04: Optional[str] = Field(None, description="Statistique 4 (CT_Statistique04)") statistique05: Optional[str] = Field(None, description="Statistique 5 (CT_Statistique05)") statistique06: Optional[str] = Field(None, description="Statistique 6 (CT_Statistique06)") statistique07: Optional[str] = Field(None, description="Statistique 7 (CT_Statistique07)") statistique08: Optional[str] = Field(None, description="Statistique 8 (CT_Statistique08)") statistique09: Optional[str] = Field(None, description="Statistique 9 (CT_Statistique09)") statistique10: Optional[str] = Field(None, description="Statistique 10 (CT_Statistique10)") # COMMERCIAL encours_autorise: Optional[float] = Field(None, description="Encours maximum autorisé (CT_Encours)") assurance_credit: Optional[float] = Field(None, description="Montant assurance crédit (CT_Assurance)") langue: Optional[int] = Field(None, description="Code langue 0=FR, 1=EN (CT_Langue)") commercial_code: Optional[int] = Field(None, description="Code du commercial (CO_No)") # FACTURATION lettrage_auto: Optional[bool] = Field(None, description="Lettrage automatique (CT_Lettrage)") est_actif: Optional[bool] = Field(None, description="True si actif (CT_Sommeil=0)") type_facture: Optional[int] = Field(None, description="Type facture 0=Facture, 1=BL (CT_Facture)") est_prospect: Optional[bool] = Field(None, description="True si prospect (CT_Prospect=1)") bl_en_facture: Optional[int] = Field(None, description="Imprimer BL en facture (CT_BLFact)") saut_page: Optional[int] = Field(None, description="Saut de page sur documents (CT_Saut)") validation_echeance: Optional[int] = Field(None, description="Valider les échéances (CT_ValidEch)") controle_encours: Optional[int] = Field(None, description="Contrôler l'encours (CT_ControlEnc)") exclure_relance: Optional[bool] = Field(None, description="Exclure des relances (CT_NotRappel)") exclure_penalites: Optional[bool] = Field(None, description="Exclure des pénalités (CT_NotPenal)") bon_a_payer: Optional[int] = Field(None, description="Bon à payer obligatoire (CT_BonAPayer)") # LOGISTIQUE priorite_livraison: Optional[int] = Field(None, description="Priorité livraison (CT_PrioriteLivr)") livraison_partielle: Optional[int] = Field(None, description="Livraison partielle (CT_LivrPartielle)") delai_transport: Optional[int] = Field(None, description="Délai transport jours (CT_DelaiTransport)") delai_appro: Optional[int] = Field(None, description="Délai appro jours (CT_DelaiAppro)") # COMMENTAIRE commentaire: Optional[str] = Field(None, description="Commentaire libre (CT_Commentaire)") # ANALYTIQUE section_analytique: Optional[str] = Field(None, description="Section analytique (CA_Num)") # ORGANISATION / SURVEILLANCE mode_reglement_code: Optional[int] = Field(None, description="Code mode règlement (MR_No)") surveillance_active: Optional[bool] = Field(None, description="Surveillance financière (CT_Surveillance)") coface: Optional[str] = Field(None, description="Code Coface 25 car. (CT_Coface)") forme_juridique: Optional[str] = Field(None, description="Forme juridique SA, SARL (CT_SvFormeJuri)") effectif: Optional[str] = Field(None, description="Nombre d'employés (CT_SvEffectif)") sv_regularite: Optional[str] = Field(None, description="Régularité paiements (CT_SvRegul)") sv_cotation: Optional[str] = Field(None, description="Cotation crédit (CT_SvCotation)") sv_objet_maj: Optional[str] = Field(None, description="Objet dernière MAJ (CT_SvObjetMaj)") sv_chiffre_affaires: Optional[float] = Field(None, description="Chiffre d'affaires (CT_SvCA)") sv_resultat: Optional[float] = Field(None, description="Résultat financier (CT_SvResultat)") # COMPTE GENERAL ET CATEGORIES compte_general: Optional[str] = Field(None, description="Compte général principal (CG_NumPrinc)") categorie_tarif: Optional[int] = Field(None, description="Catégorie tarifaire (N_CatTarif)") categorie_compta: Optional[int] = Field(None, description="Catégorie comptable (N_CatCompta)") # CONTACTS contacts: Optional[List[Contact]] = Field( default_factory=list, description="Liste des contacts du tiers" )