Stage 2026
Stage — Gestion budgétaire des Andelys
Application Web interne de préparation, arbitrage et export des budgets par section, exercice et type de dépense.
Compétences mobilisées — Bloc 1
Support et mise à disposition de services informatiques
C1
Gérer le patrimoine informatique
- C1.1 Recenser et identifier les ressources numériques
- C1.3 Mettre en place et vérifier les niveaux d'habilitation associés à un service
C2
Répondre aux incidents et aux demandes d'assistance et d'évolution
- C2.1 Collecter, suivre et orienter des demandes
C3
Développer la présence en ligne de l'organisation
- C3.3 Participer a l'évolution d'un site Web exploitant les données de l'organisation
C4
Travailler en mode projet
- C4.1 Analyser les objectifs et les modalites d'organisation d'un projet
- C4.2 Planifier les activités
- C4.3 Evaluer les indicateurs de suivi d'un projet et analyser les ecarts
C5
Mettre a disposition des utilisateurs un service informatique
- C5.2 Déployer un service
C6
Organiser son développement professionnel
- C6.1 Mettre en place son environnement d'apprentissage personnel
Contexte
Le projet centralise les demandes budgétaires des sections de la ville et remplace les tableaux isoles par un cycle partage : saisie, soumission, arbitrage, décision et export. Les responsables travaillent sur l'exercice principal et peuvent comparer les annees de reference.
La conception s'appuie sur un modèle de données relationnel, des droits par rôle et un historique des décisions. La documentation du projet décrit egalement le déploiement Symfony/PostgreSQL dans Docker.
Environnement technologique
PHP Symfony Doctrine ORM PostgreSQL Twig PhpSpreadsheet Dompdf Docker Compose
Preuves
Captures et documents
obligatoireUtilisateur <-> Section
Section -> Ligne budgétaire -> Montants par exercice
Ligne budgétaire -> Décision d'arbitrage
Accès affine par rôle et par section Détails techniques
Saisie -> Soumission -> Analyse -> Arbitrage -> Validation / Refus / Correction
Chaque décision est historisée et peut être restituée dans les exports. $isGlobal = array_intersect(['ROLE_ADMIN', 'ROLE_DIRECTION_GENERALE', 'ROLE_MAIRE'], $roles) !== [];
if (!$isGlobal) {
$sectionIds = [];
foreach ($user->getSections() as $s) {
$sectionIds[] = $s->getId();
}
if ($sectionIds === []) {
$qb->andWhere('l.creePar = :u')->setParameter('u', $user);
} else {
$qb->andWhere('l.section IN (:sids) OR l.creePar = :u')
->setParameter('sids', $sectionIds)
->setParameter('u', $user);
}
}