Files
unionflow-server-impl-quarkus/src/main/java/dev/lions/unionflow/server/entity/ValidationEtapeDemande.java
lionsdev 6e9841b3bb
Some checks failed
CI/CD Pipeline / pipeline (push) Failing after 3m22s
fix(disaster-recovery 2/2): restaurer 242 fichiers Java modifiés par a72ab54
Suite à la récupération précédente (044ca4b) qui n'avait restauré que les
fichiers SUPPRIMÉS, ce commit restaure les MODIFICATIONS d'entités/services
qui étaient nécessaires pour que les fichiers restaurés compilent.

Restaurés depuis a72ab54^ (= 31330d9 + corrections) :
- Entities : Organisation, FormuleAbonnement, AuditService, MembreOrganisation, SouscriptionOrganisation, etc.
- Services : MigrerOrganisationsVersKeycloakService, ComptabilitePdfService, KycAmlService, AuditService.logKycRisqueEleve, etc.
- Resources : PaiementUnifieResource, etc.

Backend compile désormais (BUILD SUCCESS).
2026-04-25 01:05:08 +00:00

92 lines
3.0 KiB
Java

package dev.lions.unionflow.server.entity;
import dev.lions.unionflow.server.api.enums.solidarite.StatutValidationEtape;
import jakarta.persistence.*;
import jakarta.validation.constraints.*;
import java.time.LocalDateTime;
import lombok.*;
/**
* Historique des validations pour une demande d'aide.
*
* <p>Chaque ligne représente l'état d'une étape du workflow pour une demande.
* La délégation de véto (valideur absent) est tracée avec motif — conformité BCEAO/OHADA.
*
* <p>Table : {@code validation_etapes_demande}
*/
@Entity
@Table(
name = "validation_etapes_demande",
indexes = {
@Index(name = "idx_ved_demande", columnList = "demande_aide_id"),
@Index(name = "idx_ved_valideur", columnList = "valideur_id"),
@Index(name = "idx_ved_statut", columnList = "statut")
})
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@EqualsAndHashCode(callSuper = true)
public class ValidationEtapeDemande extends BaseEntity {
@NotNull
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "demande_aide_id", nullable = false)
private DemandeAide demandeAide;
@NotNull
@Min(1) @Max(3)
@Column(name = "etape_numero", nullable = false)
private Integer etapeNumero;
/** Valideur assigné à cette étape */
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "valideur_id")
private Membre valideur;
@Enumerated(EnumType.STRING)
@Builder.Default
@Column(name = "statut", nullable = false, length = 20)
private StatutValidationEtape statut = StatutValidationEtape.EN_ATTENTE;
@Column(name = "date_validation")
private LocalDateTime dateValidation;
@Column(name = "commentaire", length = 1000)
private String commentaire;
/**
* Valideur supérieur qui a désactivé le véto de {@code valideur}.
* Renseigné uniquement en cas de délégation.
*/
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "delegue_par_id")
private Membre deleguePar;
/**
* Motif et trace de la délégation — obligatoire si {@code deleguePar} est renseigné.
* Conservé 10 ans — exigence BCEAO/OHADA/Fiscalité ivoirienne.
*/
@Column(name = "trace_delegation", columnDefinition = "TEXT")
private String traceDelegation;
// ── Méthodes métier ────────────────────────────────────────────────────────
public boolean estEnAttente() {
return StatutValidationEtape.EN_ATTENTE.equals(statut);
}
public boolean estFinalisee() {
return StatutValidationEtape.APPROUVEE.equals(statut)
|| StatutValidationEtape.REJETEE.equals(statut)
|| StatutValidationEtape.DELEGUEE.equals(statut)
|| StatutValidationEtape.EXPIREE.equals(statut);
}
@PrePersist
protected void onCreate() {
super.onCreate();
if (statut == null) statut = StatutValidationEtape.EN_ATTENTE;
}
}