2026-07-21 10:29:31 +02:00

159 lines
5.6 KiB
HTML

{% extends "base.html" %}
{% block content %}
<a class="back" href="/">← Volver a pendientes</a>
{% if error %}
<div class="alert error">{{ error }}</div>
{% endif %}
<section class="decision-detail">
<div class="detail-heading">
<div>
<span class="machine">{{ decision.machine_id or "GLOBAL" }}</span>
<span class="severity">{{ decision.max_severity }}</span>
<h1>{{ decision.decision_title }}</h1>
</div>
<div class="status-stack">
<span class="status">
Incidencia:
{% if decision.decision_status == "OPEN" %}Activa{% else %}Terminada{% endif %}
</span>
<span class="status">Revisión: {{ decision.review_status }}</span>
</div>
</div>
<div class="question-box">
<h2>Pregunta</h2>
<p>{{ decision.question_text }}</p>
</div>
<section>
<h2>Intervalos y casos</h2>
<div class="timeline">
{% for case in cases %}
<article class="timeline-item {% if case.case_review_status != 'PENDING' %}reviewed{% endif %}">
<div class="timeline-time">
<strong>{{ case.first_seen_at|datetime_es }}</strong>
<span>→ {{ case.ended_at|datetime_es }}</span>
</div>
<div>
<h3>Caso {{ case.case_id }} · {{ case.case_title }}</h3>
<p>
Incidencia:
{% if case.case_status == "OPEN" %}activa{% else %}terminada{% endif %}
· Revisión: {{ case.case_review_status }}
</p>
{% if case.case_resolution_classification %}
<p><strong>Resolución previa:</strong> {{ case.case_resolution_classification }}</p>
{% endif %}
{% if case.production_orders %}
<p><strong>Órdenes:</strong> {{ case.production_orders|join(", ") }}</p>
{% endif %}
</div>
</article>
{% endfor %}
</div>
</section>
<details>
<summary>Evidencia técnica</summary>
<div class="evidence-list">
{% for item in decision.episode_evidence %}
<article>
<strong>Episodio {{ item.episode_id }} · {{ item.incident_title }}</strong>
<p>{{ item.latest_detail or "Sin detalle adicional." }}</p>
<small>
{{ item.first_seen_at }} → {{ item.ended_at or "abierto" }}
{% if item.production_order %} · {{ item.production_order }}{% endif %}
{% if item.operator_name %} · {{ item.operator_name }}{% endif %}
</small>
</article>
{% endfor %}
</div>
</details>
{% if not write_enabled %}
<div class="alert error">
La interfaz está en modo solo lectura. Puede validar la información, pero todavía no registrar respuestas.
</div>
{% endif %}
{% if can_review and pending_cases %}
<form class="review-form" method="post" action="/decisions/{{ decision.decision_group_key|urlencode }}/review">
<input type="hidden" name="csrf_token" value="{{ user.csrf_token }}">
<fieldset>
<legend>1. Intervalos a los que se aplica la respuesta</legend>
{% for case in pending_cases %}
<label class="check-row">
<input type="checkbox" name="case_ids" value="{{ case.case_id }}" checked>
<span>
Caso {{ case.case_id }}:
{{ case.first_seen_at|datetime_es }}
→ {{ case.ended_at|datetime_es }}
</span>
</label>
{% endfor %}
<p class="help">Desmarque un intervalo cuando la causa no sea la misma. Los demás seguirán pendientes.</p>
</fieldset>
<fieldset>
<legend>2. Qué ocurrió</legend>
{% for code, label in answer_options %}
<label class="radio-row">
<input type="radio" name="answer_code" value="{{ code }}" required>
<span>{{ label }}</span>
</label>
{% endfor %}
</fieldset>
{% if decision.decision_family == "ODOO_ORDER_START_CONFLICT" %}
<fieldset>
<legend>3. Orden válida</legend>
{% for order_ref, workorder_id in order_pairs %}
<label class="radio-row">
<input type="radio" name="selected_order" value="{{ order_ref }}|{{ workorder_id }}">
<span>{{ order_ref }} · WO {{ workorder_id }}</span>
</label>
{% endfor %}
<label class="check-row">
<input type="checkbox" name="corrected_in_odoo" value="true">
<span>La incoherencia ya está corregida en Odoo</span>
</label>
</fieldset>
{% endif %}
{% if decision.decision_family == "UNCONFIRMED_ACTIVITY" %}
<fieldset>
<legend>3. Contexto retrospectivo</legend>
<label class="check-row">
<input type="checkbox" name="create_contexts" value="true">
<span>Crear un contexto exacto por cada intervalo seleccionado cuando la respuesta lo permita</span>
</label>
<p class="help">
Solo se admite para sistema antiguo, prueba/ajuste o mantenimiento.
No cubre los huecos entre intervalos y no se permite sobre casos todavía abiertos.
</p>
</fieldset>
{% endif %}
<label>
Observaciones
<textarea name="notes" rows="5" placeholder="Explique brevemente qué ocurrió y, cuando proceda, qué se corrigió."></textarea>
</label>
<label class="check-row confirmation">
<input type="checkbox" name="confirmation" value="true" required>
<span>Confirmo que la respuesta refleja la realidad de planta para los intervalos seleccionados.</span>
</label>
<button class="primary" type="submit">Resolver selección</button>
</form>
{% elif not pending_cases %}
<div class="alert success">Esta decisión ya no tiene casos pendientes.</div>
{% else %}
<div class="alert error">Su rol puede consultar esta decisión, pero no resolverla.</div>
{% endif %}
</section>
{% endblock %}