Thursday, February 8, 2024

It seems that we want a new database model for contracts in Lino Welfare. This new contract model is called “Activation SINE”. Question for a brainstorming: which database fields should this new model have?

>>> from lino import startup
>>> startup('lino_welfare.projects.mathieu.settings.demo')
>>> from lino.api.doctest import *
>>> def fmt(f):
...   if hasattr(f, 'verbose_name'):
...     return "{} ({}) {}".format(f.name, f.verbose_name, f.__class__.__name__)
...   return "{} ({})".format(f.name, f)
>>> base_fields = set([f.name for f in isip.ContractBase._meta.get_fields()])
>>> from lino.core.fields import VirtualField
>>> def show(f):
...     if f.name in base_fields: return False
...     if isinstance(f, VirtualField): return False
...     return True

Classes de contrats

Here is a list of the contracts classes we currently differentiate in Lino

>>> langs = ["en", "fr"]
>>> rows = []
>>> for m in rt.models_by_base(isip.ContractBase):
...     cells = [dd.full_model_name(m)]
...     for lng in langs:
...       with translation.override(lng):
...         cells.append(str(m._meta.verbose_name))
...     rows.append(cells)
>>> print(rstgen.table(["model"]+langs, rows))
==================== ======================== =========================
 model                en                       fr
-------------------- ------------------------ -------------------------
 art60.Contract       Art60§7 job supplyment   Mise à l'emploi art60§7
 art61.Contract       Art61 job supplyment     Mise à l'emploi art.61
 immersion.Contract   Immersion training       Stage d'immersion
 isip.Contract        ISIP                     PIIS
==================== ======================== =========================

List of fields that are common to all contracts:

>>> for f in isip.ContractBase._meta.get_fields():
...     print(fmt(f))
signer1 (Secrétaire) ForeignKey
signer2 (Président) ForeignKey
user (Titulaire (SI)) ForeignKey
printed_by (Imprimé) ForeignKey
client (client) ForeignKey
language (Langue) LanguageField
applies_from (Début de contrat) DateField
applies_until (Fin prévue) DateField
date_decided (Décidé le) DateField
date_issued (Date de signature) DateField
user_asd (Titulaire (SSG)) ForeignKey
exam_policy (exam policy) ForeignKey
ending (ending) ForeignKey
date_ended (Date de fin) DateField

Remarks:

  • art60.Contract is the only model with multiple conventions per contract.

Mise à l’emploi art60§7

>>> print(art60.Contract._meta.verbose_name)
Mise à l'emploi art60§7
>>> for f in art60.Contract._meta.get_fields():
...   if show(f):
...     print(fmt(f))
convention (<ManyToOneRel: art60.convention>)
id (ID) BigAutoField
duration (Jours ONSS) IntegerField
remark (Remarque) TextField
type (Type) ForeignKey
>>> for f in art60.Convention._meta.get_fields():
...   if not isinstance(f, VirtualField):
...     print(fmt(f))
id (ID) BigAutoField
contact_person (Représenté par) ForeignKey
contact_role (En tant que) ForeignKey
reference_person (persone de référence) CharField
responsibilities (responsabilités) RichTextField
company (Service utilisateur) ForeignKey
contract (Mise à l'emploi art60§7) ForeignKey
job (Poste de travail) ForeignKey
start_date (Date début) DateField
regime (Régime de travail) ForeignKey
schedule (Horaire) ForeignKey
monthly_refund (Rétrocession mensuelle) PriceField
hourly_rate (coût horaire) PriceField
refund_rate (tarif de remboursement) CharField

Mise à l’emploi art.61

>>> print(art61.Contract._meta.verbose_name)
Mise à l'emploi art.61
>>> for f in art61.Contract._meta.get_fields():
...   if show(f):
...     print(fmt(f))
id (ID) BigAutoField
contact_person (Représenté par) ForeignKey
contact_role (En tant que) ForeignKey
sector (Secteur d'activité) ForeignKey
function (Fonction professionnelle) ForeignKey
reference_person (persone de référence) CharField
responsibilities (responsabilités) RichTextField
duration (Jours ONSS) IntegerField
remark (Remarque) TextField
company (Employeur) ForeignKey
type (Type) ForeignKey
job_title (Fonction professionnelle) CharField
status (Statut) ForeignKey
cv_duration (Type de contrat) ForeignKey
regime (Régime de travail) ForeignKey
sub_10_amount (Aide à l'emploi) PriceField
sub_10_start (Depuis) DateField
sub_10_end (Jusqu'à) DateField
sub_20_amount (Tutorat) PriceField
sub_20_start (Depuis) DateField
sub_20_end (Jusqu'à) DateField
sub_30_amount (Région Wallonne) PriceField
sub_30_start (Depuis) DateField
sub_30_end (Jusqu'à) DateField

PIIS

>>> print(isip.Contract._meta.verbose_name)
PIIS
>>> for f in isip.Contract._meta.get_fields():
...   if show(f):
...     print(fmt(f))
contractpartner (<ManyToOneRel: isip.contractpartner>)
id (ID) BigAutoField
type (Type de contrat) ForeignKey
study_type (Type d'éducation) ForeignKey
stages (stages) RichTextField
goals (buts) RichTextField
duties_asd (Obligations du service social) RichTextField
duties_dsbe (Obligations du service d'insertion) RichTextField
duties_pcsw (Obligations du CPAS) RichTextField
duties_person (Obligations du bénéficiaire) RichTextField
user_dsbe (Titulaire (SI)) ForeignKey

Stage d’immersion

>>> print(immersion.Contract._meta.verbose_name)
Stage d'immersion
>>> for f in immersion.Contract._meta.get_fields():
...   if show(f):
...     print(fmt(f))
id (ID) BigAutoField
contact_person (Représenté par) ForeignKey
contact_role (En tant que) ForeignKey
sector (Secteur d'activité) ForeignKey
function (Fonction professionnelle) ForeignKey
company (Organisation) ForeignKey
type (Type de stage d'immersion) ForeignKey
goal (Objectif) ForeignKey
reference_person (persone de référence) CharField
responsibilities (responsabilités) RichTextField
remark (Remarque) TextField

Différence entre “Service utilisateur” et “Employeur”

Les postes de travail ne devraient-ils pas être offerts par les employeurs plutot que par les services utilisateurs?

jobs.Job.provider is currently a pointer to JobProvider but shouldn’t it point to Employer instead?

>>> print(jobs.Job._meta.verbose_name)
Poste de travail
>>> print(jobs.JobProvider._meta.verbose_name)
Service utilisateur
>>> print(jobs.Employer._meta.verbose_name)
Employeur