<%- include('../partials/header') %><div class="d-flex justify-content-between align-items-start gap-3 mb-3"><div><span class="badge text-bg-light"><%= capa.status %></span> <span class="badge text-bg-light"><%= capa.priority %> priority</span><h2 class="mt-2 mb-1"><%= capa.capa_no %> · <%= capa.title %></h2><div class="text-muted">Detected <%= fmtDate(capa.detected_date) %> · Owner: <%= capa.owner_name||'Unassigned' %></div></div><div class="d-flex gap-2"><a href="/capa/<%= capa.id %>/edit" class="btn btn-outline-primary">Edit</a><% if(capa.workflow_stage!=='Closed'){ %><form method="post" action="/capa/<%= capa.id %>/submit"><button class="btn btn-primary" <%= capa.approval_status==='Pending'?'disabled':'' %>><i class="bi bi-send me-1"></i> Submit for Review</button></form><% } %></div></div>
<div class="card panel-card workflow-card mb-4"><div class="card-header"><div><h5>Integrated CAPA Workflow</h5><small><%= flow.completed_count %> of <%= flow.total_count %> stages complete · Current stage: <strong><%= capa.workflow_stage %></strong></small></div><div class="workflow-progress-box"><span>Progress</span><strong><%= Math.round(flow.completed_count/flow.total_count*100) %>%</strong><div class="progress"><div class="progress-bar" style="width:<%= flow.completed_count/flow.total_count*100 %>%"></div></div></div></div><div class="card-body"><div class="workflow-track"><% flow.steps.forEach((s,i)=>{ %><a class="workflow-step <%= s.complete?'is-complete':'' %> <%= s.current?'is-current':'' %>" href="#"><div class="workflow-step-icon"><i class="bi <%= s.icon %>"></i></div><span class="workflow-step-number"><%= s.index %></span><strong><%= s.label %></strong><small><%= s.complete?'Complete':s.current?'Current':'Pending' %></small></a><% if(i<flow.steps.length-1){ %><div class="workflow-arrow"><i class="bi bi-chevron-right"></i></div><% } %><% }) %></div></div></div>
<div class="row g-4"><div class="col-xl-8"><div class="card panel-card mb-4"><div class="card-header"><div><h5>Problem & Investigation</h5><small>Core CAPA record</small></div></div><div class="card-body"><div class="mb-4"><div class="detail-label">Problem Statement</div><div class="detail-value"><%= capa.problem_statement %></div></div><div class="row g-3"><div class="col-md-6"><div class="detail-label">Containment</div><div class="detail-value"><%= capa.containment_action||'—' %></div></div><div class="col-md-6"><div class="detail-label">Root Cause</div><div class="detail-value"><%= capa.root_cause||'Not yet established' %></div></div><div class="col-md-6"><div class="detail-label">Corrective Action</div><div class="detail-value"><%= capa.corrective_action||'—' %></div></div><div class="col-md-6"><div class="detail-label">Preventive Action</div><div class="detail-value"><%= capa.preventive_action||'—' %></div></div><div class="col-md-8"><div class="detail-label">Effectiveness Check</div><div class="detail-value"><%= capa.effectiveness_check||'—' %></div></div><div class="col-md-4"><div class="detail-label">Verification Date</div><div class="detail-value"><%= fmtDate(capa.verification_date) %></div></div></div></div></div>
<div class="card panel-card mb-4" id="actions"><div class="card-header"><div><h5>CAPA Actions</h5><small>Containment, corrective and preventive actions</small></div></div><div class="card-body"><% related.actions.forEach(a=>{ %><div class="border rounded-3 p-3 mb-3"><div class="d-flex justify-content-between"><strong><%= a.action_type %></strong><span class="badge text-bg-light"><%= a.status %></span></div><p class="mb-2 mt-2"><%= a.description %></p><small class="text-muted">Owner: <%= a.owner_name||'—' %> · Due: <%= fmtDate(a.due_date) %></small><form class="row g-2 mt-2" method="post" action="/capa/<%= capa.id %>/action/<%= a.id %>/update"><div class="col-md-3"><select class="form-select form-select-sm" name="status"><% ['Planned','In Progress','Completed','Cancelled'].forEach(x=>{ %><option <%= a.status===x?'selected':'' %>><%= x %></option><% }) %></select></div><div class="col-md-3"><input class="form-control form-control-sm" type="date" name="completed_date" value="<%= a.completed_date?new Date(a.completed_date).toISOString().slice(0,10):'' %>"></div><div class="col-md-6"><input class="form-control form-control-sm" name="evidence" placeholder="Evidence / record" value="<%= a.evidence||'' %>"></div><div class="col-12"><input class="form-control form-control-sm" name="remarks" placeholder="Remarks" value="<%= a.remarks||'' %>"></div><div class="col-12"><button class="btn btn-sm btn-outline-primary">Update action</button></div></form></div><% }) %><hr><form class="row g-2" method="post" action="/capa/<%= capa.id %>/action"><div class="col-md-3"><select class="form-select" name="action_type" required><option>Containment</option><option>Corrective</option><option>Preventive</option></select></div><div class="col-md-6"><input class="form-control" name="description" required placeholder="Action description"></div><div class="col-md-3"><input class="form-control" type="date" name="due_date" required></div><div class="col-12"><button class="btn btn-primary btn-sm"><i class="bi bi-plus-lg"></i> Add Action</button></div></form></div></div>
</div><div class="col-xl-4"><div class="card panel-card mb-4"><div class="card-header"><div><h5>Quality Analytics</h5><small>Linked analysis tools</small></div></div><div class="card-body"><div class="linked-analysis-item"><div class="linked-analysis-icon fishbone"><i class="bi bi-diagram-3"></i></div><div class="linked-analysis-body"><strong>Fishbone</strong><span><%= related.fishbones.length %> linked analysis</span><a href="<%= related.fishbones[0]?'/fishbone/'+related.fishbones[0].id:'/fishbone/create?capa_id='+capa.id %>"><%= related.fishbones[0]?'Open analysis':'Create analysis' %></a></div></div><div class="linked-analysis-item"><div class="linked-analysis-icon pareto"><i class="bi bi-bar-chart-line"></i></div><div class="linked-analysis-body"><strong>Pareto</strong><span><%= related.paretos.length %> linked analysis</span><a href="<%= related.paretos[0]?'/pareto/'+related.paretos[0].id:'/pareto/create?capa_id='+capa.id %>"><%= related.paretos[0]?'Open analysis':'Create analysis' %></a></div></div><div class="linked-analysis-item"><div class="linked-analysis-icon markov"><i class="bi bi-bezier2"></i></div><div class="linked-analysis-body"><strong>Markov Lifecycle</strong><span><%= related.markovs.length %> linked model</span><a href="<%= related.markovs[0]?'/markov/'+related.markovs[0].id:'/markov/create-for-capa/'+capa.id %>"><%= related.markovs[0]?'Open model':'Create model' %></a></div></div><div class="linked-analysis-item"><div class="linked-analysis-icon fishbone"><i class="bi bi-stars"></i></div><div class="linked-analysis-body"><strong>Root Cause Intelligence</strong><span>Deterministic, auditable recommendations</span><a href="/root-cause/<%= capa.id %>">Review intelligence</a></div></div></div></div><div class="card panel-card" id="approvals"><div class="card-header"><div><h5>Approval Gates</h5><small>Controlled quality decisions</small></div></div><div class="card-body"><% if(!related.approvals.length){ %><div class="approval-empty"><i class="bi bi-hourglass"></i><div><strong>No approval gates yet</strong><span>Submit this CAPA for Quality Review.</span></div></div><% } %><% related.approvals.forEach(a=>{ %><div class="approval-control"><i class="bi bi-patch-check"></i><div><strong><%= a.step_name %></strong><span><%= a.status %> · Due <%= fmtDate(a.due_date) %></span><% if(a.status==='Pending'&&userCan('capa.approve')){ %><a class="small" href="/approval/<%= a.id %>">Open review</a><% } %></div></div><% }) %></div></div></div></div><%- include('../partials/footer') %>
