Skip to content

Commit

Permalink
feat: mise a jour indicateurs effectifs (#3643)
Browse files Browse the repository at this point in the history
  • Loading branch information
nkrmr authored Apr 25, 2024
1 parent f85c02a commit a6e1cd4
Show file tree
Hide file tree
Showing 23 changed files with 502 additions and 354 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/cron.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ async function run() {
const effectifs = data.indicateursEffectifs.reduce(
(acc, item) => {
acc.apprentis += item.apprentis;
acc.inscritsSansContrat += item.inscritsSansContrat;
acc.inscrits += item.inscrits;
acc.abandons += item.abandons;
acc.rupturants += item.rupturants;
acc.apprenants += item.apprenants;
Expand All @@ -17,7 +17,7 @@ async function run() {
},
{
apprentis: 0,
inscritsSansContrat: 0,
inscrits: 0,
abandons: 0,
rupturants: 0,
apprenants: 0,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ const allIndicateurAcl: Acl = {

export async function getIndicateursNational(filters: TerritoireFilters & DateFilters) {
const cacheKey = Object.keys(filters)
.toSorted()
.sort()
.reduce((acc, key) => {
if (key === "date") {
return acc + `:date=${format(filters.date, "yyyy-MM-dd")}`;
Expand Down
106 changes: 29 additions & 77 deletions server/src/common/actions/indicateurs/indicateurs.actions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import {
IndicateursEffectifsAvecOrganisme,
IndicateursOrganismes,
IndicateursOrganismesAvecDepartement,
STATUT_APPRENANT,
TypeEffectifNominatif,
} from "shared";

Expand All @@ -25,34 +26,23 @@ import { AuthContext } from "@/common/model/internal/AuthContext";
import { buildEffectifMongoFilters } from "./effectifs/effectifs-filters";
import { buildOrganismeMongoFilters } from "./organismes/organismes-filters";

function buildIndicateursEffectifsPipeline(groupBy: string | null, dateStatus: Date) {
function buildIndicateursEffectifsPipeline(groupBy: string | null, currentDate: Date) {
return [
{
$addFields: {
"apprenant.historique_statut": {
// TODO: s'assurer que le tableau est TOUJOURS trié, puis supprimer cette étape
$sortArray: {
input: {
dernierStatut: {
$arrayElemAt: [
{
$filter: {
input: "$apprenant.historique_statut",
input: "$_computed.statut.parcours",
as: "statut",
cond: {
$lte: ["$$statut.date_statut", dateStatus],
$lte: ["$$statut.date", currentDate],
},
},
},
sortBy: { date_statut: 1 },
},
},
},
},
{
$match: { "apprenant.historique_statut": { $not: { $size: 0 } } },
},
{
$addFields: {
statut_apprenant_at_date: {
$last: "$apprenant.historique_statut",
-1,
],
},
},
},
Expand All @@ -61,77 +51,39 @@ function buildIndicateursEffectifsPipeline(groupBy: string | null, dateStatus: D
_id: groupBy,
apprentis: {
$sum: {
$cond: {
if: { $eq: ["$statut_apprenant_at_date.valeur_statut", CODES_STATUT_APPRENANT.apprenti] },
then: 1,
else: 0,
},
$cond: [{ $eq: ["$dernierStatut.valeur", STATUT_APPRENANT.APPRENTI] }, 1, 0],
},
},
inscrits: {
$sum: {
$cond: [{ $eq: ["$dernierStatut.valeur", STATUT_APPRENANT.INSCRIT] }, 1, 0],
},
},
abandons: {
$sum: {
$cond: {
if: { $eq: ["$statut_apprenant_at_date.valeur_statut", CODES_STATUT_APPRENANT.abandon] },
then: 1,
else: 0,
},
$cond: [{ $eq: ["$dernierStatut.valeur", STATUT_APPRENANT.ABANDON] }, 1, 0],
},
},
inscritsSansContrat: {
rupturants: {
$sum: {
$cond: {
if: {
$and: [
{ $eq: ["$statut_apprenant_at_date.valeur_statut", CODES_STATUT_APPRENANT.inscrit] },
{
$eq: [
0,
{
$size: {
$filter: {
input: "$apprenant.historique_statut",
cond: {
$and: [
{ $eq: ["$$this.valeur_statut", CODES_STATUT_APPRENANT.apprenti] },
{ $lte: ["$$this.date_statut", dateStatus] },
],
},
limit: 1,
},
},
},
],
},
],
},
then: 1,
else: 0,
},
$cond: [{ $eq: ["$dernierStatut.valeur", STATUT_APPRENANT.RUPTURANT] }, 1, 0],
},
},
inscrits: {
finDeFormation: {
$sum: {
$cond: {
if: {
$eq: ["$statut_apprenant_at_date.valeur_statut", CODES_STATUT_APPRENANT.inscrit],
},
then: 1,
else: 0,
},
$cond: [{ $eq: ["$dernierStatut.valeur", STATUT_APPRENANT.FIN_DE_FORMATION] }, 1, 0],
},
},
},
},
{
$project: {
_id: 1,
apprenants: {
$sum: ["$apprentis", "$inscrits"],
},
apprenants: { $sum: ["$apprentis", "$inscrits", "$rupturants", "$finDeFormation"] },
apprentis: 1,
inscritsSansContrat: 1,
inscrits: 1,
abandons: 1,
rupturants: { $subtract: ["$inscrits", "$inscritsSansContrat"] },
rupturants: 1,
finDeFormation: 1,
},
},
];
Expand All @@ -158,7 +110,7 @@ export async function getIndicateursEffectifsParDepartement(
departement: "$_id",
apprenants: 1,
apprentis: 1,
inscritsSansContrat: 1,
inscrits: 1,
abandons: 1,
rupturants: 1,
},
Expand Down Expand Up @@ -519,7 +471,7 @@ export async function getIndicateursEffectifsParOrganisme(

apprenants: 1,
apprentis: 1,
inscritsSansContrat: 1,
inscrits: 1,
abandons: 1,
rupturants: 1,
},
Expand Down Expand Up @@ -552,7 +504,7 @@ export async function getOrganismeIndicateursEffectifsParFormation(
rncp_code: "$_id",
apprenants: 1,
apprentis: 1,
inscritsSansContrat: 1,
inscrits: 1,
abandons: 1,
rupturants: 1,
},
Expand Down Expand Up @@ -764,7 +716,7 @@ export async function getOrganismeIndicateursEffectifs(
_id: 0,
apprenants: 1,
apprentis: 1,
inscritsSansContrat: 1,
inscrits: 1,
abandons: 1,
rupturants: 1,
},
Expand All @@ -775,7 +727,7 @@ export async function getOrganismeIndicateursEffectifs(
indicateurs ?? {
apprenants: 0,
apprentis: 0,
inscritsSansContrat: 0,
inscrits: 0,
abandons: 0,
rupturants: 0,
}
Expand Down
1 change: 1 addition & 0 deletions server/src/http/routes/specific.routes/organisme.routes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ export async function getOrganismeEffectifs(organismeId: ObjectId, sifa = false)
prenom: effectif.apprenant.prenom,
date_de_naissance: effectif.apprenant.date_de_naissance,
historique_statut: effectif.apprenant.historique_statut,
statut: effectif._computed?.statut,
...(sifa
? {
requiredSifa: compact(
Expand Down
Loading

0 comments on commit a6e1cd4

Please sign in to comment.