feat(society): add company info schema and endpoint

This commit is contained in:
Fanilo-Nantenaina 2026-01-13 17:03:18 +03:00
parent 358b2e3639
commit 9ae447e2c7
4 changed files with 77 additions and 2 deletions

18
api.py
View file

@ -33,6 +33,7 @@ from email_queue import email_queue
from sage_client import sage_client, SageGatewayClient from sage_client import sage_client, SageGatewayClient
from schemas import ( from schemas import (
SocieteInfo,
TiersDetails, TiersDetails,
BaremeRemiseResponse, BaremeRemiseResponse,
Users, Users,
@ -2854,6 +2855,23 @@ async def modifier_collaborateur(numero: int, collaborateur: CollaborateurUpdate
raise HTTPException(500, str(e)) raise HTTPException(500, str(e))
@app.get("/societe/info", response_model=SocieteInfo, tags=["Société"])
async def obtenir_informations_societe():
try:
societe = sage_client.lire_informations_societe()
if not societe:
raise HTTPException(404, "Informations société introuvables")
return {"success": True, "data": societe}
except HTTPException:
raise
except Exception as e:
logger.error(f"Erreur lecture info société: {e}")
raise HTTPException(500, str(e))
@app.get("/health", tags=["System"]) @app.get("/health", tags=["System"])
async def health_check( async def health_check(
sage: SageGatewayClient = Depends(get_sage_client_for_user), sage: SageGatewayClient = Depends(get_sage_client_for_user),

View file

@ -408,7 +408,7 @@ class SageGatewayClient:
return self._post( return self._post(
"/sage/collaborateurs/list", "/sage/collaborateurs/list",
{ {
"filtre": filtre or "", # Convertir None en "" "filtre": filtre or "",
"actifs_seulement": actifs_seulement, "actifs_seulement": actifs_seulement,
}, },
).get("data", []) ).get("data", [])
@ -427,6 +427,10 @@ class SageGatewayClient:
"/sage/collaborateurs/update", {"numero": numero, **data} "/sage/collaborateurs/update", {"numero": numero, **data}
).get("data") ).get("data")
def lire_informations_societe(self) -> Optional[Dict]:
"""Lit les informations de la société depuis P_DOSSIER"""
return self._get("/sage/societe/info").get("data")
def refresh_cache(self) -> Dict: def refresh_cache(self) -> Dict:
return self._post("/sage/cache/refresh") return self._post("/sage/cache/refresh")

View file

@ -59,6 +59,8 @@ from schemas.sage.sage_gateway import (
CurrentGatewayInfo, CurrentGatewayInfo,
) )
from schemas.society.societe import SocieteInfo
__all__ = [ __all__ = [
"TiersDetails", "TiersDetails",
"TypeTiers", "TypeTiers",
@ -114,4 +116,5 @@ __all__ = [
"SyncStatsResponse", "SyncStatsResponse",
"CreateSignatureRequest", "CreateSignatureRequest",
"TransactionResponse", "TransactionResponse",
"SocieteInfo"
] ]

View file

@ -0,0 +1,50 @@
from pydantic import BaseModel, Field
from typing import Optional, List
class ExerciceComptable(BaseModel):
numero: int
debut: Optional[str] = None
fin: Optional[str] = None
class SocieteInfo(BaseModel):
# Identification
raison_sociale: str = Field(..., description="Raison sociale")
numero_dossier: str = Field(..., description="Code du dossier")
siret: Optional[str] = Field(None, description="Numéro SIRET")
code_ape: Optional[str] = Field(None, description="Code APE/NAF")
numero_tva: Optional[str] = Field(None, description="Numéro TVA intracommunautaire")
# Adresse
adresse: Optional[str] = None
complement_adresse: Optional[str] = None
code_postal: Optional[str] = None
ville: Optional[str] = None
code_region: Optional[str] = None
pays: Optional[str] = None
# Contacts
telephone: Optional[str] = None
telecopie: Optional[str] = None
email: Optional[str] = None
email_societe: Optional[str] = None
site_web: Optional[str] = None
# Informations juridiques
capital: float = 0.0
forme_juridique: Optional[str] = None
# Exercices comptables
exercices: List[ExerciceComptable] = []
# Configuration
devise_compte: int = 0
devise_equivalent: int = 0
longueur_compte_general: int = 0
longueur_compte_analytique: int = 0
regime_fec: int = 0
# Autres
base_modele: Optional[str] = None
marqueur: int = 0