Contrôles embarqués dans EFE

📄 Consulter le questionnaire de contrôle (connexion GitLab requise)

📄 lien de test Voxco avec controle effectif sexe


Erreur 0 — L’effectifs de formé toutes formations supérieur à effectif salarié

Cette erreur détecte les cas où le nombre de salariés formés toutes formations confondues (c0tot) est supérieur au nombre total de salariés (a2tot), ce qui est incohérent.

efe_erreur <- efe_erreur |>
  mutate(erreur0 = ifelse(c0tot > a2tot & !is.na(c0tot), 1, 0))

Proposition de doubler la question c0tot avec message d’avertissement quand c0tot>a2tot.

“Attention le nombre de salarié formé est superieur à l’effectif total (A2TOT salariés) Merci de corriger ou de valider en cliquant sur suivant.”


Erreur 1 — Répartition des salariés par sexe incohérente

Ce test vérifie que le total par sexe correspond bien au total des salariés (a2tot),
avec une tolérance de ±20 % pour les entreprises de plus de 50 salariés.

efe_erreur <- efe_erreur |>
mutate(
erreur1 = ifelse(a2tot < 50 & ((a2totsexe != a2tot) | a2f > a2tot | a2m > a2tot), 1, 0),
erreur1 = ifelse(a2tot > 50 & (
(a2totsexe > round(a2tot*1.20)) |
(a2totsexe < round(a2tot*0.80))
), 1, erreur1)
)

Proposition de doubler la question a2sexe avec message d’avertissement quand a2sexe > a2tot ou a2sexe < a2tot. Message différencier quand la répartition par sexe et supérieur ou inférieur. (voir test dans la questionnaire voxco)


Erreur 1 bis — ⚠️ nouveau controle ⚠️ Répartition des salariés par CS et SEXE incohérente

Proposition de doubler la question a2tot_sexe_cs avec un message d’avertissement : “La répartition des hommes par catégorie socioprofessionnelle ne correspond pas à l’effectif total masculin. Merci de corriger.” ou “La répartition des hommes par catégorie socioprofessionnelle ne correspond pas à l’effectif total féminin. Merci de corriger.”

voir questionnaire voxco


Erreur 1 ter — ⚠️ nouveau controle ⚠️ Répartition des salariés par age

Proposition de doubler la question a2tot_age avec un message d’avertissement :

“La répartition des salariés par catégorie d’age ne correspond pas à l’effectif total (a2tot salariés). Merci de corriger.”


Tests sur les formés

Erreur 2 — Formés cours et stages > formés toutes formations

Cette erreur signale les cas où c1tot (cours ou stages) dépasse c0tot (toutes formations).

efe_erreur <- efe_erreur |>
mutate(
erreur2 = ifelse(entform == 1 & c1tot > c0tot, 1, 0),
erreur2 = ifelse(is.na(erreur2), 0, erreur2)
)

Proposition de doubler la question c1tot avec un avertissement. “Attention, le nombre de salariés formés de votre structure (c0tot salariés) est supérieur au nombre de salarié formé uniquement en cours et stages (c1tot). Merci de corriger.”

Tableau pré rempli avec les anciennes valeurs c0tot et c1tot qui sont modifiables


Erreur 2bis — Formés cours/stages renseignés mais pas de total de formé toutes formes

efe_erreur <- efe_erreur |>
mutate(erreur2bis = ifelse(is.na(c0tot) & c1tot > 0, 1, 0))

Proposition de suppression de ce controle ou rendre obligatoire c0tot


Erreur 4 — Formés cours et stages superieur à l’effectif salarié total

seuil 10 %

efe_erreur <- efe_erreur |>
mutate(
  erreur4 = ifelse(c1tot * 0.90 > a2tot, 1, 0)
  )

Proposition de doubler la question c1tot avec message un message d’avertissement sans seuil.

“Attention le nombre de salarié formé en cours et satge (c1tot salariés) de votre structure est supérieure au l’effectif total (a2tot salariés). Merci de corriger le nombre de salarié formé.”


Erreur 5 — Répartition par sexe des formés incohérente

Vérifie que la somme des formés hommes et femmes (c2m + c2f) correspond au total (c1tot). Seuil ±20 % pour les entreprises de plus de 50 salariés.

efe_erreur <- efe_erreur |>
mutate(
erreur5 = ifelse(a2tot <= 50 & (c2m + c2f != c1tot), 1, 0),
erreur5 = ifelse(a2tot > 50 & (
(c2m + c2f > round(c1tot * 1.20)) |
(c2m + c2f < round(c1tot * 0.80))
), 1, erreur5),
erreur5 = ifelse((b1a == "Oui" | b1b == "Oui") & c1tot == 0, 1, erreur5)
)

proposition équivalente a celle pour les répartitions d’effectif


Erreur 5 bis — ⚠️ nouveau controle ⚠️ Répartition par sexe et CS des formés incohérente

proposition équivalente a celle pour les répartitions d’effectif


Erreur 5 ter — ⚠️ nouveau controle ⚠️ Répartition par age des formés incohérente

proposition équivalente a celle pour les répartitions d’effectif


Erreur 6 — Formations indiquées mais aucune heure déclarée

efe_erreur <- efe_erreur |>
mutate(
  erreur6 = ifelse((b1a == "Oui" | b1b == "Oui") & c3tot == 0, 1, 0)
  )

Proposition de rendre la question obligatoire ou semi bloquante.


Tests sur les dépenses et masse salariale

Erreur 9 — Taux de participation financière trop élevé

TPF>20

efe_erreur <- efe_erreur |>
mutate(
tpf = ifelse((entform == 1 & ms > 0), c7sub/ms*100, 9998),
erreur9 = ifelse((entform == 1 & tpf > 20 & tpf != 9998), 1, 0)
)

