PageSourceSearch

https://zulbot.com/assets/SafetyLessonsPage-CAPoLb2i.js

js zulbot.com collected 2026-10-09 22:57:02 UTC 11,613 bytes, 1 lines download raw bytes

1import{J as l,O as e}from"./vendor-H79NKlR3.js";import{a as f,u as te}from"./index-Bqcvp0_M.js";import{c as ne}from"./hazardSourceClassification-BJKMDP3K.js";import{cG as J,cF as R,cH as w,cJ as V,cK as re,cL as A}from"./ProtectedAppRoutes-BMv270TH.js";import"./vendor-charts-Dhre_-zM.js";import"./vendor-date-D2dqegYk.js";import"./preload-helper-BXl3LOEh.js";import"./vendor-net-XAFgdCjt.js";import"./CookieConsentManager-BVZ8cDwn.js";const T=Object.freeze({practice:"Prática",case:"Caso",concern:"Preocupação"}),ie=Object.freeze({candidate:"Candidata",under_review:"Em revisão",approved:"Aprovada",rejected:"Rejeitada",superseded:"Substituída",withdrawn:"Retirada"}),k=Object.freeze({company:"Toda a operação",fleet:"Frota",route:"Rota"});async function K({status:s="open",type:t=""}={}){const n={status:s};return t&&(n.type=t),(await f.get("/debrief-lessons/",{params:n})).data}async function oe(s,t){return(await f.patch(`/debrief-lessons/${s}/`,t)).data}async function le(s){return(await f.post(`/debrief-lessons/${s}/draft-wording/`)).data}async function de(s,t={}){return(await f.post(`/debrief-lessons/${s}/approve/`,t)).data}async function ce(s,t={}){return(await f.post(`/debrief-lessons/${s}/reject/`,t)).data}async function pe(s,t={}){return(await f.post(`/debrief-lessons/${s}/withdraw/`,t)).data}async function ue(s,t,n={}){return(await f.post(`/debrief-lessons/${s}/merge/`,{into:t,...n})).data}const C=Object.freeze(["conditions","response","outcome","what_helped","limits","contrary_evidence"]),Q=Object.freeze({conditions:"Condições (quando)",response:"Resposta (o que a tripulação fez)",outcome:"Resultado",what_helped:"O que ajudou",limits:"Limites de aplicação",contrary_evidence:"Evidência contrária"}),he=Object.freeze({supporting:"apoia",conflicting:"conflita",similar:"semelhante"}),c=s=>String(s??"").trim();function U(s){return c(s?.response)||c(s?.conditions)||c(s?.outcome)||"—"}function fe(s){const t={approval_scope:c(s?.approval_scope)||"company",valid_until:c(s?.valid_until)};
1return C.forEach(n=>{t[n]=c(s?.[n])}),t}function E(s,t){return!t||typeof t!="object"?[]:[...C,"approval_scope"].filter(n=>c(t[n])&&c(t[n])!==c(s?.[n]))}function me(s){return s==="approved"?"accent":s==="under_review"?"ink":"neutral"}function we(){const{user:s}=te(),t=ne(s),[n,L]=l.useState([]),[m,Y]=l.useState([]),[$,X]=l.useState({open:0,approved:0}),[x,q]=l.useState(!0),[B,p]=l.useState(""),[y,D]=l.useState(null),[d,g]=l.useState(null),[o,z]=l.useState(null),[F,P]=l.useState(!1),[j,H]=l.useState(""),[O,W]=l.useState(""),[v,N]=l.useState(""),[M,_]=l.useState(""),b=l.useCallback(async()=>{q(!0),p("");try{const[a,i]=await Promise.all([K({status:"open"}),K({status:"approved"})]);L(Array.isArray(a?.results)?a.results:[]),Y(Array.isArray(i?.results)?i.results:[]),X({open:a?.counts?.open??0,approved:i?.counts?.approved??0})}catch(a){p(a?.response?.data?.detail||"Não foi possível carregar a fila de aprendizados.")}finally{q(!1)}},[]);l.useEffect(()=>{t&&b()},[t,b]);const r=l.useMemo(()=>n.find(a=>a.id===y)||m.find(a=>a.id===y)||null,[m,n,y]),u=!!r&&(r.status==="candidate"||r.status==="under_review"),G=a=>{D(a.id),g(fe(a)),z(null),H(""),W(""),_("")},I=(a,i)=>g(h=>({...h||{},[a]:i})),S=async(a,i)=>{if(r){N(a),p("");try{const h=await i();_(h?.idempotent_replay?"Decisão já registrada anteriormente.":"Decisão registrada; a tripulação que relatou foi avisada."),await b(),D(null),g(null),z(null)}catch(h){p(h?.response?.data?.detail||"A decisão não foi registrada. Tente novamente.")}finally{N("")}}},Z=async()=>{if(!(!r||!d)){N("save"),p("");try{const a={};C.forEach(i=>{a[i]=d[i]}),a.approval_scope=d.approval_scope,d.valid_until&&(a.valid_until=d.valid_until),await oe(r.id,a),_("Texto salvo; a candidata está em revisão."),await b()}catch(a){p(a?.response?.data?.detail||"Não foi possível salvar o texto.")}finally{N("")}}},ee=async()=>{if(r){P(!0),p("");try{z(await le(r.id))}catch(a){p(a?.response?.data?.detail||"O rascunho assistido não está disponível agora; o texto do relato permanece editável.")}finally{P(!1)}}},ae=()=>{o?.draft&&(g(a=>{const i={...a||{}};return E(a,o.draft).forEach(h=>{i[h]=c(o.draft[h])}),i}),_("Rascunho aplicado ao formulário. Revise antes de decidir; nada foi salvo ainda."))},se=()=>({note:j,limits:d?.limits||void 0,approval_scope:d?.approval_scope||void 0,valid_until:d?.valid_until||void 0});return t?e.jsxs("div",{className:"sfl-page",children:[e.jsx(J,{kicker:"Safety · Aprendizados",title:"Revisão de aprendizados",subtitle:"Candidatas extraídas dos debriefs, nas palavras de quem relatou. Só o que for aprovado aqui aparece no Briefing I.A. de voos semelhantes.",meta:e.jsxs("div",{className:"sfl-meta","aria-label":"Contadores da fila",children:[e.jsx(w,{tone:"ink",children:`${$.open} em aberto`}),e.jsx(w,{tone:"accent",children:`${$.approved} aprovadas`})]}),actions:e.jsx("button",{type:"button",className:"ind-chip",onClick:b,disabled:x,children:"Atualizar"})}),B?e.jsx("div",{role:"alert",className:"sfl-alert",children:B}):null,M?e.jsx("div",{role:"status",className:"sfl-flash",children:M}):null,e.jsxs("section",{className:"sfl-queue","aria-label":"Fila de candidatas",children:[x?e.jsx(R,{kind:"loading",title:"Carregando a fila…"}):null,!x&&!n.length?e.jsx(R,{kind:"empty",title:"Nenhuma candidata aguardando",message:"Novos debriefs com prática, caso ou preocupação entram aqui automaticamente."}):null,!x&&n.length?e.jsxs(V,{caption:"Candidatas a aprendizado",minWidth:720,children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{scope:"col",children:"Tipo"}),e.jsx("th",{scope:"col",children:"Texto"}),e.jsx("th",{scope:"col",children:"Origem"}),e.jsx("th",{scope:"col",children:"Situação"}),e.jsx("th",{scope:"col",children:e.jsx("span",{className:"sr-only",children:"Ação"})})]})}),e.jsx("tbody",{children:n.map(a=>e.jsxs("tr",{"data-testid":"sfl-row",className:a.id===y?"is-selected":void 0,children:[e.jsx("td",{children:T[a.lesson_type]||a.lesson_type}),e.jsx("td",{className:"sfl-cell--text",children:U(a)}),e.jsx("td",{className:"sfl-cell--mono",children:a.source_ref||"—"}),e.jsx("td",{children:e.jsx(w,{tone:me(a.status),children:ie[a.status]||a.status})}),e.jsx("td",{children:e.jsx("button",{type:"button",className:"ind-chip",onClick:()=>G(a),children:"Revisar"})})]},a.id))})]}):null]}),r&&d?e.jsx(re,{kicker:`${T[r.lesson_type]||r.lesson_type} · ${r.source_ref||"sem protocolo"} · v${r.version}`,title:u?"Revisar candidata":"Aprendizado aprovado","data-testid":"sfl-work",actions:u?e.jsxs("div",{className:"sfl-actions",children:[e.jsx("button",{type:"button",className:"ind-chip",disabled:v!=="",onClick:Z,children:"Salvar texto"}),e.jsx("button",{type:"button",className:"ind-chip ind-chip--accent",disabled:v!=="",onClick:()=>S("approve",()=>de(r.id,se())),children:"Aprovar"}),e.jsx("button",{type:"button",className:"ind-chip",disabled:v!=="",onClick:()=>S("reject",()=>ce(r.id,{note:j})),children:"Rejeitar"}),e.jsxs("label",{className:"sfl-merge",children:[e.jsx("span",{children:"Fundir na aprovada nº"}),e.jsx("input",{className:"ind-input","aria-label":"Id da aprovada",value:O,onChange:a=>W(a.target.value),inputMode:"numeric"}),e.jsx("button",{type:"button",className:"ind-chip",disabled:v!==""||!O,onClick:()=>S("merge",()=>ue(r.id,Number(O),{note:j})),children:"Fundir"})]})]}):e.jsx("div",{className:"sfl-actions",children:e.jsx("button",{type:"button",className:"ind-chip",disabled:v!=="",onClick:()=>S("withdraw",()=>pe(r.id,{note:j})),children:"Retirar dos briefings"})}),children:e.jsxs("div",{className:"sfl-grid",children:[e.jsxs("div",{className:"sfl-form",children:[C.map(a=>e.jsx(A,{label:Q[a],children:e.jsx("textarea",{className:"ind-input sfl-textarea",rows:a==="limits"?3:2,value:d[a],readOnly:!u,onChange:i=>I(a,i.target.value)})},a)),e.jsxs("div",{className:"sfl-inline",children:[e.jsx(A,{label:"Escopo da aprovação",children:e.jsx("select",{className:"ind-input",value:d.approval_scope,disabled:!u,onChange:a=>I("approval_scope",a.target.value),children:Object.entries(k).map(([a,i])=>e.jsx("option",{value:a,children:i},a))})}),e.jsx(A,{label:"Válido até",hint:"Opcional; sem data, vale até ser retirado.",children:e.jsx("input",{className:"ind-input",type:"date",value:d.valid_until,disabled:!u,onChange:a=>I("valid_until",a.target.value)})})]}),u?e.jsx(A,{label:"Nota da decisão",hint:"Vai para quem relatou junto com a decisão.",children:e.jsx("textarea",{className:"ind-input sfl-textarea",rows:2,value:j,onChange:a=>H(a.target.value)})}):null]}),e.jsxs("aside",{className:"sfl-assist","aria-label":"Assistência à revisão",children:[e.jsx("div",{className:"ind-kicker",children:"Assistência"}),u?e.jsx("button",{type:"button",className:"ind-chip",disabled:F,onClick:ee,children:F?"Preparando…":"Rascunho e casos relacionados"}):null,o?e.jsxs("div",{className:"sfl-draft","data-testid":"sfl-draft",children:[e.jsx("p",{className:"sfl-notice",children:o.notice}),Array.isArray(o.related)&&o.related.length?e.jsx("ul",{className:"sfl-related",children:o.related.map(a=>e.jsxs("li",{children:[e.jsx(w,{tone:a.relation==="conflicting"?"ink":"neutral",children:he[a.relation]||a.relation}),e.jsx("span",{children:a.text}),a.reasons?.length?e.jsx("small",{children:a.reasons.join(" · ")}):null]},a.id))}):e.jsx("p",{className:"sfl-muted",children:"Nenhum caso relacionado nesta operação."}),o.draft?e.jsxs(e.Fragment,{children:[e.jsx("dl",{className:"sfl-draft-fields",children:["limits","approval_scope","briefing_wording"].map(a=>c(o.draft[a])?e.jsxs("div",{children:[e.jsx("dt",{children:a==="briefing_wording"?"Como apareceria no briefing":Q[a]||k[a]||"Escopo sugerido"}),e.jsx("dd",{children:a==="approval_scope"&&k[o.draft[a]]||o.draft[a]})]},a):null)}),u?e.jsx("button",{type:"button",className:"ind-chip ind-chip--ink",disabled:!E(d,o.draft).length,onClick:ae,children:`Aplicar rascunho (${E(d,o.draft).length} campo${E(d,o.draft).length===1?"":"s"})`}):null]}):null]}):null]})]})}):null,e.jsxs("section",{className:"sfl-approved","aria-label":"Aprendizados a
1provados",children:[e.jsx("h2",{className:"sfl-h2",children:"Aprovados em uso nos briefings"}),!x&&!m.length?e.jsx("p",{className:"sfl-muted",children:"Nenhum aprendizado aprovado ainda."}):null,m.length?e.jsxs(V,{caption:"Aprendizados aprovados",minWidth:720,children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{scope:"col",children:"Nº"}),e.jsx("th",{scope:"col",children:"Tipo"}),e.jsx("th",{scope:"col",children:"Texto"}),e.jsx("th",{scope:"col",children:"Escopo"}),e.jsx("th",{scope:"col",children:"Exibições"}),e.jsx("th",{scope:"col",children:e.jsx("span",{className:"sr-only",children:"Ação"})})]})}),e.jsx("tbody",{children:m.map(a=>e.jsxs("tr",{"data-testid":"sfl-approved-row",children:[e.jsx("td",{className:"sfl-cell--mono",children:a.id}),e.jsx("td",{children:T[a.lesson_type]||a.lesson_type}),e.jsx("td",{className:"sfl-cell--text",children:U(a)}),e.jsx("td",{children:k[a.approval_scope]||a.approval_scope}),e.jsx("td",{className:"sfl-cell--mono",children:a.exposure_count??0}),e.jsx("td",{children:e.jsx("button",{type:"button",className:"ind-chip",onClick:()=>G(a),children:"Abrir"})})]},a.id))})]}):null]})]}):e.jsxs("div",{className:"sfl-page",children:[e.jsx(J,{kicker:"Safety · Aprendizados",title:"Revisão de aprendizados"}),e.jsx(R,{kind:"empty",title:"Área da autoridade de Safety",message:"A revisão de aprendizados extraídos dos debriefs é feita pela autoridade de Safety (triagem completa ou governança)."})]})}export{we as default,E as draftDiff,fe as lessonForm,U as lessonHeadline};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.