1import{u as se,a as re,j as a}from"./vendor-query-C0G7-zTq.js";import{r as i,u as ne}from"./vendor-react-Cog84hhN.js";import{e as b,h as S,aB as te,E as oe,aa as P,ag as f,C as ie,B as g,U as le,m as R,aw as A,x as ce,n as de}from"./index-Cn9CABFg.js";import{P as pe}from"./ProposalCardWithCover-CAjlawCa.js";import{P as ue}from"./Pagination-BSVkuwRT.js";import{P as me}from"./ProposalAnalysisModal-CZZn3sE4.js";import{R as fe}from"./RejectProposalDialog-BShCXZ6i.js";import{e as ge}from"./api-response.helper-Bh_830H5.js";import{R as U}from"./questionAnalysis.types-B5eOgNON.js";import{c as q}from"./date.utils-DUN3k-Gl.js";import{R as Q}from"./refresh-cw-CMY5TN2i.js";import"./vendor-sentry-Bg9nlJsI.js";import"./vendor-charts-Dj5OJhBv.js";import"./SocialMediaIcon-BBozXqoT.js";import"./facebook-CFdj2sVz.js";import"./instagram-DGwymjTM.js";import"./ProposalStatusMessage-fxHerl8Q.js";import"./circle-check-big--NziOk2e.js";import"./circle-x-Btf6WtrL.js";import"./AppealBadge-TE22DVsw.js";import"./socialMedia.utils-BzrL0n16.js";import"./url-CUnfgI68.js";import"./proposalRejection.utils-B7Un2dRB.js";import"./chevron-right-BmQMJJjB.js";import"./useQuestionAnalysis-CqDC8qqV.js";import"./chevron-down-CnPxfC7L.js";import"./info-D7l0dLHn.js";import"./copy-REvpMDaY.js";import"./InternalRejectionReasonsField-BJJpKzFe.js";import"./useProposalRejectionReasons-BBWzEe-H.js";import"./analysisCriteria.types-BtSoQwiG.js";(function(){try{var s=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{};s.SENTRY_RELEASE={id:"[email protected]"}}catch{}})();try{(function(){var s=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},r=new s.Error().stack;r&&(s._sentryDebugIds=s._sentryDebugIds||{},s._sentryDebugIds[r]="bce2200f-f0f9-4ed4-b437-55acc4412f48",s._sentryDebugIdIdentifier="sentry-dbid-bce2200f-f0f9-4ed4-b437-55acc4412f48")})()}catch{}async function xe(s={}){const t=(await b.get("/api/brand/human-review-queue",{params:s})).data.data;return{...t,items:t.items.map(d=>({...d,proposal:d.proposal?te(d.proposal):null}))}}async function he(s,r){const t=r?.trim();await b.post(`/api/brand/human-review-queue/${s}/approve`,{notes:t?S(t):void 0})}async function ye(s,r){const t=r.rejectionReason.trim(),d=r.notes?.trim();await b.post(`/api/brand/human-review-queue/${s}/reject`,{allowsResubmit:r.allowsResubmit,rejectionReason:t?S(t):void 0,internalRejectionReasonIds:r.internalRejectionReasonIds,notes:d?S(d):void 0})}async function ve(s){await b.post(`/api/brand/human-review-queue/${s}/reanalyze`)}async function je(s){return(await b.post("/api/brand/human-review-queue/reanalyze-analysis-failures",{campaignScope:s})).data.data}function j(s,r){return ge(s,r)}const be=["analysis_failure","unsupported_media","multiple_media","profile_not_validated"],Ne=["analysis_failure","question_review","unsupported_media"];function we(s){return s.hasBasicAccess||s.hasFinancialAccess||s.hasAdministrativeAccess}function Re(s){const r=s.resolvedVia==="outside_queue";switch(s.resolution){case"approved":return{title:r?"Proposta aprovada fora da fila":"Aprovada na fila",kind:"human"};case"rejected":return{title:r?"Proposta reprovada fora da fila":"Reprovada na fila",kind:"human"};case"reanalyzed":return{title:"Resolvida pela reanálise",kind:"human"};case"superseded":return{title:"Fechada: uma versão nova da proposta foi analisada",kind:"system"};case"closed":return{title:"Fechada: a proposta não aguarda mais decisão",kind:"system"};default:return{title:"Resolvida",kind:"system"}}}function Ae(s){return s?s.status==="processing"?"Reanálise em andamento.":s.status==="failed"?"A última reanálise também falhou.":s.skipReason?.startsWith("shadow:")?"A última reanálise rodou só como simulação â nada foi decidido.":s.decision==="retain"?"A última reanálise reteve a proposta de novo.":null:null}function V(s,r,t){return s==="pending"&&r===1&&t>1}function Ie(s){return s<=0?"hoje":s===1?"há 1 dia":`há ${s} dias`}function Ee(s){const r=[`${s.enqueued} ${s.enqueued===1?"reanálise enfileirada":"reanálises enfileiradas"}`],t=Object.entries(s.skipped);if(t.length>
10){const d=t.reduce((p,[,y])=>p+y,0);r.push(`${d} de fora: ${t.map(([p,y])=>`${p} (${y})`).join("; ")}`)}return s.truncated&&r.push("havia mais itens do que o limite por pedido â repita depois"),r.join(" · ")}const ke=[{value:"pending",label:"Pendentes"},{value:"resolved",label:"Resolvidas"},{value:"all",label:"Todas"}],Ce=20,_e=1e3;function ca(){const[s,r]=i.useState("pending"),[t,d]=i.useState("all"),[p,y]=i.useState("current"),[x,I]=i.useState(1),[T,M]=i.useState(()=>new Set),[B,$]=i.useState(!1),[v,O]=i.useState({}),[c,E]=i.useState(null),[z,L]=i.useState(null),k=se(),W=ne(),G=oe(),C=we(G),{data:o,isLoading:K,error:D}=re({queryKey:[...P.HUMAN_REVIEW_QUEUE,s,t,p,x],queryFn:()=>xe({status:s,origin:t,campaignScope:p,page:x,pageSize:Ce}),staleTime:30*1e3,gcTime:1800*1e3}),N=o?.pendingByOrigin.analysis_failure??0,Y=Object.values(o?.pendingByOrigin??{}).reduce((e,n)=>e+n,0),u=i.useCallback(async e=>{e&&I(n=>n-1),await k.invalidateQueries({queryKey:P.HUMAN_REVIEW_QUEUE,refetchType:e?"none":"active"}),await k.invalidateQueries({queryKey:P.BRAND_PROPOSALS_LIST,refetchType:"none"})},[k]),h=(e,n)=>M(l=>{const m=new Set(l);return n?m.add(e):m.delete(e),m}),F=e=>O(n=>{const l={...n};return delete l[e],l}),X=i.useCallback(async e=>{const n=e.proposal?.influencerName??"o creator";if(window.confirm(`Aprovar a proposta de ${n}? à a mesma aprovação do card: o creator é avisado e não há como desfazer.`)){h(e.id,!0);try{await he(e.id,v[e.id]),f.success("Proposta aprovada."),F(e.id),await u(V(s,o?.items.length??0,x))}catch(l){f.error(j(l,"Não foi possÃvel aprovar.")),await u(!1)}finally{h(e.id,!1)}}},[v,s,o?.items.length,x,u]),Z=i.useCallback(async e=>{if(!c)return;const n=c;h(n.id,!0);try{await ye(n.id,{...e,notes:v[n.id]}),f.success("Proposta reprovada."),F(n.id),E(null),await u(V(s,o?.items.length??0,x))}catch(l){f.error(j(l,"Não foi possÃvel reprovar.")),await u(!1)}finally{h(n.id,!1)}},[c,v,s,o?.items.length,x,u]),J=i.useCallback(async e=>{if(window.confirm('Reanalisar esta proposta? A análise vale de verdade: se encontrar "Não", a proposta é reprovada.')){h(e.id,!0);try{await ve(e.id),f.success("Reanálise enfileirada. O resultado aparece aqui quando terminar."),await u(!1)}catch(n){f.error(j(n,"Não foi possÃvel pedir a reanálise.")),await u(!1)}finally{h(e.id,!1)}}},[u]),ee=i.useCallback(async()=>{const e=p==="current"?" de campanhas vigentes":"";if(window.confirm(`Reanalisar as ${N} proposta(s)${e} retidas por falha na avaliação automática? A análise vale de verdade: quem tiver "Não" é reprovado.`)){$(!0);try{const n=await je(p);f.success(Ee(n)),await u(!1)}catch(n){f.error(j(n,"Não foi possÃvel pedir as reanálises."))}finally{$(!1)}}},[p,N,u]),w=e=>{e(),I(1)};return a.jsxs(ie,{children:[a.jsxs("div",{className:"mb-6",children:[a.jsx("h1",{className:"text-2xl font-semibold text-gray-900",children:"Revisão humana"}),a.jsx("p",{className:"mt-1 text-sm text-gray-600",children:"Propostas que a análise automática não decidiu sozinha. A mais antiga aparece primeiro. Aprovar e reprovar aqui é a mesma decisão do card da proposta."}),!C&&a.jsx("p",{className:"mt-2 rounded-lg border border-amber-200 bg-amber-50 p-3 text-sm text-amber-800",children:"Você pode ver a fila, mas aprovar, reprovar e reanalisar exigem também acesso básico, financeiro ou administrativo."})]}),a.jsxs("div",{className:"mb-3 flex flex-wrap items-center gap-2",children:[ke.map(e=>a.jsx(g,{variant:s===e.value?"default":"outline",size:"sm",onClick:()=>w(()=>r(e.value)),children:e.label},e.value)),a.jsxs("label",{className:"ml-auto flex cursor-pointer items-center gap-2 text-sm text-gray-700",children:[a.jsx("input",{type:"checkbox",checked:p==="all",onChange:e=>w(()=>y(e.target.checked?"all":"current")),className:"h-4 w-4 rounded border-gray-300"}),"Incluir campanhas encerradas"]})]}),a.jsxs("div",{className:"mb-4 flex flex-wrap gap-2",children:[a.jsxs(g,{variant:t==="all"?"default":"outline",size:"sm",onClick:()=>w(()=>d("all")),children:["Todas as origens",o?` (${Y})`:""]}),be.map(e=>a.jsxs(g,{variant:t===e?"default":"outline",size:"sm",onClick:()=>w(()=>d(e)),children:[U[e]??e,o?` (${o.pendingByOrigin[e]??0})`:""]},e))]}),C&&s==="pending"&&N>0&&(t==="all"||t==="analysis_failure")&&a.jsxs("div",{className:"mb-4 flex flex-wrap items-center justify-between gap-3 rounded-lg border border-gray-200 bg-white p-3",children:[a.jsxs("p",{className:"text-sm text-gray-700",children:[N," proposta(s) pendentes por falha na avaliação automática",p==="current"?", em campanhas vigentes":"",". Se a falha já passou (por exemplo, o serviço de IA voltou), dá para reanalisar todas de uma vez."]}),a.jsxs(g,{variant:"outline",size:"sm",onClick:ee,disabled:B,children:[a.jsx(Q,{className:"mr-1 h-4 w-4"}),B?"Enfileirando...":"Reanalisar todas as falhas"]})]}),K&&a.jsx("div",{className:"flex justify-center py-12",children:a.jsx(le,{className:"h-6 w-6 animate-spin text-gray-400"})}),D&&a.jsx(R,{children:a.jsx(A,{children:a.jsxs("div",{className:"flex items-center gap-2 text-red-700",children:[a.jsx(ce,{className:"h-5 w-5"}),a.jsx("span",{children:j(D,"Não foi possÃvel carregar a fila.")})]})})}),o&&o.items.length===0&&a.jsx(R,{children:a.jsx(A,{children:a.jsx("p",{className:"py-8 text-center text-gray-500",children:"Nenhum item nesta visão."})})}),a.jsx("div",{className:"space-y-6",children:o?.items.map(e=>{const n=e.resolvedAt===null,l=e.itemType==="proposal",m=T.has(e.id),H=n?Ae(e.lastReanalysis):null;return a.jsxs("div",{className:"flex flex-col gap-4 lg:flex-row lg:items-start",children:[a.jsx("div",{className:"w-full lg:w-[360
1px] lg:flex-shrink-0",children:l&&e.proposal?a.jsx(pe,{proposalId:e.proposal.proposalId,status:e.proposal.status,proposedValue:e.proposal.proposedValue,createdAt:e.proposal.createdAt,updatedAt:e.proposal.updatedAt||e.proposal.createdAt,campaignId:e.proposal.campaignId,campaignName:e.proposal.campaignName,campaignCoverImageUrl:e.proposal.campaignCoverImageUrl,campaignEndDate:e.proposal.campaignEndDate,viewType:"brand",influencerId:e.proposal.influencerId,influencerName:e.proposal.influencerName,influencerFullName:e.proposal.influencerFullName,influencerNickname:e.proposal.influencerNickname,influencerPhoto:e.proposal.influencerPhoto,influencerCategory:e.proposal.influencerCategory,description:e.proposal.description,mediaCount:e.proposal.mediaCount,socialMediaProfiles:e.proposal.socialMediaProfiles,rejectionHistory:e.proposal.rejectionHistory,appeal:e.proposal.appeal,resubmissionAttempts:e.proposal.resubmissionAttempts,analysisEngine:e.proposal.analysisEngine,analysisOutcome:e.proposal.analysisOutcome,onViewCampaign:_=>W(`/brand/campaigns/${_}/details`)}):a.jsx(R,{children:a.jsxs(A,{children:[a.jsx("p",{className:"py-8 text-center text-sm text-gray-500",children:l?"Proposta não disponÃvel no card.":"VÃnculo de rede social."}),e.campaignName&&a.jsx("p",{className:"text-center text-xs text-gray-400",children:e.campaignName})]})})}),a.jsx(R,{className:"w-full lg:flex-1",children:a.jsxs(A,{children:[a.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[a.jsxs("div",{className:"min-w-0",children:[a.jsx("span",{className:`inline-flex rounded-full px-2.5 py-1 text-xs font-semibold ${e.origin==="analysis_failure"?"border border-red-200 bg-red-50 text-red-700":"border border-amber-200 bg-amber-50 text-amber-800"}`,children:U[e.origin]??e.origin}),a.jsx("p",{className:"mt-2 whitespace-pre-wrap text-sm text-gray-800",children:e.reason})]}),a.jsxs("span",{className:"inline-flex items-center gap-1 rounded-full bg-gray-100 px-2.5 py-1 text-xs font-medium text-gray-700",children:[a.jsx(de,{className:"h-3.5 w-3.5"}),Ie(e.daysWaiting)]})]}),a.jsxs("p",{className:"mt-3 text-xs text-gray-500",children:["Na fila desde ",q(e.createdAt),e.campaignName?` · ${e.campaignName}`:"",e.campaignName&&!e.campaignIsCurrent?" (campanha encerrada)":""]}),l&&Ne.includes(e.origin)&&a.jsx("div",{className:"mt-3",children:a.jsx(g,{type:"button",variant:"outline",size:"sm",onClick:()=>L(e.itemId),children:"Ver perguntas"})}),n&&e.reanalysisRequestedAt&&a.jsxs("p",{className:"mt-3 text-sm text-gray-700",children:["Reanálise pedida em ",q(e.reanalysisRequestedAt),e.reanalysisRequestedByName?` por ${e.reanalysisRequestedByName}`:""," â aguardando o resultado."]}),H&&!e.reanalysisRequestedAt&&a.jsx("p",{className:"mt-3 text-sm text-gray-700",children:H}),n?a.jsx("div",{className:"mt-4 border-t border-gray-100 pt-4",children:l?C?a.jsxs(a.Fragment,{children:[a.jsx("textarea",{value:v[e.id]??"",onChange:_=>O(ae=>({...ae,[e.id]:_.target.value})),rows:2,maxLength:_e,"aria-label":"Observação interna",placeholder:"Observação interna (opcional). Fica no histórico do item; o creator não vê.",className:"w-full rounded-lg border border-gray-300 p-3 text-sm focus:border-primary-500 focus:outline-none focus:ring-1 focus:ring-primary-500"}),a.jsxs("div",{className:"mt-3 flex flex-wrap items-center justify-end gap-2",children:[e.origin==="analysis_failure"&&a.jsxs(g,{variant:"outline",onClick:()=>J(e),disabled:m||!e.canReanalyze,title:e.reanalysisBlockedReason??void 0,children:[a.jsx(Q,{className:"mr-1 h-4 w-4"}),"Reanalisar"]}),a.jsx(g,{variant:"outline",onClick:()=>E(e),disabled:m,children:"Reprovar"}),a.jsx(g,{variant:"success",onClick:()=>X(e),disabled:m,children:m?"Processando...":"Aprovar"})]}),e.origin==="analysis_failure"&&e.reanalysisBlockedReason&&a.jsx("p",{className:"mt-2 text-right text-xs text-gray-500",children:e.reanalysisBlockedReason})]}):null:a.jsx("p",{className:"text-sm text-gray-600",children:"Este tipo de item ainda não pode ser decidido por esta tela."})}):a.jsx(Pe,{item:e})]})})]},e.id)})}),o&&o.pagination.totalPages>1&&a.jsx("div",{className:"mt-6",children:a.jsx(ue,{currentPage:o.pagination.currentPage,totalPages:o.pagination.totalPages,onPageChange:I})}),c&&a.jsx(fe,{open:!0,onClose:()=>E(null),onConfirm:Z,isRejecting:T.has(c.id),influencerName:c.proposal?.influencerName,initialRejectionReason:c.suggestedRejection?.message??void 0,initialInternalRejectionReasonIds:c.suggestedRejection?.internalRejectionReasonIds,children:c.suggestedRejection&&c.suggestedRejection.questionLabels.length>0&&a.jsxs("p",{className:"mt-3 text-xs text-gray-500",children:["Pré-preenchido com as perguntas que retiveram a proposta (",c.suggestedRejection.questionLabels.join(", "),"). Edite à vontade."]})},c.id),a.jsx(me,{open:z!==null,onClose:()=>L(null),proposalId:z,engine:"questions"})]})}function Pe({item:s}){const r=Re(s);return a.jsxs("div",{className:"mt-4 border-t border-gray-100 pt-4",children:[a.jsxs("p",{className:`text-sm font-medium ${r.kind==="system"?"text-gray-600":"text-gray-900"}`,children:[r.title,s.resolvedAt?` em ${q(s.resolvedAt)}`:"",r.kind==="human"&&s.resolvedByName?` por ${s.resolvedByName}`:""]}),s.resolutionNotes&&a.jsx("p",{className:"mt-1 whitespace-pre-wrap text-sm text-gray-700",children:s.resolutionNotes})]})}export{ca as default};
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.