Aller au contenu

La planification

Avant d'être exécuté, un OF est découpé en cycles. C'est le rôle de la chaîne de planification, symétrique du moteur d'exécution : un tronc générique (ALL - …), encadré par une entrée et un callback spécifiques à chaque séquence.

La chaîne

flowchart TD
    A[Entrée séquence<br/><br/>CC / EX - Planification des cycles] --> B[ALL - Vérification de planification<br/><br/>Contrôles OF, quantité, équipement]
    B --> C[ALL - Création d'un cycle<br/><br/>Crée l'entité CYCLE, met à jour le poids planifié]
    C --> D[Callback séquence<br/><br/>CC / EX - Planification - callback]
    D -->|is_last_cycle = faux| B
    D -->|is_last_cycle = vrai| E[Fin : OF entièrement planifié]

L'entrée (spécifique séquence)

CC - Planification des cycles / EX - Planification des cycles collectent les paramètres du premier cycle (voir Dérouler une production), résolvent ep_id depuis l'équipement choisi, posent sequence_type, empaquettent les champs spécifiques (provenances) dans le payload, puis lancent ALL - Vérification de planification.

ALL - Vérification de planification

Start-form : of_id, cycle_weight_base, ep_id, recette_id, planified_date, sequence_type, payload.

Contrôles successifs, chacun avec sa branche d'erreur :

  • OF disponible (activité et statut) : sinon OF non disponible.
  • Quantité à produire valable : sinon Pas de quantité.
  • Poids du cycle non vide : sinon Poids du cycle non vide.
  • Équipement concerné valide : sinon Pas un équipement concerné.

Cas particulier de la replanification : si l'OF est déjà planifié (already_planned), une confirmation est demandée, puis le statut Planifié est retiré avant de recalculer. La tâche calcule ensuite les quantités et l'index de cycle, et lance ALL - Création d'un cycle.

ALL - Création d'un cycle

Start-form identique (avec recette_id obligatoire). Le BPM :

  1. crée l'entité CYCLE (BPMTaskCreateEntity) et la rattache à l'OF,
  2. renseigne ses propriétés (poids, recette, index, date),
  3. positionne son statut / activité initiale,
  4. met à jour le poids planifié et l'index de cycle sur l'OF,
  5. lance le callback de la séquence.

Callback dynamique

Le nom du callback n'est pas figé : Création d'un cycle lance le BPM dont le nom lui est passé dans la variable bpmName, fournie par l'entrée. Le tronc générique reste ainsi ignorant des séquences.

Le callback (spécifique séquence)

CC - Planification des cycles - callback / EX - Planification des cycles - callback reçoivent le cycle_id créé et désempaquettent le payload pour écrire les champs spécifiques sur le cycle :

  • CC : CYCLE_PROVENANCE_CYCLE ou CYCLE_PROVENANCE_CUVON (selon have_cycle / have_cuvon).
  • EX : CYCLE_PROVENANCE_CONTENEUR_R1 / R2 (selon have_r1 / have_r2).

Puis la boucle : tant que is_last_cycle est faux, le callback relance ALL - Création d'un cycle avec le poids restant (weight_to_planified) pour le cycle suivant. Quand is_last_cycle est vrai, la planification s'arrête.

is_last_cycle est un champ confirmation

Il renvoie la chaîne "boolean_true" / "boolean_false", d'où le double test is_last_cycle == TRUE || is_last_cycle == true dans les conditions (voir conventions).

Lancer un cycle planifié

Une fois la planification faite, ALL - Démarrage d'une séquence (start-form : cycle_id) démarre un cycle :

  1. contrôle que le cycle est dans un état valide et que l'équipement est disponible (sinon statut incorrect / EP indisponible),
  2. recopie les paramètres du cycle sur l'équipement,
  3. passe le cycle en cours,
  4. lance ALL - Prochaine étape, qui prend le relais pour toute l'exécution.