# 📋 Documentation - Fiche de Renseignement Entreprise ## 📌 Vue d'ensemble Le modèle `FicheRenseignementEntreprise` permet de gérer toutes les informations relatives aux entreprises accueillant des alternants. Ce modèle est structuré en 7 sections principales. ## 🏗️ Structure du modèle ### Section 1: Identification de l'Entreprise ```python class IdentificationEntreprise(BaseModel): raison_sociale: str # ✅ Requis nom_entreprise: Optional[str] # ⭕ Optionnel siret: str # ✅ Requis (14 caractères) code_ape_naf: str # ✅ Requis type_employeur: str # ✅ Requis (voir enum TypeEmployeur) employeur_specifique: Optional[str] # ⭕ Optionnel nombre_salaries: int # ✅ Requis (>= 0) code_idcc: Optional[str] # ⭕ Optionnel convention_collective: Optional[str] # ⭕ Optionnel ``` **Types d'employeur disponibles:** - SARL, SAS, SA, EURL, EI, SNC, SCOP - Microentreprise - Association - Employeur spécifique - Autre ### Section 2: Adresse de l'Entreprise ```python class AdresseEntreprise(BaseModel): numero: Optional[str] # ⭕ Numéro de rue voie: str # ✅ Type de voie (rue, avenue, etc.) nom_rue: Optional[str] # ⭕ Nom de la rue complement: Optional[str] # ⭕ Complément d'adresse code_postal: str # ✅ Requis ville: str # ✅ Requis telephone: str # ✅ Requis email: str # ✅ Requis (avec validation) ``` ### Section 3: Représentant Légal ```python class RepresentantLegal(BaseModel): nom: str # ✅ Requis titre: str # ✅ Requis (ex: Gérant, PDG, etc.) telephone_direct: Optional[str] # ⭕ Optionnel email: Optional[str] # ⭕ Optionnel (avec validation) ``` ### Section 4: Maître d'Apprentissage ```python class MatreApprentissage(BaseModel): nom: str # ✅ Requis prenom: str # ✅ Requis date_naissance: date # ✅ Requis (format: YYYY-MM-DD) numero_securite_sociale: Optional[str]# ⭕ Optionnel fonction: str # ✅ Requis diplome_plus_eleve: Optional[str] # ⭕ Optionnel niveau_diplome: str # ✅ Requis (voir enum NiveauDiplome) annees_experience: int # ✅ Requis (>= 0) telephone: str # ✅ Requis email: str # ✅ Requis (avec validation) deja_maitre_apprentissage: str # ✅ Requis ("Oui" ou "Non") ``` **Niveaux de diplôme disponibles:** - Aucun diplôme - CAP, BEP, BAC - BAC+2, BAC+3, BAC+5 - Master, Doctorat - Autre ### Section 5: OPCO ```python class InformationsOPCO(BaseModel): nom_opco: str # ✅ Requis adresse: Optional[str] # ⭕ Optionnel code_postal: Optional[str] # ⭕ Optionnel ville: Optional[str] # ⭕ Optionnel ``` ### Section 6: Informations sur le Contrat ```python class InformationsContrat(BaseModel): nature_contrat: str # ✅ Requis ("Contrat" ou "Avenant") type_contrat: Optional[str] # ⭕ Optionnel type_derogation: str # ✅ Requis (voir enum TypeDerogation) date_debut: date # ✅ Requis (format: YYYY-MM-DD) date_fin: date # ✅ Requis (format: YYYY-MM-DD) nombre_mois: Optional[int] # ⭕ Optionnel (>= 1) duree_hebdomadaire: str # ✅ Requis (ex: "35h") poste_occupe: str # ✅ Requis lieu_execution: Optional[str] # ⭕ Optionnel base_calcul_salaire: str # ✅ Requis ("SMIC" ou "SMC") montant_salaire_brut: Optional[float]# ⭕ Optionnel (>= 0) numero_bon_commande: Optional[str] # ⭕ Optionnel ``` **Types de dérogation disponibles:** - Aucune dérogation - Dérogation d'âge - Dérogation handicap - Autre ### Section 7: Contact et Formation ```python class ContactTaxeApprentissage(BaseModel): fonction_contact: Optional[str] # ⭕ Optionnel telephone_contact: Optional[str] # ⭕ Optionnel email_contact: Optional[str] # ⭕ Optionnel (avec validation) class FormationMissions(BaseModel): formation_alternant: str # ✅ Requis ``` ## 📝 Exemple d'utilisation ### Exemple complet en Python ```python from app.models.admission import FicheRenseignementEntreprise from datetime import date # Créer une fiche de renseignement entreprise fiche_entreprise = FicheRenseignementEntreprise( identification={ "raison_sociale": "RUSH SCHOOL SARL", "nom_entreprise": "Rush School", "siret": "12345678901234", "code_ape_naf": "8559A", "type_employeur": "SARL", "nombre_salaries": 50, "convention_collective": "Convention collective nationale de l'enseignement privé" }, adresse={ "voie": "Rue", "nom_rue": "de la Formation", "numero": "12", "code_postal": "75001", "ville": "Paris", "telephone": "0123456789", "email": "contact@rushschool.fr" }, representant_legal={ "nom": "DUPONT", "titre": "Gérant", "telephone_direct": "0123456788", "email": "dupont@rushschool.fr" }, maitre_apprentissage={ "nom": "MARTIN", "prenom": "Jean", "date_naissance": date(1980, 5, 15), "numero_securite_sociale": "1800515123456", "fonction": "Responsable Formation", "diplome_plus_eleve": "Master en Sciences de l'Éducation", "niveau_diplome": "Master", "annees_experience": 10, "telephone": "0123456787", "email": "j.martin@rushschool.fr", "deja_maitre_apprentissage": "Oui" }, opco={ "nom_opco": "OPCO EP", "adresse": "12 Rue de l'OPCO", "code_postal": "75002", "ville": "Paris" }, contrat={ "nature_contrat": "Contrat", "type_derogation": "Aucune dérogation", "date_debut": date(2024, 9, 1), "date_fin": date(2026, 8, 31), "nombre_mois": 24, "duree_hebdomadaire": "35h", "poste_occupe": "Assistant Commercial", "base_calcul_salaire": "SMIC", "montant_salaire_brut": 1800.00 }, formation_missions={ "formation_alternant": "BTS MCO - Management Commercial Opérationnel" }, contact_taxe={ "fonction_contact": "Responsable RH", "telephone_contact": "0123456786", "email_contact": "rh@rushschool.fr" } ) # Valider et afficher print(fiche_entreprise.model_dump()) ``` ### Exemple JSON pour l'API ```json { "identification": { "raison_sociale": "RUSH SCHOOL SARL", "nom_entreprise": "Rush School", "siret": "12345678901234", "code_ape_naf": "8559A", "type_employeur": "SARL", "nombre_salaries": 50, "convention_collective": "Convention collective nationale de l'enseignement privé" }, "adresse": { "numero": "12", "voie": "Rue", "nom_rue": "de la Formation", "code_postal": "75001", "ville": "Paris", "telephone": "0123456789", "email": "contact@rushschool.fr" }, "representant_legal": { "nom": "DUPONT", "titre": "Gérant", "telephone_direct": "0123456788", "email": "dupont@rushschool.fr" }, "maitre_apprentissage": { "nom": "MARTIN", "prenom": "Jean", "date_naissance": "1980-05-15", "fonction": "Responsable Formation", "niveau_diplome": "Master", "annees_experience": 10, "telephone": "0123456787", "email": "j.martin@rushschool.fr", "deja_maitre_apprentissage": "Oui" }, "opco": { "nom_opco": "OPCO EP", "adresse": "12 Rue de l'OPCO", "code_postal": "75002", "ville": "Paris" }, "contrat": { "nature_contrat": "Contrat", "type_derogation": "Aucune dérogation", "date_debut": "2024-09-01", "date_fin": "2026-08-31", "duree_hebdomadaire": "35h", "poste_occupe": "Assistant Commercial", "base_calcul_salaire": "SMIC" }, "formation_missions": { "formation_alternant": "BTS MCO - Management Commercial Opérationnel" } } ``` ## ✅ Validation automatique Le modèle Pydantic effectue automatiquement les validations suivantes : 1. **SIRET** : Doit contenir exactement 14 caractères 2. **Email** : Format email valide (regex) 3. **Nombre de salariés** : Doit être >= 0 4. **Années d'expérience** : Doit être >= 0 5. **Montant salaire** : Si fourni, doit être >= 0 6. **Nombre de mois** : Si fourni, doit être >= 1 7. **Dates** : Format ISO (YYYY-MM-DD) 8. **Enums** : Valeurs restreintes aux options définies ## 🔄 Prochaines étapes recommandées 1. **Créer le repository Airtable** pour gérer la sauvegarde 2. **Créer le service** pour la logique métier 3. **Créer les routes API** (POST, GET, PUT, DELETE) 4. **Créer le formulaire frontend** en React/TypeScript 5. **Mapper les champs** vers les colonnes Airtable exactes ## 📚 Références - Documentation Pydantic : https://docs.pydantic.dev/ - Modèle InformationsPersonnelles : `app/models/admission.py` - Repository Airtable : `app/repositories/airtable_repository.py`