enrich client's details
This commit is contained in:
parent
5a23f37e64
commit
82c43627d9
1 changed files with 206 additions and 40 deletions
246
api.py
246
api.py
|
|
@ -125,13 +125,15 @@ class ClientResponse(BaseModel):
|
||||||
|
|
||||||
|
|
||||||
class ClientDetails(BaseModel):
|
class ClientDetails(BaseModel):
|
||||||
"""Modèle de réponse client complet (pour GET /clients/{code})"""
|
"""
|
||||||
|
Modèle de réponse client complet (GET /clients/{code})
|
||||||
|
Aligné avec tous les champs gérés par creer_client et lister_tous_clients
|
||||||
|
"""
|
||||||
|
|
||||||
numero: Optional[str] = Field(None, description="Code client (CT_Num)")
|
numero: Optional[str] = Field(None, description="Code client (CT_Num)")
|
||||||
intitule: Optional[str] = Field(
|
intitule: Optional[str] = Field(
|
||||||
None, description="Raison sociale ou Nom complet (CT_Intitule)"
|
None, description="Raison sociale ou Nom complet (CT_Intitule)"
|
||||||
)
|
)
|
||||||
|
|
||||||
type_tiers: Optional[str] = Field(
|
type_tiers: Optional[str] = Field(
|
||||||
None,
|
None,
|
||||||
description="Type : 'client', 'prospect', 'fournisseur' ou 'client_fournisseur'",
|
description="Type : 'client', 'prospect', 'fournisseur' ou 'client_fournisseur'",
|
||||||
|
|
@ -140,24 +142,19 @@ class ClientDetails(BaseModel):
|
||||||
None,
|
None,
|
||||||
description="Qualité Sage : CLI (Client), FOU (Fournisseur), PRO (Prospect)",
|
description="Qualité Sage : CLI (Client), FOU (Fournisseur), PRO (Prospect)",
|
||||||
)
|
)
|
||||||
|
classement: Optional[str] = Field(
|
||||||
|
None, description="Code de classement personnalisé (CT_Classement)"
|
||||||
|
)
|
||||||
|
raccourci: Optional[str] = Field(
|
||||||
|
None, description="Code raccourci (7 car. max) (CT_Raccourci)"
|
||||||
|
)
|
||||||
|
|
||||||
est_prospect: Optional[bool] = Field(
|
est_prospect: Optional[bool] = Field(
|
||||||
None, description="True si prospect (CT_Prospect=1)"
|
None, description="True si prospect (CT_Prospect=1)"
|
||||||
)
|
)
|
||||||
est_fournisseur: Optional[bool] = Field(
|
est_fournisseur: Optional[bool] = Field(
|
||||||
None, description="True si fournisseur (CT_Qualite=2 ou 3)"
|
None, description="True si fournisseur (CT_Type=1 ou CT_Qualite contient FOU)"
|
||||||
)
|
)
|
||||||
|
|
||||||
forme_juridique: Optional[str] = Field(
|
|
||||||
None,
|
|
||||||
description="Forme juridique (SA, SARL, SAS, EI, etc.) - Vide si particulier",
|
|
||||||
)
|
|
||||||
est_entreprise: Optional[bool] = Field(
|
|
||||||
None, description="True si entreprise (forme_juridique renseignée)"
|
|
||||||
)
|
|
||||||
est_particulier: Optional[bool] = Field(
|
|
||||||
None, description="True si particulier (pas de forme juridique)"
|
|
||||||
)
|
|
||||||
|
|
||||||
est_actif: Optional[bool] = Field(None, description="True si actif (CT_Sommeil=0)")
|
est_actif: Optional[bool] = Field(None, description="True si actif (CT_Sommeil=0)")
|
||||||
est_en_sommeil: Optional[bool] = Field(
|
est_en_sommeil: Optional[bool] = Field(
|
||||||
None, description="True si en sommeil (CT_Sommeil=1)"
|
None, description="True si en sommeil (CT_Sommeil=1)"
|
||||||
|
|
@ -169,36 +166,99 @@ class ClientDetails(BaseModel):
|
||||||
nom_complet: Optional[str] = Field(
|
nom_complet: Optional[str] = Field(
|
||||||
None, description="Nom complet formaté : 'Civilité Prénom Nom'"
|
None, description="Nom complet formaté : 'Civilité Prénom Nom'"
|
||||||
)
|
)
|
||||||
|
|
||||||
contact: Optional[str] = Field(
|
contact: Optional[str] = Field(
|
||||||
None, description="Nom du contact principal (CT_Contact)"
|
None, description="Nom du contact principal (CT_Contact)"
|
||||||
)
|
)
|
||||||
|
|
||||||
adresse: Optional[str] = Field(None, description="Adresse ligne 1")
|
adresse: Optional[str] = Field(None, description="Adresse ligne 1 (CT_Adresse)")
|
||||||
complement: Optional[str] = Field(None, description="Complément d'adresse")
|
complement: Optional[str] = Field(
|
||||||
code_postal: Optional[str] = Field(None, description="Code postal")
|
None, description="Complément d'adresse (CT_Complement)"
|
||||||
ville: Optional[str] = Field(None, description="Ville")
|
)
|
||||||
region: Optional[str] = Field(None, description="Région/État")
|
code_postal: Optional[str] = Field(None, description="Code postal (CT_CodePostal)")
|
||||||
pays: Optional[str] = Field(None, description="Pays")
|
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)")
|
||||||
|
|
||||||
telephone: Optional[str] = Field(None, description="Téléphone fixe")
|
telephone: Optional[str] = Field(None, description="Téléphone fixe (CT_Telephone)")
|
||||||
portable: Optional[str] = Field(None, description="Téléphone mobile")
|
portable: Optional[str] = Field(None, description="Téléphone mobile")
|
||||||
telecopie: Optional[str] = Field(None, description="Fax")
|
telecopie: Optional[str] = Field(None, description="Fax (CT_Telecopie)")
|
||||||
email: Optional[str] = Field(None, description="Email principal")
|
email: Optional[str] = Field(None, description="Email principal (CT_EMail)")
|
||||||
site_web: Optional[str] = Field(None, description="Site web")
|
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)"
|
||||||
|
)
|
||||||
|
|
||||||
siret: Optional[str] = Field(None, description="N° SIRET (14 chiffres)")
|
forme_juridique: Optional[str] = Field(
|
||||||
siren: Optional[str] = Field(None, description="N° SIREN (9 chiffres)")
|
None,
|
||||||
tva_intra: Optional[str] = Field(None, description="N° TVA intracommunautaire")
|
description="Forme juridique (SA, SARL, SAS, EI, etc.) (CT_SvFormeJuri)",
|
||||||
code_naf: Optional[str] = Field(None, description="Code NAF/APE")
|
)
|
||||||
|
est_entreprise: Optional[bool] = Field(
|
||||||
|
None, description="True si entreprise (forme_juridique renseignée)"
|
||||||
|
)
|
||||||
|
est_particulier: Optional[bool] = Field(
|
||||||
|
None, description="True si particulier (pas de forme juridique)"
|
||||||
|
)
|
||||||
|
siret: Optional[str] = Field(None, description="N° SIRET 14 chiffres (CT_Siret)")
|
||||||
|
siren: Optional[str] = Field(
|
||||||
|
None, description="N° SIREN 9 chiffres (extrait du 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)")
|
||||||
|
|
||||||
secteur: Optional[str] = Field(None, description="Secteur d'activité")
|
taux01: Optional[float] = Field(None, description="Taux personnalisé 1 (CT_Taux01)")
|
||||||
effectif: Optional[int] = Field(None, description="Nombre d'employés")
|
taux02: Optional[float] = Field(None, description="Taux personnalisé 2 (CT_Taux02)")
|
||||||
ca_annuel: Optional[float] = Field(None, description="Chiffre d'affaires annuel")
|
taux03: Optional[float] = Field(None, description="Taux personnalisé 3 (CT_Taux03)")
|
||||||
commercial_code: Optional[str] = Field(
|
taux04: Optional[float] = Field(None, description="Taux personnalisé 4 (CT_Taux04)")
|
||||||
None, description="Code du commercial rattaché"
|
|
||||||
|
secteur: Optional[str] = Field(
|
||||||
|
None, description="Secteur d'activité (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)"
|
||||||
|
)
|
||||||
|
|
||||||
|
effectif: Optional[str] = Field(
|
||||||
|
None, description="Nombre d'employés (CT_SvEffectif)"
|
||||||
|
)
|
||||||
|
ca_annuel: Optional[float] = Field(
|
||||||
|
None, description="Chiffre d'affaires annuel (CT_SvCA)"
|
||||||
|
)
|
||||||
|
commercial_code: Optional[int] = Field(
|
||||||
|
None, description="Code du commercial rattaché (CO_No)"
|
||||||
)
|
)
|
||||||
commercial_nom: Optional[str] = Field(None, description="Nom du commercial")
|
commercial_nom: Optional[str] = Field(None, description="Nom du commercial")
|
||||||
|
langue: Optional[int] = Field(
|
||||||
|
None, description="Code langue (0=Français, 1=Anglais...) (CT_Langue)"
|
||||||
|
)
|
||||||
|
|
||||||
categorie_tarifaire: Optional[int] = Field(
|
categorie_tarifaire: Optional[int] = Field(
|
||||||
None, description="Catégorie tarifaire (N_CatTarif)"
|
None, description="Catégorie tarifaire (N_CatTarif)"
|
||||||
|
|
@ -206,18 +266,90 @@ class ClientDetails(BaseModel):
|
||||||
categorie_comptable: Optional[int] = Field(
|
categorie_comptable: Optional[int] = Field(
|
||||||
None, description="Catégorie comptable (N_CatCompta)"
|
None, description="Catégorie comptable (N_CatCompta)"
|
||||||
)
|
)
|
||||||
|
compte_general: Optional[str] = Field(
|
||||||
|
None, description="Compte général principal (CG_NumPrinc)"
|
||||||
|
)
|
||||||
|
|
||||||
|
lettrage_auto: Optional[bool] = Field(
|
||||||
|
None, description="Lettrage automatique (CT_Lettrage)"
|
||||||
|
)
|
||||||
|
type_facture: Optional[int] = Field(
|
||||||
|
None, description="Type de facture (0=Facture, 1=BL facturant) (CT_Facture)"
|
||||||
|
)
|
||||||
|
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)"
|
||||||
|
)
|
||||||
encours_autorise: Optional[float] = Field(
|
encours_autorise: Optional[float] = Field(
|
||||||
None, description="Encours maximum autorisé"
|
None, description="Encours maximum autorisé (CT_Encours)"
|
||||||
)
|
)
|
||||||
assurance_credit: Optional[float] = Field(
|
assurance_credit: Optional[float] = Field(
|
||||||
None, description="Montant assurance crédit"
|
None, description="Montant assurance crédit (CT_Assurance)"
|
||||||
|
)
|
||||||
|
|
||||||
|
priorite_livraison: Optional[int] = Field(
|
||||||
|
None, description="Priorité de livraison (CT_PrioriteLivr)"
|
||||||
|
)
|
||||||
|
livraison_partielle: Optional[int] = Field(
|
||||||
|
None, description="Autoriser livraison partielle (CT_LivrPartielle)"
|
||||||
|
)
|
||||||
|
delai_transport: Optional[int] = Field(
|
||||||
|
None, description="Délai de transport (jours) (CT_DelaiTransport)"
|
||||||
|
)
|
||||||
|
delai_appro: Optional[int] = Field(
|
||||||
|
None, description="Délai d'approvisionnement (jours) (CT_DelaiAppro)"
|
||||||
|
)
|
||||||
|
|
||||||
|
commentaire: Optional[str] = Field(
|
||||||
|
None, description="Commentaire libre (CT_Commentaire)"
|
||||||
|
)
|
||||||
|
|
||||||
|
section_analytique: Optional[str] = Field(
|
||||||
|
None, description="Section analytique (CA_Num)"
|
||||||
|
)
|
||||||
|
|
||||||
|
mode_reglement_code: Optional[int] = Field(
|
||||||
|
None, description="Code mode de règlement (MR_No)"
|
||||||
|
)
|
||||||
|
surveillance_active: Optional[bool] = Field(
|
||||||
|
None, description="Surveillance financière active (CT_Surveillance)"
|
||||||
|
)
|
||||||
|
coface: Optional[str] = Field(
|
||||||
|
None, description="Code Coface (25 car.) (CT_Coface)"
|
||||||
|
)
|
||||||
|
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 surveillance (CT_SvObjetMaj)"
|
||||||
|
)
|
||||||
|
sv_resultat: Optional[float] = Field(
|
||||||
|
None, description="Résultat financier (CT_SvResultat)"
|
||||||
)
|
)
|
||||||
compte_general: Optional[str] = Field(None, description="Compte général principal")
|
|
||||||
|
|
||||||
date_creation: Optional[str] = Field(None, description="Date de création")
|
date_creation: Optional[str] = Field(None, description="Date de création")
|
||||||
date_modification: Optional[str] = Field(
|
date_modification: Optional[str] = Field(
|
||||||
None, description="Date de dernière modification"
|
None, description="Date de dernière modification (CT_DateMAJ)"
|
||||||
)
|
)
|
||||||
|
|
||||||
class Config:
|
class Config:
|
||||||
|
|
@ -227,20 +359,54 @@ class ClientDetails(BaseModel):
|
||||||
"intitule": "SARL EXEMPLE",
|
"intitule": "SARL EXEMPLE",
|
||||||
"type_tiers": "client",
|
"type_tiers": "client",
|
||||||
"qualite": "CLI",
|
"qualite": "CLI",
|
||||||
|
"classement": "A",
|
||||||
|
"raccourci": "EXEMPL",
|
||||||
"est_entreprise": True,
|
"est_entreprise": True,
|
||||||
|
"est_actif": True,
|
||||||
"forme_juridique": "SARL",
|
"forme_juridique": "SARL",
|
||||||
|
"contact": "Jean Dupont",
|
||||||
"adresse": "123 Rue de la Paix",
|
"adresse": "123 Rue de la Paix",
|
||||||
|
"complement": "Bâtiment B",
|
||||||
"code_postal": "75001",
|
"code_postal": "75001",
|
||||||
"ville": "Paris",
|
"ville": "Paris",
|
||||||
|
"region": "Île-de-France",
|
||||||
|
"pays": "France",
|
||||||
"telephone": "0123456789",
|
"telephone": "0123456789",
|
||||||
"portable": "0612345678",
|
"portable": "0612345678",
|
||||||
"email": "contact@exemple.fr",
|
"email": "contact@exemple.fr",
|
||||||
|
"site_web": "https://www.exemple.fr",
|
||||||
|
"facebook": "https://facebook.com/exemple",
|
||||||
|
"linkedin": "https://linkedin.com/company/exemple",
|
||||||
"siret": "12345678901234",
|
"siret": "12345678901234",
|
||||||
|
"siren": "123456789",
|
||||||
"tva_intra": "FR12345678901",
|
"tva_intra": "FR12345678901",
|
||||||
|
"code_naf": "6201Z",
|
||||||
|
"secteur": "Informatique",
|
||||||
|
"effectif": "50-99",
|
||||||
|
"ca_annuel": 2500000.0,
|
||||||
|
"commercial_code": 1,
|
||||||
|
"langue": 0,
|
||||||
|
"categorie_tarifaire": 0,
|
||||||
|
"categorie_comptable": 0,
|
||||||
|
"compte_general": "4110000",
|
||||||
|
"lettrage_auto": True,
|
||||||
|
"type_facture": 1,
|
||||||
|
"controle_encours": 1,
|
||||||
|
"exclure_relance": False,
|
||||||
|
"encours_autorise": 50000.0,
|
||||||
|
"assurance_credit": 40000.0,
|
||||||
|
"priorite_livraison": 1,
|
||||||
|
"livraison_partielle": 1,
|
||||||
|
"delai_transport": 2,
|
||||||
|
"commentaire": "Client important",
|
||||||
|
"mode_reglement_code": 1,
|
||||||
|
"surveillance_active": True,
|
||||||
|
"coface": "COF12345",
|
||||||
|
"date_creation": "2024-01-15T10:30:00",
|
||||||
|
"date_modification": "2024-12-20T14:22:00",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class ArticleResponse(BaseModel):
|
class ArticleResponse(BaseModel):
|
||||||
"""
|
"""
|
||||||
Modèle de réponse pour un article Sage
|
Modèle de réponse pour un article Sage
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue