1import{r as u,j as a}from"./react-vendor-pafHdoJx.js";import{k as Ee,u as Te,j as Pe,b as Z,d as N,X as me}from"./index-Db0fDLGN.js";import{f as E,b as De,a as ze,e as Re}from"./export-utils-BHX8wKd9.js";import{E as Ve}from"./ExportMenu-kt6fodhv.js";import{E as Fe}from"./ErrorState-B9i6eo2M.js";import{E as Oe}from"./EntityList-DHyuL9ql.js";import{O as Le}from"./ObjectDrawer-DyT69DrE.js";import{N as _}from"./NumeroComBase-CssBMGes.js";import{F as Be}from"./FaixaDaTorre-Ckp1AU7j.js";import{S as q,F as _e,a as T,T as qe}from"./primitives-DOiVg4wH.js";import{O as He}from"./OrigemDoDado-ChhhMO_H.js";import{bL as K,Z as be,a6 as Je,e as Ue,an as We,L as U,al as Ye,az as Ze,ad as Ke,au as Xe,c as Ge}from"./ui-vendor-DLXJn6s3.js";import"./map-vendor-Dr8zbd0c.js";import"./firebase-vendor-D3UzkAhn.js";function l(o){return String(o??"â").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function j(o){if(!o)return"â";const r=new Date(o);return isNaN(r.getTime())?"â":r.toLocaleDateString("pt-BR")}function X(o){if(!o)return null;const r=new Date(o).getTime();return isNaN(r)?null:Math.floor((r-Date.now())/864e5)}function Qe(o){var H,w;const r=window.open("","_blank","width=820,height=980");if(!r)return!1;const i=(o==null?void 0:o.autoInfracao)||{},m=(o==null?void 0:o.veiculo)||{},R=(o==null?void 0:o.proprietario)||{},C=(o==null?void 0:o.condutor)||{},y=C.endereco||{},I=[y.logradouro,y.numero,y.bairro,y.cidade,y.uf,y.cep].filter(Boolean).join(", "),V=`<!doctype html><html lang="pt-BR"><head><meta charset="utf-8"> 2<title>FICI â Auto ${l(i.numero)}</title> 3<style> 4 body { font-family: Arial, Helvetica, sans-serif; color: #111; margin: 32px; font-size: 13px; } 5 h1 { font-size: 17px; text-align: center; margin: 0 0 2px; text-transform: uppercase; } 6 .sub { text-align: center; font-size: 11px; color: #444; margin-bottom: 20px; } 7 h2 { font-size: 12px; text-transform: uppercase; background: #eee; padding: 5px 8px; margin: 18px 0 8px; border-left: 4px solid #333; } 8 table { width: 100%; border-collapse: collapse; } 9 td { padding: 4px 8px; vertical-align: top; border: 1px solid #ccc; } 10 td b { display: block; font-size: 10px; text-transform: uppercase; color: #555; } 11 .decl { margin: 20px 0; padding: 12px; border: 1px solid #999; font-style: italic; } 12 .sig { display: flex; gap: 40px; margin-top: 60px; } 13 .sig div { flex: 1; border-top: 1px solid #111; padding-top: 6px; text-align: center; font-size: 11px; } 14 .foot { margin-top: 28px; font-size: 10px; color: #555; } 15 @media print { body { margin: 12mm; } } 16</style></head><body> 17<h1>${l(o==null?void 0:o.titulo)}</h1> 18<div class="sub">${l(o==null?void 0:o.baseLegal)} â gerado em ${l(j(o==null?void 0:o.geradoEm))} pelo Sentinel 365</div> 19<h2>1. Ãrgão Autuador</h2> 20<table><tr> 21 <td><b>Ãrgão</b>${l((H=o==null?void 0:o.orgaoAutuador)==null?void 0:H.nome)}</td> 22 <td><b>Código da Infração</b>${l((w=o==null?void 0:o.orgaoAutuador)==null?void 0:w.codigoInfracao)}</td> 23</tr></table> 24<h2>2. Auto de Infração</h2> 25<table> 26 <tr> 27 <td><b>Nº do Auto</b>${l(i.numero)}</td> 28 <td><b>Data da Infração</b>${l(j(i.dataInfracao))}</td> 29 <td><b>Data da Notificação</b>${l(j(i.dataNotificacao))}</td> 30 <td><b>Prazo de Indicação</b>${l(j(i.prazoIndicacao))}</td> 31 </tr> 32 <tr> 33 <td colspan="2"><b>Descrição</b>${l(i.descricao)}</td> 34 <td><b>Valor</b>R$ ${l((i.valor||0).toLocaleString("pt-BR",{minimumFractionDigits:2}))}</td> 35 <td><b>Pontos</b>${l(i.pontos)}</td> 36 </tr> 37 <tr><td colspan="4"><b>Local</b>${l(i.local)}</td></tr> 38</table> 39<h2>3. VeÃculo</h2> 40<table><tr> 41 <td><b>Placa</b>${l(m.placa)}</td> 42 <td><b>Renavam</b>${l(m.renavam)}</td> 43 <td><b>Chassi</b>${l(m.chassi)}</td> 44 <td><b>Marca/Modelo</b>${l(m.marcaModelo)}</td> 45</tr></table> 46<h2>4. Proprietário do VeÃculo (Pessoa JurÃdica)</h2> 47<table><tr> 48 <td><b>Razão Social</b>${l(R.razaoSocial)}</td> 49 <td><b>CNPJ</b>${l(R.cnpj)}</td> 50</tr></table> 51<h2>5. Condutor Indicado</h2> 52<table> 53 <tr> 54 <td><b>Nome</b>${l(C.nome)}</td> 55 <td><b>CPF</b>${l(C.cpf)}</td> 56 </tr> 57 <tr> 58 <td><b>CNH Nº</b>${l(C.cnhNumero)}</td> 59 <td><b>Categoria</b>${l(C.cnhCategoria)} â validade ${l(j(C.cnhValidade))}</td> 60 </tr> 61 <tr><td colspan="2"><b>Endereço</b>${l(I||null)}</td></tr> 62</table> 63<div class="decl">${l(o==null?void 0:o.declaracao)}</div> 64<div class="sig"> 65 <div>Assinatura do Condutor Indicado</div> 66 <div>Assinatura do Representante Legal</div> 67</div> 68<div class="foot">${l(o==null?void 0:o.instrucoes)}</div> 69<script>window.onload = function () { window.print(); };<\/script> 70</body></html>`;return r.document.write(V),r.document.close(),r.focus(),!0}const he=[{value:"speeding",label:"Excesso de velocidade"},{value:"red_light",label:"Avanço de sinal"},{value:"wrong_way",label:"Contramão"},{value:"parking",label:"Estacionamento irregular"},{value:"phone_use",label:"Uso de celular"},{value:"seatbelt",label:"Sem cinto de segurança"},{value:"lane_departure",label:"Faixa exclusiva"},{value:"documents",label:"Documentação"},{value:"other",label:"Outra"}],P={pending:{label:"Pendente",cor:"#D97706"},paid:{label:"Paga",cor:"#059669"},appealed:{label:"Em recurso",cor:"#2563EB"},cancelled:{label:"Cancelada",cor:"#64748B"}};function D(o){return o==="pendente"?"pending":o}const xe={driverId:"",date:"",vehiclePlate:"",infractionType:"speeding",autoInfracao:"",description:"",location:"",fineAmount:"",points:"",notes:""};function W(o){var r;return((r=he.find(i=>i.value===o))==null?void 0:r.label)||o}
70function z({label:o,cor:r,icone:i,title:m}){return a.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-[10px] font-semibold",style:{background:`${r}18`,color:r},title:m,children:[i&&a.jsx(i,{className:"w-3 h-3","aria-hidden":"true"}),o]})}function $(o){const r=o.indicacao;if(!r)return{label:"â",cor:"var(--page-text-muted)",dias:null};if(r.status==="indicado")return{label:"Indicado",cor:"#059669",dias:null};if(r.status==="expirado")return{label:"Expirado",cor:"#DC2626",dias:null};if(r.status==="nao_aplicavel")return{label:"N/A",cor:"var(--page-text-muted)",dias:null};const i=X(r.prazoIndicacao);return{label:i!=null?`${i}d para indicar`:"Indicar",cor:i!=null&&i<=7?"#DC2626":"#D97706",dias:i}}function ba(){var re,se,le,ie,de,ce,ue;const o=Ee("multas"),{toast:r}=Te(),{confirmar:i}=Pe(),{data:m,loading:R,error:C,refetch:y,silentRefetch:I}=Z(()=>N.infractions({limit:500}),[]),{data:V}=Z(()=>N.drivers().catch(()=>[]),[]),{data:H}=Z(()=>N.vehicles().catch(()=>[]),[]),[w,ge]=u.useState(""),[x,k]=u.useState("todas"),[J,ve]=u.useState(""),[n,S]=u.useState(null),[fe,F]=u.useState(!1),[O,G]=u.useState(null),[d,h]=u.useState(xe),[Q,ee]=u.useState(!1),[A,M]=u.useState(null),[L,ae]=u.useState(""),[Y,ye]=u.useState(()=>{try{return JSON.parse(localStorage.getItem("multasSerproVistas")||"[]")}catch{return[]}}),g=u.useMemo(()=>(m||[]).filter(e=>e.source==="serpro_auto"&&!Y.includes(e.id)),[m,Y]),Ne=()=>{const e=Array.from(new Set([...Y,...g.map(t=>t.id)]));try{localStorage.setItem("multasSerproVistas",JSON.stringify(e))}catch{}ye(e)},B=u.useMemo(()=>(m||[]).filter(t=>{var p;if(J&&t.driverId!==J)return!1;const s=D(t.status);if(x==="pendentes"&&s!=="pending"||x==="pagas"&&s!=="paid"||x==="recurso"&&s!=="appealed"||x==="indicar"&&((p=t.indicacao)==null?void 0:p.status)!=="pendente"||x==="novas"&&!g.some(b=>b.id===t.id))return!1;if(w){const b=w.toLowerCase();if(![t.driverName,t.vehiclePlate,t.description,t.location,t.autoInfracao,t.notes].filter(Boolean).join(" ").toLowerCase().includes(b))return!1}return!0}),[m,J,x,w,g]),c=u.useMemo(()=>{const e=m||[],t=e.filter(v=>D(v.status)==="pending"),s=e.filter(v=>{var f;return(f=v.telemetryMatch)==null?void 0:f.matched}),p=e.filter(v=>{var f;return((f=v.indicacao)==null?void 0:f.status)==="pendente"}),b=p.filter(v=>{var pe;const f=X((pe=v.indicacao)==null?void 0:pe.prazoIndicacao);return f!=null&&f<=7});return{total:e.length,valor:e.reduce((v,f)=>v+(f.fineAmount||0),0),pendentes:t.length,pontos:e.reduce((v,f)=>v+(f.points||0),0),confirmadas:s.length,aIndicar:p.length,urgentes:b.length}},[m]),Ce=u.useMemo(()=>[{key:"motorista",label:"Motorista",width:"1.3fr",render:e=>a.jsxs("span",{children:[e.driverName||"â",e.source==="serpro_auto"&&a.jsx("span",{className:"ml-1.5 text-[9px] font-bold px-1 py-0.5 rounded",style:{background:"rgba(124,58,237,0.15)",color:"#7C3AED"},title:"Detectada automaticamente via SENATRAN",children:"AUTO"})]}),sortValue:e=>e.driverName||""},{key:"data",label:"Data",width:100,render:e=>e.date?me(e.date):"â",sortValue:e=>e.date||""},{key:"placa",label:"Placa",width:90,render:e=>a.jsx("span",{className:"font-mono",children:e.vehiclePlate||"â"}),sortValue:e=>e.vehiclePlate||""},{key:"tipo",label:"Tipo",width:"1fr",render:e=>W(e.infractionType),sortValue:e=>e.infractionType},{key:"valor",label:"Valor",width:110,align:"right",render:e=>a.jsx("span",{className:"tabular-nums",style:{color:"#D97706"},children:E(e.fineAmount||0)}),sortValue:e=>e.fineAmount||0},{key:"pontos",label:"Pontos",width:70,align:"right",render:e=>e.points>0?a.jsx("span",{className:"tabular-nums font-semibold",style:{color:"#DC2626"},children:e.points}):"â",sortValue:e=>e.points||0},{key:"status",label:"Status",width:100,render:e=>{const t=P[D(e.status)]||P.pending;return a.jsx(z,{label:t.label,cor:t.cor})},sortValue:e=>D(e.status)},{key:"indicacao",label:"Indicação",width:130,render:e=>{var s;const t=$(e);return a.jsx(z,{label:t.label,cor:t.cor,icone:((s=e.indicacao)==null?void 0:s.status)==="indicado"?K:void 0})},sortValue:e=>$(e).dias??999},{key:"telemetria",label:"Telemetria",width:110,render:e=>{var t,s,p;return(t=e.telemetryMatch)!=null&&t.matched?a.jsx(z,{label:"Confirmada",cor:"#059669",icone:be,title:`Evento: ${(s=e.telemetryMatch.matchedEvent)==null?void 0:s.eventType} · ${((p=e.telemetryMatch.matchedEvent)==null?void 0:p.speed)??"-"} km/h`}):e.telemetryMatch?a.jsx(z,{label:`${e.telemetryMatch.totalEventsInWindow} evt`,cor:"#64748B",icone:Je}):a.jsx("span",{className:"text-[11px]",style:{color:"var(--page-text-muted)"},children:"não cruzada"})}}],[]),je=()=>{G(null),h(xe),F(!0)},Ie=e=>{G(e.id),h({driverId:e.driverId||"",date:e.date?e.date.slice(0,16):"",vehiclePlate:e.vehiclePlate||"",infractionType:e.infractionType||"speeding",autoInfracao:e.autoInfracao||"",description:e.description||"",location:e.location||"",fineAmount:e.fineAmount?String(e.fineAmount):"",points:e.points?String(e.points):"",notes:e.notes||""}),F(!0)},we=async()=>
70{if(!d.driverId||!d.date||!d.infractionType){r({title:"Motorista, data e tipo são obrigatórios",kind:"warning"});return}ee(!0);try{const e={...d,fineAmount:d.fineAmount?Number(d.fineAmount):0,points:d.points?Number(d.points):0};O?await N.updateInfraction(O,e):await N.createInfraction(e),F(!1),r({title:O?"Multa atualizada":"Multa registrada",kind:"success"}),y()}catch(e){r({title:"Não consegui salvar",description:e==null?void 0:e.message,kind:"error"})}finally{ee(!1)}},$e=async e=>{if(await i({titulo:"Excluir esta multa?",descricao:`${e.driverName||"â"} · ${W(e.infractionType)} · ${E(e.fineAmount||0)}. Não dá para desfazer.`,confirmar:"Excluir"}))try{await N.deleteInfraction(e.id),r({title:"Multa excluÃda",kind:"success"}),S(null),y()}catch(t){r({title:"Não consegui excluir",description:t==null?void 0:t.message,kind:"error"})}},ke=u.useCallback(async e=>{var t;M(`tele:${e.id}`);try{const s=await N.matchInfractionTelemetry(e.id);I(),(t=s.telemetryMatch)!=null&&t.matched?r({title:"Correspondência encontrada na telemetria",kind:"success"}):s.telemetryMatch?r({title:"Nenhuma correspondência direta",description:`${s.telemetryMatch.totalEventsInWindow} evento(s) na janela de tempo.`,kind:"info"}):r({title:"Sem telemetria para este perÃodo",kind:"info"}),S(p=>(p==null?void 0:p.id)===e.id?{...p,telemetryMatch:s.telemetryMatch??p.telemetryMatch}:p)}catch(s){r({title:"Não consegui cruzar com a telemetria",description:s==null?void 0:s.message,kind:"error"})}finally{M(null)}},[I,r]),Se=u.useCallback(async e=>{M(`fici:${e}`);try{const t=await N.ficiFormulario(e);Qe(t)||r({title:"Pop-up bloqueado",description:"Permita pop-ups neste site para imprimir o FICI.",kind:"warning",durationMs:8e3}),I()}catch(t){r({title:"Não consegui gerar o FICI",description:t==null?void 0:t.message,kind:"error"})}finally{M(null)}},[I,r]),Ae=async e=>{var t;if(!L){r({title:"Escolha o condutor que dirigia",kind:"warning"});return}M(`ind:${e.id}`);try{const s=await N.indicarCondutor(e.id,L),p=(t=(V||[]).find(b=>b.driverId===L))==null?void 0:t.name;S(b=>(b==null?void 0:b.id)===e.id?{...b,indicacao:{...b.indicacao||{},status:"indicado",driverName:p,indicadoEm:new Date().toISOString()}}:b),I(),r({title:"Condutor indicado",description:s.prazoVencido?"Atenção: o prazo legal já venceu â confirme com o órgão autuador. Imprima o FICI no botão acima.":"Imprima o FICI, assine, anexe a CNH e protocole no órgão autuador (CTB art. 257 §7º).",kind:s.prazoVencido?"warning":"success",durationMs:8e3})}catch(s){r({title:"Não consegui indicar",description:s==null?void 0:s.message,kind:"error"})}finally{M(null)}},te=["Motorista","Data","Placa","Tipo","Auto Infração","Local","Valor","Pontos","Status","Indicação","Telemetria"],oe=u.useCallback(()=>B.map(e=>{var t;return[e.driverName||"â",De(e.date),e.vehiclePlate||"â",W(e.infractionType),e.autoInfracao||"â",e.location||"â",E(e.fineAmount||0),e.points||0,(P[D(e.status)]||P.pending).label,$(e).label,(t=e.telemetryMatch)!=null&&t.matched?"Confirmada":"Não verificada"]}),[B]);if(C&&!R)return a.jsx(Fe,{error:C,onRetry:y,title:"Não foi possÃvel carregar as multas"});const Me=[{value:"",label:"Todos os motoristas"},...(V||[]).map(e=>({value:e.driverId,label:e.name}))],ne=[{value:"",label:"Selecione o motoristaâ¦"},...(V||[]).map(e=>({value:e.driverId,label:e.name}))];return a.jsxs("div",{className:"space-y-5",children:[o.modo==="conectado"&&a.jsx(He,{origem:o.origem,mesmoConectado:o.mesmoConectado}),g.length>0&&a.jsx(Be,{icone:Ue,titulo:`${g.length} multa${g.length===1?"":"s"} nova${g.length===1?"":"s"} detectada${g.length===1?"":"s"} pelo SENATRAN`,base:"consulta automática · confira o prazo de indicação do condutor",chips:g.slice(0,5).map(e=>({key:e.id,label:`${e.vehiclePlate||"â"} · ${j(e.date)}`,onClick:()=>S(e)})),totalChips:g.length,acao:{label:"Marcar como vistas",onClick:Ne}}),a.jsxs("div",{className:"grid grid-cols-2 lg:grid-cols-5 gap-3",children:[a.jsx(_,{rotulo:"Multas",valor:c.total,base:"últimas 500 registradas"}),a.jsx(_,{rotulo:"Valor",valor:E(c.valor),base:"soma das multas listadas",tom:c.valor>0?"atencao":"neutro"}),a.jsx(_,{rotulo:"Pendentes",valor:c.pendentes,base:"sem pagamento nem recurso",tom:c.pendentes>0?"atencao":"ok"}),a.jsx(_,{rotulo:"Indicação a vencer",valor:c.aIndicar,base:c.urgentes>0?`${c.urgentes} com 7 dias ou menos`:"nenhuma urgente",tom:c.urgentes>0?"critico":c.aIndicar>0?"atencao":"neutro"}),a.jsx(_,{rotulo:"Confirmadas pela telemetria",valor:c.confirmadas,base:c.total>0?`${Math.round(c.confirmadas/c.total*100)}% das multas`:"sem multa para cruzar"})]}),a.jsxs("div",{className:"flex items-end gap-2 flex-wrap",children:[a.jsxs("label",{className:"relative flex-1 min-w-[220px]",children:[a.jsx(We,{className:"w-4 h-4 absolute left-3 top-[30px]",style:{color:"var(--page-text-muted)"},"aria-hidden":"true"}),a.jsx("span",{className:"block text-[10px] mb-1",style:{color:"var(--page-text-muted)"},children:"Buscar"}),a.jsx("input",{value:w,onChange:e=>ge(e.target.value),placeholder:"Motorista, placa, local, auto de infração","aria-label":"Buscar multas",className:"w-full pl-9 pr-3 py-1.5 rounded-lg text-sm",style:{background:"var(--surface-primary)",color:"var(--page-text)",border:"1px solid var(--border-primary)"}})]}),a.jsx("div",{className:"w-56",children:a.jsx(q,{label:"Motorista",value:J,onChange:ve,options:Me})}),a.jsx(Ve,{onExportExcel:()=>Re({filename:`multas-${new Date().toISOString().slice(0,10)}`,sheetName:"Multas",headers:te,rows:oe()}),onExportPdf:()=>ze({filename:`multas-${new Date().toISOString().slice(0,10)}`,title:"Relatório de Multas e Infrações",subtitle:`${B.length} registro(s)`,headers:te,rows:oe(),kpis:[{label:"Multas",value:c.total},{label:"Valor",value:E(c.valor)},{label:"Pendentes",value:c.pendentes},{label:"Pontos",value:c.pontos},{label:"Confirmadas",value:c.confirmadas}]}),disabled:!B.length}),a.jsxs("button",{type:"button",onClick:async()=>{var e;try{const t=await N.serproInfracoesEmpresa(),s=(t==null?void 0:t.quantidadeInfracoes)||((e=t==null?void 0:t.infracoes)==null?void 0:e.length)||0;r({title:`SENATRAN: ${s} infraç${s===1?"ão":"ões"}`,description:"Consulta salva no cache SERPRO.",kind:"success"}),y()}catch(t){r({title:"A consulta ao SENATRAN falhou",description:t==null?void 0:t.message,kind:"error"})}},className:"inline-flex items-center gap-1.5 px-3 py-2 rounded-lg text-xs font-medium hover-surface",style:{border:"1px solid var(--border-primary)",color:"var(--page-text-secondary)"},children:[a.jsx(be,{className:"w-3.5 h-3.5","aria-hidden":"true"})," Consultar SENATRAN"]})]}),a.jsx(Oe,{rows:B,rowKey:e=>e.id,columns:Ce,loading:R&&!m,filterChips:[{key:"todas",label:"Todas",active:x==="todas",onClick:()=>k("todas")},{key:"pendentes",label:"Pendentes",active:x==="pendentes",onClick:()=>k("pendentes")},{key:"indicar",label:"Indicação a vencer",active:x==="indicar",onClick:()=>k("indicar")},{key:"recurso",label:"Em recurso",active:x==="recurso",onClick:()=>k("recurso")},{key:"pagas",label:"Pagas",active:x==="pagas",onClick:()=>k("pagas")},...g.length?[{key:"novas",label:`Novas do SENATRAN (${g.length})`,active:x==="novas",onClick:()=>k("novas")}]:[]],onRowOpen:e=>{ae(e.driverId||""),S(e)},onCreate:o.podeCriar?je:void 0,createLabel:"Registrar multa",emptyTitle:"Nenhuma multa aqui.",emptyBody:"Registre uma multa ou consulte o SENATRAN para trazer as autuações da frota."}),a.jsx(Le,{open:!!n,onClose:()=>S(null),title:n?`${W(n.infractionType)} · ${n.vehiclePlate||"sem placa"}`:"",subtitle:n&&a.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[a.jsx(z,{...P[D(n.status)]||P.pending}),(()=>{const e=$(n);return a.jsx(z,{label:e.label,cor:e.cor})})(),a.jsxs("span",{className:"text-xs",style:{color:"var(--page-text-muted)"},children:[n.driverName||"â"," · ",n.date?me(n.date):"â"]})]}),actions:n&&a.jsxs("div",{className:"flex items-center gap-1.5 flex-wrap",children:[((re=n.indicacao)==null?void 0:re.status)==="indicado"&&a.jsxs("button",{type:"button",onClick:()=>Se(n.id),disabled:A===`fici:${n.id}`,className:"inline-flex items-center gap-1 px-2.5 py-1 rounded-lg text-xs font-semibold text-white disabled:opacity-60",style:{background:"#059669"},children:[A===`fici:${n.id}`?a.jsx(U,{className:"w-3.5 h-3.5 animate-spin","aria-hidden":"true"}):a.jsx(Ze,{className:"w-3.5 h-3.5","aria-hidden":"true"})," Imprimir FICI"]}),!n.telemetryMatch&&a.jsxs("button",{type:"button",onClick:()=>ke(n),disabled:A===`tele:${n.id}`,className:"inline-flex items-center gap-1 px-2.5 py-1 rounded-lg text-xs font-semibold disabled:opacity-60",style:{border:"1px solid var(--border-primary)",color:"#2563EB"},children:[A===`tele:${n.id}`?a.jsx(U,{className:"w-3.5 h-3.5 animate-spin","aria-hidden":"true"}):a.jsx(Ke,{className:"w-3.5 h-3.5","aria-hidden":"true"})," Cruzar telemetria"]}
70),a.jsxs("button",{type:"button",onClick:()=>Ie(n),className:"inline-flex items-center gap-1 px-2.5 py-1 rounded-lg text-xs font-semibold",style:{border:"1px solid var(--border-primary)",color:"var(--page-text)"},children:[a.jsx(Xe,{className:"w-3.5 h-3.5","aria-hidden":"true"})," Editar"]}),a.jsxs("button",{type:"button",onClick:()=>$e(n),className:"inline-flex items-center gap-1 px-2.5 py-1 rounded-lg text-xs font-semibold",style:{border:"1px solid var(--border-primary)",color:"#DC2626"},"aria-label":"Excluir multa",children:[a.jsx(Ge,{className:"w-3.5 h-3.5","aria-hidden":"true"})," Excluir"]})]}),tabs:[{key:"resumo",label:"Resumo",content:n&&a.jsxs("div",{className:"space-y-5",children:[a.jsx("dl",{className:"grid grid-cols-2 gap-x-4 gap-y-3 text-sm",children:[["Auto de infração",n.autoInfracao||"â"],["Valor",E(n.fineAmount||0)],["Pontos na CNH",n.points||0],["Local",n.location||"â"],["Descrição",n.description||"â"],["Observações",n.notes||"â"],["Telemetria",(se=n.telemetryMatch)!=null&&se.matched?`Confirmada · ${((le=n.telemetryMatch.matchedEvent)==null?void 0:le.eventType)||"evento"} a ${((ie=n.telemetryMatch.matchedEvent)==null?void 0:ie.speed)??"-"} km/h`:n.telemetryMatch?`${n.telemetryMatch.totalEventsInWindow} evento(s) na janela, nenhum bate`:"ainda não cruzada"]].map(([e,t])=>a.jsxs("div",{className:["Descrição","Observações","Telemetria","Local"].includes(String(e))?"col-span-2":"",children:[a.jsx("dt",{className:"text-[11px] uppercase tracking-wide",style:{color:"var(--page-text-muted)"},children:e}),a.jsx("dd",{style:{color:"var(--page-text)"},children:t})]},String(e)))}),((de=n.indicacao)==null?void 0:de.status)==="pendente"&&a.jsxs("section",{className:"rounded-xl p-4 space-y-3",style:{border:`1px solid ${$(n).cor}66`,background:`${$(n).cor}0D`},"aria-labelledby":"indicar-titulo",children:[a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx(K,{className:"w-4 h-4",style:{color:$(n).cor},"aria-hidden":"true"}),a.jsx("h3",{id:"indicar-titulo",className:"text-sm font-semibold",style:{color:"var(--page-text)"},children:"Indicar o condutor que dirigia"})]}),a.jsxs("p",{className:"text-xs",style:{color:"var(--page-text-muted)"},children:["Prazo: ",j(n.indicacao.prazoIndicacao),(()=>{const e=X(n.indicacao.prazoIndicacao);return e==null?"":e<0?" · vencido":` · ${e} dia${e===1?"":"s"}`})(),". Depois, imprima o FICI, assine, anexe a CNH e protocole no órgão autuador (CTB art. 257 §7º)."]}),a.jsx(q,{label:"Condutor",value:L,onChange:ae,options:ne}),a.jsxs("button",{type:"button",onClick:()=>Ae(n),disabled:!L||A===`ind:${n.id}`,className:"inline-flex items-center gap-1.5 px-3 py-2 rounded-lg text-xs font-semibold text-white disabled:opacity-60",style:{background:"#D97706"},children:[A===`ind:${n.id}`?a.jsx(U,{className:"w-3.5 h-3.5 animate-spin","aria-hidden":"true"}):a.jsx(K,{className:"w-3.5 h-3.5","aria-hidden":"true"})," Indicar condutor"]})]}),((ce=n.indicacao)==null?void 0:ce.status)==="expirado"&&a.jsxs("p",{className:"text-xs inline-flex items-center gap-1.5",style:{color:"#DC2626"},children:[a.jsx(Ye,{className:"w-3.5 h-3.5","aria-hidden":"true"})," O prazo de indicação venceu em ",j(n.indicacao.prazoIndicacao),"."]}),((ue=n.indicacao)==null?void 0:ue.status)==="indicado"&&a.jsxs("p",{className:"text-xs",style:{color:"var(--page-text-muted)"},children:["Indicado: ",n.indicacao.driverName||"â"," em ",j(n.indicacao.indicadoEm),"."]})]})}]}),a.jsx(_e,{open:fe,onClose:()=>F(!1),title:O?"Editar multa":"Registrar multa",footer:a.jsxs(a.Fragment,{children:[a.jsx("button",{type:"button",onClick:()=>F(!1),className:"px-3 py-2 rounded-lg text-sm hover-surface",style:{color:"var(--page-text)"},children:"Cancelar"}),a.jsxs("button",{type:"button",onClick:we,disabled:Q||!d.driverId||!d.date,className:"inline-flex items-center gap-1.5 px-4 py-2 rounded-lg text-sm font-semibold text-white disabled:opacity-60",style:{background:"#DC2626"},children:[Q&&a.jsx(U,{className:"w-4 h-4 animate-spin","aria-hidden":"true"})," ",O?"Salvar":"Registrar"]})]}),children:a.jsxs("div",{className:"space-y-3",children:[a.jsx(q,{label:"Motorista *",value:d.driverId,onChange:e=>h(t=>({...t,driverId:e})),options:ne}),a.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[a.jsx(T,{label:"Data e hora *",type:"datetime-local",value:d.date,onChange:e=>h(t=>({...t,date:e}))}),a.jsx(q,{label:"VeÃculo",value:d.vehiclePlate,onChange:e=>h(t=>({...t,vehiclePlate:e})),options:[{value:"",label:"Selecioneâ¦"},...(H||[]).map(e=>({value:e.plate,label:`${e.plate} â ${e.brand||""} ${e.model||""}`.trim()}))]})]}),a.jsx(q,{label:"Tipo de infração *",value:d.infractionType,onCh
70ange:e=>h(t=>({...t,infractionType:e})),options:he}),a.jsx(T,{label:"Nº do auto de infração",value:d.autoInfracao,onChange:e=>h(t=>({...t,autoInfracao:e})),placeholder:"Código do auto"}),a.jsx(T,{label:"Local",value:d.location,onChange:e=>h(t=>({...t,location:e})),placeholder:"BR-101 km 45, São Paulo/SP"}),a.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[a.jsx(T,{label:"Valor (R$)",type:"number",inputMode:"decimal",value:d.fineAmount,onChange:e=>h(t=>({...t,fineAmount:e})),placeholder:"0,00"}),a.jsx(T,{label:"Pontos na CNH",type:"number",inputMode:"numeric",value:d.points,onChange:e=>h(t=>({...t,points:e})),placeholder:"0"})]}),a.jsx(T,{label:"Descrição",value:d.description,onChange:e=>h(t=>({...t,description:e})),placeholder:"Detalhes da infração"}),a.jsx(qe,{label:"Observações internas",value:d.notes,onChange:e=>h(t=>({...t,notes:e}))})]})})]})}export{ba as InfractionsPage};
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.