Proposition message d’avertissement si la MS dépasse un certain seuil à définir en fonction de a2tot alors : “Attention votre masse salariale nous semble élevé/faible au regarde de votre nombre de salariés (a2tot). Merci de la corriger.”

Proposition de message d’avertissement si c7sub trop élevé. c7sub > 5 x MS “Attention, les dépenses pour les cours ou stages de form pro, nous semble trop élevé au regard de votre MS €. Merci de corriger”


Tests sur les heures de formation

Erreur 11 — Heures de formation > heures travaillées

efe_erreur <- efe_erreur |>
mutate(
a4 = as.numeric(a4),
c3tot = as.numeric(c3tot),
erreur11 = ifelse(
entform == 1 & ((a2tot < 50 & c3tot > a4) | (a2tot >= 50 & c3tot > a4 * 1.20)),
1, 0)
)

Proposition de suppression du seuil et message d’avertissement dès lors que c3tot > a4 : “Attention, le nb d’heure de formation (c3tot heures) est supérieur au nb d’heure travaillé a4. Merci de corriger.”

Erreur 12 — Durée moyenne de formation trop élevée

supérieur à 200h par tête

efe_erreur <- efe_erreur |>
mutate(erreur12 = ifelse(c1tot > 1 & c3tot / c1tot > 200, 1, 0))

Proposition de message d’avertissement dès lors que c3tot> 200 x c1tot.

“Attention le nb d’heure de formation déclaré nous parait élevé au regard du nombre de salarié formé. Merci de corriger.”


Tests sur les recettes et dépenses de formation

###Erreur 17 — Non déclaration des remboursements OPCO

efe_erreur <- efe_erreur |>
mutate(
erreur17 = ifelse(
((b6b == "Oui" & a7f == "Oui" & b6bsom_ht %in% c(0, NA)) |
(b6b == "Oui" & a7f == "Non" & b6bsomttc %in% c(0, NA))),
1, 0
)
)

Proposition rendre la question obligatoire ou semi bloquante


Préparation des cas pour erreurs 45 et 46

Cas 1 — Frais pédagogiques vides

efe_erreur <- efe_erreur |>
mutate(
cas1ht = ifelse(
(a7f == "Oui" & (b1a == "Oui" | b1b == "Oui") &
(c7aflag1 == "Oui" | c7aflag2 == "Oui" | c7aflag3 == "Oui") &
(c7a1a %in% c(0, NA) | c7a2ht %in% c(0, NA))),
1, 0
),
cas1ttc = ifelse(
(a7f == "Non" & (b1a == "Oui" | b1b == "Oui") &
(c7aflag1 == "Oui" | c7aflag2 == "Oui" | c7aflag3 == "Oui") &
(c7a1b %in% c(0, NA) | c7a2ttc %in% c(0, NA))),
1, 0
)
)

Cas 2 — Frais de déplacement et hébergement vides

efe_erreur <- efe_erreur |>
mutate(
cas2ht = ifelse(
(a7f == "Oui" & (b1a == "Oui" | b1b == "Oui") &
c7bflag == "Oui" & c7bht %in% c(0, NA)),
1, 0
),
cas2ttc = ifelse(
(a7f == "Non" & (b1a == "Oui" | b1b == "Oui") &
c7bflag == "Oui" & c7bttc %in% c(0, NA)),
1, 0
)
)

Cas 3 — Frais de personnel des formateurs internes vides

efe_erreur <- efe_erreur |>
mutate(
cas3ht = ifelse(
(a7f == "Oui" & (b1a == "Oui" | b1b == "Oui") &
c7cflag == "Oui" & c7c %in% c(0, NA)),
1, 0
),
cas3ttc = ifelse(
(a7f == "Non" & (b1a == "Oui" | b1b == "Oui") &
c7cflag == "Oui" & c7c %in% c(0, NA)),
1, 0
)
)

Cas 4 — Frais liés à l’organisation de la formation vides

efe_erreur <- efe_erreur |>
mutate(
cas4ht = ifelse(
(a7f == "Oui" & (b1a == "Oui" | b1b == "Oui") &
c7dflag == "Oui" & c7dht %in% c(0, NA)),
1, 0
),
cas4ttc = ifelse(
(a7f == "Non" & (b1a == "Oui" | b1b == "Oui") &
c7dflag == "Oui" & c7dttc %in% c(0, NA)),
1, 0
)
)

— Au moins un flag vide → demande de C7sub

efe_erreur <- efe_erreur |>
mutate(
cas5 = ifelse(
(b1a == "Oui" | b1b == "Oui") &
((c7aflag1 == "" & c7aflag2 == "" & c7aflag3 == "") |
c7bflag == "" |
((c6f3a %in% c("Oui, à temps plein", "Oui, occasionnellement") | c6f3b == "Oui") &
c7cflag == "") |
c7dflag == ""),
1, 0
)
)

Erreurs 45 et 46 — Montants totaux manquants selon cas

Demande de C7sub ttc ou ht

efe_erreur <- efe_erreur |>
mutate(
erreur45 = ifelse(
(cas1ht == 1 | cas2ht == 1 | cas3ht == 1 | cas4ht == 1 | cas5 == 1) &
c7sub == 0 & a7f == "Non",
1, 0
),
erreur46 = ifelse(
(cas1ttc == 1 | cas2ttc == 1 | cas3ttc == 1 | cas4ttc == 1 | cas5 == 1) &
c7sub == 0 & a7f == "Oui",
1, 0
)
)

Proposition de rendre C7sub bloquant ou semi bloquant