gmao/app_new/core/models/prevention.py
root ed6675b9d3
Some checks are pending
CI - Tests et Syntax / lint-and-test (push) Waiting to run
Structure le suivi de la prévention et du DUERP
2026-08-14 21:43:13 +00:00

69 lines
3 KiB
Python

"""Registre de prévention, DUERP et suivi du temps dédié."""
from datetime import datetime, timezone
from app_new.extensions import db
class PreventionWorkLog(db.Model):
__tablename__ = "prevention_work_logs"
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey("users.id"), nullable=False, index=True)
work_date = db.Column(db.Date, nullable=False, index=True)
duration_minutes = db.Column(db.Integer, nullable=False)
activity = db.Column(db.String(255), nullable=False)
notes = db.Column(db.Text)
created_at = db.Column(db.DateTime, default=lambda: datetime.now(timezone.utc))
user = db.relationship("User")
class StaffAuthorization(db.Model):
__tablename__ = "staff_authorizations"
id = db.Column(db.Integer, primary_key=True)
staff_id = db.Column(db.Integer, db.ForeignKey("staff.id"), nullable=False, index=True)
name = db.Column(db.String(160), nullable=False)
issued_on = db.Column(db.Date)
expires_on = db.Column(db.Date, index=True)
issuer = db.Column(db.String(160))
notes = db.Column(db.Text)
staff = db.relationship("Staff", backref=db.backref("authorizations", cascade="all, delete-orphan"))
class RiskAssessment(db.Model):
__tablename__ = "risk_assessments"
id = db.Column(db.Integer, primary_key=True)
work_unit = db.Column(db.String(160), nullable=False)
hazard = db.Column(db.String(255), nullable=False)
exposed_people = db.Column(db.String(255))
severity = db.Column(db.Integer, nullable=False, default=1)
probability = db.Column(db.Integer, nullable=False, default=1)
control_measures = db.Column(db.Text)
reviewed_on = db.Column(db.Date)
is_active = db.Column(db.Boolean, nullable=False, default=True)
@property
def score(self): return self.severity * self.probability
class PreventionAction(db.Model):
__tablename__ = "prevention_actions"
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(255), nullable=False)
source_type = db.Column(db.String(40), nullable=False, default="observation")
risk_id = db.Column(db.Integer, db.ForeignKey("risk_assessments.id"))
priority = db.Column(db.String(20), nullable=False, default="normale")
owner = db.Column(db.String(160))
due_date = db.Column(db.Date, index=True)
status = db.Column(db.String(30), nullable=False, default="a_faire")
evidence = db.Column(db.Text)
risk = db.relationship("RiskAssessment", backref="actions")
class SafetyRegisterEntry(db.Model):
__tablename__ = "safety_register_entries"
id = db.Column(db.Integer, primary_key=True)
entry_date = db.Column(db.Date, nullable=False, index=True)
entry_type = db.Column(db.String(50), nullable=False)
title = db.Column(db.String(255), nullable=False)
details = db.Column(db.Text)
location = db.Column(db.String(255))
follow_up = db.Column(db.Text)
created_by_id = db.Column(db.Integer, db.ForeignKey("users.id"))
created_by = db.relationship("User")