Spaces:
Sleeping
Sleeping
| # 📋 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` | |