esf
: European Social Fund¶
The lino_welfare.modlib.esf
plugin helps writing yearly reports for the
European Social Fund
(ESF).
Side note: Code snippets (lines starting with >>>
) in this document get
tested as part of our development workflow. The following
initialization snippet tells you which demo project is being used in
this document.
>>> from lino import startup
>>> startup('lino_welfare.projects.mathieu.settings.demo')
>>> from lino.api.doctest import *
Dependencies¶
This plugin needs lino.modlib.summaries
and
lino.modlib.weasyprint
: A client summary is a subclass of
lino.modlib.summaries.MonthlySlaveSummary
>>> dd.plugins.esf.needs_plugins
['lino.modlib.summaries', 'lino.modlib.weasyprint']
This plugin injects
a field has_esf
to every client
and a field esf_field
to every calendar entry type.
Client summaries¶
A client summary is a database entry holding statistical information for a given year about a given client. Client summaries are generated database content. Every client summary can be printed as a document called “Fiche stagiaire”.
- class lino_welfare.modlib.esf.ClientSummary¶
The Django model that represents a client summary.
It is a
lino.modlib.summaries.MonthlySlaveSummary
andlino_xl.lib.excerpts.Certifiable
.
List of the data fields per client summary:
client : a pointer to the
Client
The observed period (start_date and end_date, usually one calendar year)
The remaining fields are configured in the SummaryFields
choicelist.
Situation professionnelle à l’entrée: Bénéficiaire CPAS (ce sera uniquement cette appellation)
Inoccupé(e) depuis : date field filled from «Cherche du travail depuis» date FSE (onglet RAE))
Ménage: combo box (“ménage sans emploi”, “ménage dont au moins 1 personne occupe un emploi”)
Enfant(s) à charge: checkbox
Niveau diplôme: combobox (Sans diplôme - CEB - CE1D - CESI - CESS-CQ6-CE6P-7P - Bachelier-graduat - Master-licence - Enseignement secondaire complémentaire - Non reconnu – inconnu)
Handicap reconnu: checkbox
Autre difficulté rencontrée: checkbox
Date d’entrée: reprendre date de l’atelier « Séance d’information »
Contrat de travail sous art. 60 depuis le: date field filled from jobs.Contract
Date de sortie: Onglet intervenant – module intervention date « au »
Type de sortie: Onglet intervenants – Module intervention - « Cause d’abandon »
Acquis en fin de formation : filled from Onglet Compétence – Module compétences professionnelles - case « Preuve de qualification »
Attestation de participation: combobox (Epreuve d’évaluation réussie sans titre spécifique - Certificat sectoriel - Titre de validation des compétences - Certificat de valorisation de l’acquis de l’expérience - Diplôme ou certificat délivré par un établissement scolaire - Pas d’acquis)
- class lino_welfare.modlib.esf.Summaries¶
Base class for all tables on
ClientSummary
.
- class lino_welfare.modlib.esf.AllSummaries¶
Lists all ESF summaries for all clients.
- class lino_welfare.modlib.esf.SummariesByClient¶
Lists the ESF summaries for a given client.
HoursByDossier¶
And then the module provides a way for defining a series of “statistical numbers” which represent the activity of that client during a given period.
For most fields this is the total duration of presences (Guest
objects) of that client.
Information : Séance d’info. (2h FSE)
Orientation - suivi:
Entretien individuel (1h FSE)
Evaluation formation externe et art.61 (1h FSE)
Mobilisation : S.I.S. agréé (en fonction de la participation à un ou plusieurs ateliers)
Apprentissage de base
Test de niveau (math, français, informatique) (3h FSE)
Initiation informatique (3h FSE)
Mobilité (3h FSE)
Remédiation mathématique et français (3h FSE)
Module projet : Activons-nous (3h FSE)
Mise en situation professionnelle Case « Heure » à ajouter au module
Recherche d’emploi : Cyber emploi (à discuter)
Mise à l’emploi sous contrat art.60§7 (Sélection des années – case Heure)
This distribution will probably require a choicelist with one choice for each field.
These fields will probably not be columns of a slave table but (dynamicaly generated) database fields in the Dossier model.
There will also be a pointer to (one entry per courses.Line as it seems), but some columns are special and require a hard-coded method.
Notes de discussion¶
Par bénéficiaire il peut y avoir plusieurs fiches stagiaire au cours du temps. En principe une fiche pour chaque stage.
Où dans le détail du bénéficaire faut-il afficher ce panneau avec les “fiches stagiaire”? –> dans l’onglet “Historique”
Idéal serait d’avoir une checkbox “Générer fiches stagiaire” par bénéficiaire.
Bouton “Remplir les données”
la fiche est un document à usage interne utilisé par Sandra pour encoder les données dans un fichier Excel protégé issu par X.
Colonne “Mise en situation professionnelle” : calculer les heures par stage d’immersion, en fonction des dates de début et de fin et de l’horaire de travail.
Colonne “Recherche d’emploi” : Somme des présences aux ateliers “Cyber-emploi”, mais pour ces ateliers on note les heures d’arrivée et de départ par participation.
Colonne “Mise à l’emploi sous contrat a60” : comme pour “Mise en situation professionnelle”
Tous les “champs statistiques” représentent des heures de présences. Il y a deux modes d’encodage de présences des ateliers: soit avec soit sans les heures de d’arrivée de départ individuelles. Par exemple en Insertion si la personne arrive en retard, elle aura les heures de présence de l’évènement (tant pis pour la statistique).
Par type d’entrée calendrier on doit configurer le champ FSE dans lequel seront totalisés les heures.
>>> rt.show(cal.EventTypes, language="fr")
...
======================================== ======================================== =============================== ======================== ==============================
Désignation Désignation (de) Désignation (en) Inviter le bénéficiare Champ FSE
---------------------------------------- ---------------------------------------- ------------------------------- ------------------------ ------------------------------
Absences Abwesenheiten Absences Non
Atelier Atelier Workshop Non
Consultations avec le bénéficiaire Beratungen mit Klient Consultations with client Non
Informational meetings Informational meetings Informational meetings Oui S.I.S. agréé
Internal meetings with client Internal meetings with client Internal meetings with client Oui Séance d’information
Interne Intern Internal Non
Jours fériés Feiertage Holidays Non
Privé Privat Private Non
Réunion Versammlung Meeting Non
Réunions externe Réunions externe External meetings Non
Réunions externes avec le bénéficiaire Réunions externes avec le bénéficiaire External meetings with client Oui Evaluation formation externe
Réunions interne Réunions interne Internal meetings Non
Évaluation Auswertung Evaluation Oui Entretien individuel
======================================== ======================================== =============================== ======================== ==============================
- class lino_welfare.modlib.esf.StatisticalFields¶
>>> rt.show(esf.StatisticalFields, language="fr")
======= ============ =================================== =================
value Short name text Type
------- ------------ ----------------------------------- -----------------
10 S.Inf Séance d’information GuestHoursFixed
20 E.Ind Entretien individuel GuestHoursFixed
21 E.For Evaluation formation externe GuestHoursFixed
30 SIS S.I.S. agréé GuestHoursFixed
40 Tst Tests de niveau GuestHoursFixed
41 Info Initiation informatique GuestHoursFixed
42 Mob Mobilité GuestHoursFixed
43 Rem Remédiation GuestHoursFixed
44 AN! Activons-nous! GuestHoursEvent
50 MSP Mise en situation professionnelle ImmersionHours
60 CyE Cyber Emploi GuestHoursEvent
70 60§7 Mise à l’emploi art.60§7 Art60Hours
======= ============ =================================== =================
Les types de champ suivants sont disponibles par défaut:
GuestHours>
>>> # rt.show(esf.AllSummaries)
>>> dd.plugins.summaries.start_year
2012
>>> dd.plugins.summaries.end_year
2014
>>> obj = pcsw.Client.objects.get(pk=116)
>>> print(obj)
AUSDEMWALD Alfons (116)
The field has_esf
must be checked:
>>> print(obj.has_esf)
True
>>> show_fields(rt.models.pcsw.Client, 'has_esf')
- ESF data (has_esf) : Whether Lino should make ESF summaries for this client.
>>> rt.show(esf.SummariesByClient, obj, language="en")
====== ======= ======= ======= ====== ====== ====== ====== ====== ====== ====== ====== ======
Year S.Inf E.Ind E.For SIS Tst Info Mob Rem AN! MSP CyE 60§7
------ ------- ------- ------- ------ ------ ------ ------ ------ ------ ------ ------ ------
2012 0:00 3:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00
2013 0:00 11:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00
2014 2:00 11:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00
====== ======= ======= ======= ====== ====== ====== ====== ====== ====== ====== ====== ======
Running check_summaries will have no effect since data has been
checked as part of pm prep
:
>>> rt.login().run(obj.check_summaries)
{'refresh': True}
The data has not changed:
>>> rt.show(esf.SummariesByClient, obj, language="en")
====== ======= ======= ======= ====== ====== ====== ====== ====== ====== ====== ====== ======
Year S.Inf E.Ind E.For SIS Tst Info Mob Rem AN! MSP CyE 60§7
------ ------- ------- ------- ------ ------ ------ ------ ------ ------ ------ ------ ------
2012 0:00 3:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00
2013 0:00 11:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00
2014 2:00 11:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00
====== ======= ======= ======= ====== ====== ====== ====== ====== ====== ====== ====== ======
As another example, here is the ESF summary for a client with job supplyments:
>>> art60.Contract.objects.values_list('client', flat=True)
<QuerySet [118, 126, 132, 137, 137, 146, 152, 152, 159, 159, 165, 178, 180, 180]>
We pick one of above clients.
>>> obj = pcsw.Client.objects.get(pk=118)
>>> rt.show(esf.SummariesByClient, obj, language="en")
====== ======= ======= ======= ====== ====== ====== ====== ====== ====== ====== ====== ========
Year S.Inf E.Ind E.For SIS Tst Info Mob Rem AN! MSP CyE 60§7
------ ------- ------- ------- ------ ------ ------ ------ ------ ------ ------ ------ --------
2012 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 463:36
2013 0:00 3:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00
2014 0:00 0:00 1:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00
====== ======= ======= ======= ====== ====== ====== ====== ====== ====== ====== ====== ========
Choicelists¶
- class lino_welfare.modlib.esf.choicelists.ParticipationCertificates¶
- class lino_welfare.modlib.esf.choicelists.StatisticalField¶
Base class for all statistical fields.
- field_name¶
The internal field name.
- field¶
The field descriptor (an instance of a Django Field)
- class lino_welfare.modlib.esf.choicelists.GuestCount¶
Count the number of presences.
Not used in reality.
- class lino_welfare.modlib.esf.choicelists.GuestHours¶
Count the real hours of presence.
- class lino_welfare.modlib.esf.choicelists.GuestHoursEvent¶
Count the event’s duration for each presence.
- class lino_welfare.modlib.esf.choicelists.GuestHoursFixed¶
Count a fixed time for each presence.
- class lino_welfare.modlib.esf.choicelists.ImmersionHours¶
- class lino_welfare.modlib.esf.choicelists.Art60Hours¶