2026-08-14 18:02:25 +02:00
{% extends "base.html" %}
{% block title %}Nouvelle intervention — GMAO{% endblock %}
{% block content %}
< div class = "container-fluid" >
< div class = "d-flex justify-content-between align-items-center mb-4" >
< h1 > < i class = "bi bi-plus-circle" > < / i > Nouvelle intervention< / h1 >
< a href = "{{ url_for('interventions.index') }}" class = "btn btn-secondary" >
< i class = "bi bi-arrow-left" > < / i > Retour
< / a >
< / div >
{% if interpretation %}
< div class = "alert alert-info mb-3" >
< i class = "bi bi-robot" > < / i > < strong > Intervention créée à partir d'une interprétation automatique< / strong >
< span class = "badge bg-{% if interpretation.analysis_type == 'curative' %}danger{% elif interpretation.analysis_type == 'preventive' %}primary{% elif interpretation.analysis_type == 'administrative' %}warning text-dark{% elif interpretation.analysis_type == 'formation' %}info text-dark{% else %}secondary{% endif %} ms-2" >
{{ interpretation.analysis_type|title }}
< / span >
< span class = "badge bg-{% if interpretation.analysis_action == 'create' %}success{% elif interpretation.analysis_action == 'update' %}warning text-dark{% else %}secondary{% endif %}" >
{{ interpretation.analysis_action|title }}
< / span >
{% if interpretation.confidence_score %}
< span class = "badge bg-light text-dark" > Confiance: {{ '%.0f'|format(interpretation.confidence_score * 100) }}%< / span >
{% endif %}
< / div >
{% endif %}
< div class = "card" >
< div class = "card-body" >
< form method = "POST" >
< input type = "hidden" name = "csrf_token" value = "{{ csrf_token() }}" >
{% if from_interpretation %}
< input type = "hidden" name = "from_interpretation" value = "{{ from_interpretation }}" >
{% endif %}
< div class = "row mb-3" >
< div class = "col-md-8" >
< label class = "form-label" > Titre *< / label >
< input type = "text" name = "title" class = "form-control" required
value="{{ prefilled.title if prefilled is defined else (intervention.title if intervention is defined else '') }}">
{% if json_suggestions and json_suggestions.title %}
< small class = "text-success" > < i class = "bi bi-lightbulb" > < / i > Suggestion: {{ json_suggestions.title }}< / small >
{% endif %}
< / div >
< div class = "col-md-4" >
< label class = "form-label" > Priorité< / label >
< select name = "priority" class = "form-select" >
{% for key, value in priorities.items() %}
< option value = "{{ key }}" { % if ( prefilled . priority if prefilled is defined else ( intervention . priority if intervention is defined else ' normale ' ) ) = = key % } selected { % endif % } >
{{ value }}
< / option >
{% endfor %}
< / select >
{% if json_suggestions and json_suggestions.priority %}
< small class = "text-success" > < i class = "bi bi-lightbulb" > < / i > Suggestion: {{ json_suggestions.priority }}< / small >
{% endif %}
< / div >
< / div >
< div class = "row mb-3" >
< div class = "col-md-6" >
< label class = "form-label" > Type< / label >
< select name = "intervention_type" class = "form-select" >
< option value = "curatif" { % if ( prefilled . type if prefilled is defined else ( intervention . type if intervention is defined else ' ' ) ) = = ' curatif ' % } selected { % endif % } > Curatif< / option >
< option value = "preventif" { % if ( prefilled . type if prefilled is defined else ( intervention . type if intervention is defined else ' ' ) ) = = ' preventif ' % } selected { % endif % } > Préventif< / option >
< option value = "amelioratif" { % if ( prefilled . type if prefilled is defined else ( intervention . type if intervention is defined else ' ' ) ) = = ' amelioratif ' % } selected { % endif % } > Amélioratif< / option >
< option value = "administratif" { % if ( prefilled . type if prefilled is defined else ( intervention . type if intervention is defined else ' ' ) ) = = ' administratif ' % } selected { % endif % } > Administratif< / option >
< option value = "formation" { % if ( prefilled . type if prefilled is defined else ( intervention . type if intervention is defined else ' ' ) ) = = ' formation ' % } selected { % endif % } > Formation< / option >
2026-08-21 12:14:07 +02:00
< option value = "prevention" { % if ( prefilled . type if prefilled is defined else ( intervention . type if intervention is defined else ' ' ) ) = = ' prevention ' % } selected { % endif % } > Prévention< / option >
2026-08-14 18:02:25 +02:00
< / select >
{% if json_suggestions and json_suggestions.type %}
< small class = "text-success" > < i class = "bi bi-lightbulb" > < / i > Suggestion: {{ json_suggestions.type }}< / small >
{% endif %}
< / div >
2026-08-21 12:12:23 +02:00
< div class = "col-md-6" >
< label class = "form-label" > Parcours de workflow< / label >
< select name = "workflow_type" class = "form-select" >
{% for key, label in workflow_types.items() %}
< option value = "{{ key }}" { % if ( intervention . workflow_type if intervention is defined else ( prefilled . workflow_type if prefilled is defined else ' corrective ' ) ) = = key % } selected { % endif % } > {{ label }}< / option >
{% endfor %}
< / select >
< small class = "text-muted" > Le parcours détermine les étapes affichées dans la fiche.< / small >
< / div >
2026-08-14 18:02:25 +02:00
< div class = "col-md-6" >
< label class = "form-label" > Lot< / label >
< select name = "lot_id" class = "form-select" >
< option value = "" > -- Sélectionner --< / option >
{% for lot in lots %}
< option value = "{{ lot.id }}" > {{ lot.name }}< / option >
{% endfor %}
< / select >
< / div >
< / div >
< div class = "row mb-3" >
< div class = "col-md-6" >
< label class = "form-label" > Équipement< / label >
< select name = "equipment_id" class = "form-select" id = "equipment_select" >
< option value = "" > -- Sélectionner --< / option >
< option value = "divers" { % if ( equipment_id if equipment_id is defined else ( intervention . equipment_id if intervention is defined else None ) ) is none % } selected { % endif % } > Divers< / option >
{% for equipment in equipments %}
< option value = "{{ equipment.id }}" { % if ( equipment_id if equipment_id is defined else ( intervention . equipment_id if intervention is defined else None ) ) = = equipment . id % } selected { % endif % } >
{{ equipment.name }}
< / option >
{% endfor %}
< / select >
{% if json_suggestions and json_suggestions.equipment %}
< div id = "equipment_suggestion" >
{% if equipment_match %}
< small class = "text-success" > < i class = "bi bi-check-circle" > < / i > Équipement trouvé: {{ equipment_match.name }}< / small >
{% else %}
< small class = "text-info" >
< i class = "bi bi-info-circle" > < / i > Suggestion: "{{ json_suggestions.equipment }}" —
< strong > Utilisez "Divers" si non applicable< / strong >
< / small >
{% endif %}
< / div >
{% endif %}
< / div >
< div class = "col-md-6" >
< label class = "form-label" > Salle / Localisation< / label >
< select name = "room_id" class = "form-select" id = "room_select" >
< option value = "" > -- Sélectionner --< / option >
{% for room in rooms %}
< option value = "{{ room.id }}" { % if ( room_id if room_id is defined else ( intervention . room_id if intervention is defined else None ) ) = = room . id % } selected { % endif % } >
{{ room.name }}
< / option >
{% endfor %}
< / select >
{% if json_suggestions and json_suggestions.location %}
< div id = "room_suggestion" >
{% if room_match %}
< small class = "text-success" > < i class = "bi bi-check-circle" > < / i > Salle trouvée: {{ room_match.name }}< / small >
{% else %}
< small class = "text-info" >
< i class = "bi bi-info-circle" > < / i > Suggestion: "{{ json_suggestions.location }}"
< / small >
{% endif %}
< / div >
{% endif %}
< / div >
< / div >
< div class = "mb-3" >
< label class = "form-label" > Description< / label >
< textarea name = "description" class = "form-control" rows = "4" > {{ prefilled.description if prefilled is defined else (intervention.description if intervention is defined else '') }}< / textarea >
{% if json_suggestions and json_suggestions.description and json_suggestions.description != (prefilled.description if prefilled is defined else '') %}
< small class = "text-success" > < i class = "bi bi-lightbulb" > < / i > Suggestion: {{ json_suggestions.description[:200] }}{% if json_suggestions.description|length > 200 %}...{% endif %}< / small >
{% endif %}
< / div >
< div class = "row mb-3" >
< div class = "col-md-6" >
< label class = "form-label" > Assigné à< / label >
< select name = "assigned_to_id" class = "form-select" >
< option value = "" > -- Non assigné --< / option >
{% for user in users %}
< option value = "{{ user.id }}" { % if ( intervention . assigned_to_id if intervention is defined else None ) = = user . id % } selected { % endif % } > {{ user.username }}< / option >
{% endfor %}
< / select >
{% if json_suggestions and json_suggestions.assignee %}
< small class = "text-success" > < i class = "bi bi-lightbulb" > < / i > Suggestion: {{ json_suggestions.assignee }}< / small >
{% endif %}
< / div >
< div class = "col-md-6" >
< label class = "form-label" > Date d'intervention suggérée< / label >
< input type = "date" name = "intervention_date" class = "form-control"
value="{{ prefilled.date.strftime('%Y-%m-%d') if prefilled is defined and prefilled.date else (intervention.scheduled_date.strftime('%Y-%m-%d') if intervention is defined and intervention.scheduled_date else '') }}">
{% if json_suggestions and json_suggestions.date %}
< small class = "text-success" > < i class = "bi bi-lightbulb" > < / i > Suggestion: {{ json_suggestions.date }}< / small >
{% endif %}
< / div >
< / div >
< div class = "mb-3" >
< label class = "form-label" > Notes< / label >
< textarea name = "notes" class = "form-control" rows = "3" placeholder = "Notes internes..." > {{ intervention.notes if intervention is defined else '' }}< / textarea >
< / div >
< div class = "text-end" >
{% if from_interpretation %}
< a href = "{{ url_for('outlook.reject_interpretation', interpretation_id=from_interpretation) }}" class = "btn btn-outline-danger me-2" onclick = "return confirm('Refuser cette interprétation? Elle ne sera pas transformée en intervention.');" >
< i class = "bi bi-x-circle" > < / i > Refuser
< / a >
{% endif %}
< a href = "{{ url_for('interventions.index') }}" class = "btn btn-secondary me-2" > Annuler< / a >
< button type = "submit" class = "btn btn-primary" >
< i class = "bi bi-check-lg" > < / i > Créer l'intervention
< / button >
< / div >
< / form >
< / div >
< / div >
{% if interpretation and interpretation.raw_json %}
< div class = "card mt-3" >
< div class = "card-header" >
< button class = "btn btn-sm btn-outline-secondary" type = "button" data-bs-toggle = "collapse" data-bs-target = "#rawJsonCollapse" >
< i class = "bi bi-code" > < / i > Voir l'analyse JSON complète
< / button >
< / div >
< div class = "collapse" id = "rawJsonCollapse" >
< div class = "card-body" >
< pre class = "bg-light p-2 small" > {{ interpretation.raw_json }}< / pre >
< / div >
< / div >
< / div >
{% endif %}
< / div >
2026-08-21 12:12:23 +02:00
{% endblock %}