2026-07-21 16:45:13 +02:00

185 lines
7.0 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|label }}</span>
<h1>{{ decision.decision_title }}</h1>
</div>
<div class="status-stack">
<span class="status">Incidencia: {{ decision.decision_status|label }}</span>
<span class="status">Revisión: {{ decision.review_status|label }}</span>
</div>
</div>
<div class="question-box">
<h2>Pregunta</h2>
<p>{{ decision.question_text }}</p>
</div>
{% if consultation %}
<div class="consultation-box">
<h2>En consulta</h2>
<p>{{ consultation.reason }}</p>
{% if consultation.follow_up_with %}
<p><strong>Consultar con:</strong> {{ consultation.follow_up_with }}</p>
{% endif %}
<small>Marcado por {{ consultation.created_by_display_name }} el {{ consultation.created_at|datetime_es }}</small>
{% if write_enabled %}
<form method="post" action="/decisions/{{ decision.decision_group_key|urlencode }}/resume">
<input type="hidden" name="csrf_token" value="{{ user.csrf_token }}">
<input type="hidden" name="submission_key" value="{{ resume_submission_key }}">
<button class="secondary" type="submit">Ya tengo la información</button>
</form>
{% endif %}
</div>
{% endif %}
<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: {{ case.case_status|label }}
· Revisión: {{ case.case_review_status|label }}
</p>
{% if case.case_resolution_classification %}
<p><strong>Periodo ya aclarado:</strong> {{ case.case_resolution_classification|label }}</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 %}
{% if not consultation %}
<details class="consultation-form">
<summary>No conozco todavía la respuesta</summary>
<form method="post" action="/decisions/{{ decision.decision_group_key|urlencode }}/consultation">
<input type="hidden" name="csrf_token" value="{{ user.csrf_token }}">
<input type="hidden" name="submission_key" value="{{ consultation_submission_key }}">
<label>
Qué información falta
<textarea name="reason" rows="3" required placeholder="Ejemplo: preguntar a la operaria del turno de tarde qué estaba haciendo la máquina."></textarea>
</label>
<label>
A quién hay que consultar
<input name="follow_up_with" placeholder="Ejemplo: María / responsable del turno anterior">
</label>
<button class="secondary" type="submit">Marcar En consulta</button>
</form>
</details>
{% endif %}
<form class="review-form" method="post" action="/decisions/{{ decision.decision_group_key|urlencode }}/review">
<input type="hidden" name="csrf_token" value="{{ user.csrf_token }}">
<input type="hidden" name="submission_key" value="{{ review_submission_key }}">
<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, text in answer_options %}
<label class="radio-row">
<input type="radio" name="answer_code" value="{{ code }}" required>
<span>{{ text }}</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 %}
<div class="info-box">
<strong>Qué ocurrirá después</strong>
<p>Su respuesta cerrará la pregunta de Producción. Cuando la respuesta permita crear un contexto histórico, se enviará una propuesta a validación técnica. Usted no crea ni aprueba contextos.</p>
</div>
<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>
{% elif write_enabled %}
<div class="alert error">Su rol puede consultar esta decisión, pero no resolverla.</div>
{% endif %}
</section>
{% endblock %}