1import{c as V,m as ve,q as ge,r as g,j as e,z as te,t as F,L as Pe,C as Te,e as Oe,v as K,S as ke,D as Re,y as z,E as _e,F as Ie,G as $e}from"./index-t_74rNxb.js";import{c as b,a as w,b as A,d as ze,e as De,g as Me}from"./admin-shell-BYjBM8XH.js";import{c as I,u as oe,a as S}from"./admin-auth-C4H19S96.js";import{E as fe}from"./editorial-6hEVOh9z.js";import{p as be,m as Le,A as Be,s as Fe}from"./admin-editorial-block-sandbox-B1yBeDha.js";import{c as je,a as ye,G as Ve}from"./content-shadow-revisions-DzeloXgz.js";import{i as Ae,g as Ue,A as He}from"./admin-domain-status-Da0d_tGW.js";import{S as R}from"./shield-check-Su_nOwHn.js";import{C as Q}from"./circle-check-vNFqeeuC.js";import{T as Ke}from"./triangle-alert-B9xv2jPh.js";import{R as Qe}from"./rotate-ccw-DW91G3Li.js";import{H as Ge}from"./history-CXUfUodr.js";import{E as We}from"./external-link-COK5p5Sk.js";import{A as N,a as Je}from"./admin-exam-resource-screen-GlrrwLrb.js";import{f as Xe,t as Ze,P as J,g as Ye,p as ea,s as aa,l as ia,a as ne}from"./product-catalog-api-7wkHtoFs.js";import{R as re}from"./refresh-ccw-Dka6F3Di.js";import{S as Ne}from"./shield-alert-oQWdeu0A.js";import{C as sa}from"./cloud-upload-spxFTNLM.js";/* empty css */import{P as ta}from"./package-plus-BBH1bQ7o.js";import{S as oa,P as na}from"./save-sk6Q13ki.js";import"./wrench-CVR2rQuP.js";import"./users-Bnouusgh.js";import"./sliders-horizontal-BDbs0WlF.js";import"./chevron-up-B6BmOT5w.js";import"./trash-2-CIO8kNmI.js";const ra=[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 15 21.84",key:"14ibmq"}],["path",{d:"M21 5V8",key:"1marbg"}],["path",{d:"M21 12L18 17H22L19 22",key:"zafso"}],["path",{d:"M3 12A9 3 0 0 0 14.59 14.87",key:"1y4wr8"}]],Ce=V("database-zap",ra);const da=[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]],la=V("database",da);const ca=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 12a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1 1 1 0 0 1 1 1v1a1 1 0 0 0 1 1",key:"1oajmo"}],["path",{d:"M14 18a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1 1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1",key:"mpwhp6"}]],ua=V("file-braces",ca);const ma=[["path",{d:"M16 22h2a2 2 0 0 0 2-2V8a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 14 2H6a2 2 0 0 0-2 2v2.85",key:"ryk6xj"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M8 14v2.2l1.6 1",key:"6m4bie"}],["circle",{cx:"8",cy:"16",r:"6",key:"10v15b"}]],pa=V("file-clock",ma);const ha=[["path",{d:"m14.305 19.53.923-.382",key:"3m78fa"}],["path",{d:"m15.228 16.852-.923-.383",key:"npixar"}],["path",{d:"m16.852 15.228-.383-.923",key:"5xggr7"}],["path",{d:"m16.852 20.772-.383.924",key:"dpfhf9"}],["path",{d:"m19.148 15.228.383-.923",key:"1reyyz"}],["path",{d:"m19.53 21.696-.382-.924",key:"1goivc"}],["path",{d:"M2 21a8 8 0 0 1 10.434-7.62",key:"1yezr2"}],["path",{d:"m20.772 16.852.924-.383",key:"htqkph"}],["path",{d:"m20.772 19.148.924.383",key:"9w9pjp"}],["circle",{cx:"10",cy:"8",r:"5",key:"o932ke"}],["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}]],xa=V("user-round-cog",ha),va=[{schema:"amplivox.content.current-editorial.v1",slug:"o-que-e-audiometria",publicPath:"/o-que-e-audiometria/",category:"Audiometria",title:"O que é Audiometria?",excerpt:"Entenda o exame que avalia a capacidade auditiva e por que ele é importante para identificar alterações na audição.",seo:{title:"O que é Audiometria? | Amplivox Centro Auditivo",description:"Entenda o que é audiometria, para que serve, como o exame é realizado e quando avaliar a audição."},hero:{eyebrow:"Audiometria",title:"O que é Audiometria?",intro:"Um guia sobre o exame que avalia a capacidade de ouvir sons em diferentes frequências e intensidades."},blocks:[{type:"heading",level:2,text:"O que é Audiometria? Um Guia Simples e Completo"},{type:"paragraph",text:"A audiometria é um exame realizado para avaliar como está a audição. Ela mede a capacidade de ouvir sons em diferentes frequências e intensidades e ajuda a identificar problemas auditivos."}
1,{type:"paragraph",text:"O exame é descrito no conteúdo atual da Amplivox como rápido, indolor e importante para quem percebe dificuldade para ouvir ou interpretar sons."},{type:"heading",level:2,text:"Para que serve a audiometria?"},{type:"list",ordered:!1,items:[{label:"Identificar perda auditiva",text:"avalia o grau de dificuldade em ouvir sons."},{label:"Diagnosticar doenças no ouvido",text:"pode auxiliar na investigação de infecções ou obstruções."},{label:"Acompanhar a saúde auditiva",text:"especialmente para pessoas expostas a ruÃdos no trabalho."},{label:"Avaliar a necessidade de aparelhos auditivos",text:"contribui para verificar a indicação de um dispositivo."}]},{type:"heading",level:2,text:"Tipos de Audiometria"},{type:"card-grid",cards:[{title:"Audiometria Tonal",text:"Avalia a sensibilidade a sons de diferentes frequências e intensidades. O resultado é registrado em um audiograma."},{title:"Audiometria Vocal",text:"Mede a capacidade de entender a fala por meio da apresentação e repetição de palavras."},{title:"Logoaudiometria",text:"Relacionada à audiometria vocal, com foco na interpretação das palavras e na compreensão da fala."}]},{type:"heading",level:2,text:"Como é feito o exame de audiometria?"},{type:"paragraph",text:"O exame é realizado em cabine acústica. O paciente utiliza fones de ouvido e responde a estÃmulos sonoros, indicando quando consegue ouvir sons em diferentes volumes e frequências."},{type:"paragraph",text:"Para crianças, o conteúdo atual menciona métodos adaptados com brincadeiras e estÃmulos visuais para facilitar a avaliação."},{type:"heading",level:2,text:"Quando fazer uma audiometria?"},{type:"list",ordered:!1,items:[{text:"Dificuldade para ouvir sons ou entender conversas."},{text:"Zumbido constante."},{text:"Sensação de ouvido tampado."},{text:"Exposição frequente a ruÃdos altos."},{text:"Acompanhamento regular da audição com o envelhecimento, especialmente após os 50 anos."}]},{type:"heading",level:2,text:"Cuide da sua saúde auditiva"},{type:"paragraph",text:"O conteúdo da Amplivox reforça que identificar alterações precocemente permite buscar orientação e acompanhamento antes que dificuldades auditivas interfiram mais na comunicação e na rotina."}],cta:{title:"Quer avaliar sua audição?",text:"Fale com a Amplivox para saber mais sobre os exames auditivos e o atendimento disponÃvel.",label:"Falar com a Amplivox"}},{schema:"amplivox.content.current-editorial.v1",slug:"a-importancia-da-audiometria",publicPath:"/a-importancia-da-audiometria/",category:"Audiometria",title:"A Importância da Audiometria",excerpt:"Veja como a audiometria contribui para identificar alterações auditivas e acompanhar a saúde da audição.",seo:{title:"A Importância da Audiometria | Amplivox",description:"Saiba por que a audiometria é importante para diagnóstico precoce, monitoramento da audição e qualidade de vida."},hero:{eyebrow:"Audiometria",title:"A Importância da Audiometria",intro:"Um exame simples e indolor que ajuda a acompanhar a saúde auditiva em diferentes fases da vida."},blocks:[{type:"heading",level:2,text:"A Importância da Audiometria: Cuidando da Sua Saúde Auditiva"},{type:"paragraph",text:"A audição nos conecta ao mundo ao redor, à s vozes, aos sons e à música. O conteúdo atual da Amplivox apresenta a audiometria como uma ferramenta essencial para avaliar a saúde auditiva e identificar alterações."},{type:"heading",level:2,text:"Por que a audiometria é importante?"},{type:"heading",level:3,text:"1. Diagnóstico precoce de perda auditiva"},{type:"paragraph",text:"A perda auditiva pode surgir de forma gradual. A audiometria ajuda a identificar alterações antes que elas interfiram de forma mais intensa na rotina."},{type:"heading",level:3,text:"2. Prevenção de complicações"},{type:"paragraph",text:"Ao identificar problemas cedo, é possÃvel procurar orientação para condições como zumbido, otite e outras alterações relacionadas à audição."},{type:"heading",level:3,text:"3. Avaliação para uso de aparelhos auditivos"},{type:"paragraph",text:"Quando há dificuldade para ouvir, a audiometria é uma etapa importante para avaliar a necessidade de aparelhos auditivos e orientar a escolha."},{type:"heading",level:3,text:"4. Monitoramento da saúde auditiva"},{type:"paragraph",text:"à especialmente relevante para pessoas expostas com frequência a ruÃdos intensos, como trabalhadores de determinados ambientes e músicos."},{type:"heading",level:3,text:"5. Acompanhamento em todas as idades"},{type:"paragraph",text:"O conteúdo destaca a avaliação desde bebês até idosos, com atenção especial à s crianças em fase de aprendizado e desenvolvimento."},{type:"heading",level:2,text:"Quando devo fazer uma audiometria?"},{type:"list",ordered:!1,items:[{text:"Exposição constante a ruÃdos altos."},{text:"Dificuldade para ouvir ou entender conversas."},{text:"Zumbido ou sensação de ouvido tampado."},{text:"Histórico familiar de problemas auditivos."},{text:"Rotina de cuidados com a saúde, especialmente após os 50 anos."}]},{type:"heading",level:2,text:"A audiometria e a qualidade de vida"},{type:"paragraph",text:"A perda auditiva pode afetar comunicação, trabalho e convÃvio social. A avaliação permite identificar dificuldades e buscar soluções que favoreçam bem-estar e confiança na comunicação."},{type:"heading",level:2,text:"Um pequeno passo no cuidado com a audição"},{type:"paragraph",text:"O conteúdo original recomenda não adiar a avaliação quando existem sinais de dificuldade auditiva ou quando já passou muito tempo desde o último exame."}],cta:{title:"Mantenha sua audição acompanhada",text:"Entre em contato com a Amplivox para saber como realizar uma avaliação auditiva."}},{schema:"amplivox.content.current-editorial.v1",slug:"tipos-de-audiometria",publicPath:"/tipos-de-audiometria/",category:"Audiometria",title:"Tipos de Audiometria",excerpt:"Conheça diferentes exames e avaliações utilizados conforme a necessidade de investigação auditiva.",seo:{title:"Tipos de Audiometria | Amplivox Centro Auditivo",description:"Conheça os principais tipos de audiometria e exames auditivos, suas finalidades e quando podem ser indicados."},hero:{eyebrow:"Audiometria",title:"Tipos de Audiometria",intro:"Cada exame analisa aspectos especÃficos da audição e c
1ontribui para diferentes etapas da avaliação auditiva."},blocks:[{type:"heading",level:2,text:"Tipos de Audiometria: Conheça os Diferentes Exames Auditivos"},{type:"paragraph",text:"A audiometria reúne diferentes exames utilizados para analisar aspectos especÃficos da audição e ajudar na investigação de problemas auditivos."},{type:"heading",level:2,text:"1. Audiometria Tonal"},{type:"paragraph",text:"Mede a capacidade de ouvir sons em diferentes frequências e intensidades. O paciente utiliza fones de ouvido, sinaliza quando percebe os sons e o resultado é registrado em um audiograma."},{type:"list",ordered:!1,items:[{text:"Detectar perda auditiva e medir sua gravidade."},{text:"Auxiliar na avaliação da necessidade de aparelhos auditivos."}]},{type:"heading",level:2,text:"2. Audiometria Vocal"},{type:"paragraph",text:"Avalia a capacidade de entender palavras e sons da fala. O paciente ouve palavras em diferentes volumes e as repete."},{type:"list",ordered:!1,items:[{text:"Investigar dificuldades de comunicação."},{text:"Avaliar a compreensão da fala em pessoas com perda auditiva."}]},{type:"heading",level:2,text:"3. Logoaudiometria"},{type:"paragraph",text:"à apresentada no conteúdo da Amplivox como uma extensão da audiometria vocal, com foco na interpretação da fala e no reconhecimento de palavras em diferentes contextos."},{type:"heading",level:2,text:"4. Medidas de Imitância Acústica"},{type:"paragraph",text:"Esse grupo analisa o funcionamento do ouvido médio, incluindo tÃmpano e cadeia ossicular."},{type:"list",ordered:!1,items:[{label:"Timpanometria",text:"mede a mobilidade do tÃmpano."},{label:"Reflexos acústicos",text:"avaliam a resposta dos músculos do ouvido a estÃmulos sonoros."}]},{type:"heading",level:2,text:"5. Emissões Otoacústicas (EOA)"},{type:"paragraph",text:"Avaliam o funcionamento das células ciliadas da cóclea por meio das respostas sonoras do ouvido interno a estÃmulos leves. O conteúdo cita uso em triagem auditiva de recém-nascidos e investigação de perdas auditivas."},{type:"heading",level:2,text:"6. BERA"},{type:"paragraph",text:"Os Potenciais Evocados Auditivos do Tronco Encefálico registram respostas elétricas do sistema auditivo por meio de eletrodos na pele. O conteúdo destaca seu uso na investigação do nervo auditivo e em pessoas que não conseguem responder aos exames tradicionais."},{type:"heading",level:2,text:"7. Processamento Auditivo Central (PAC)"},{type:"paragraph",text:"Avalia como o cérebro processa informações sonoras, incluindo habilidades como localização sonora, compreensão em ruÃdo e memória auditiva."},{type:"heading",level:2,text:"Quando esses exames podem ser indicados?"},{type:"list",ordered:!1,items:[{text:"Suspeita de perda auditiva."},{text:"Dificuldade para entender conversas."},{text:"Zumbido persistente."},{text:"Infecções de ouvido frequentes."},{text:"Monitoramento auditivo em recém-nascidos, crianças e idosos."}]}],cta:{title:"Qual exame é adequado para você?",text:"A indicação depende da avaliação profissional. Fale com a Amplivox para receber orientação sobre os exames disponÃveis."}},{schema:"amplivox.content.current-editorial.v1",slug:"audiometria-tonal-entenda-o-exame-e-sua-importancia",publicPath:"/audiometria-tonal-entenda-o-exame-e-sua-importancia/",category:"Exames",title:"Audiometria Tonal: entenda o exame e sua importância",excerpt:"Saiba como a audiometria tonal mede a percepção de frequências e intensidades e registra os resultados no audiograma.",seo:{title:"Audiometria Tonal: Entenda o Exame | Amplivox",description:"Entenda o que é audiometria tonal, para que serve, como o exame é realizado e o que o audiograma revela."},hero:{eyebrow:"Exames relacionados",title:"Audiometria Tonal",intro:"Um dos exames mais utilizados para medir a capacidade de ouvir sons em diferentes frequências e intensidades."},blocks:[{type:"lead",text:"A audiometria tonal mede a capacidade de ouvir sons em diferentes frequências e volumes, ajudando a identificar alterações auditivas e seu grau."},{type:"heading",level:2,text:"O que é a Audiometria Tonal?"},{type:"paragraph",text:"à um teste que verifica como o ouvido percebe sons de diferentes tons, ou frequências, e volumes, ou intensidades. O resultado é registrado em um gráfico chamado audiograma, que mostra a audição em cada ouvido."},{type:"heading",level:2,text:"Para que serve a Audiometria Tonal?"},{type:"list",ordered:!0,items:[{label:"Detectar perda auditiva",text:"avalia intensidade e tipo de perda auditiva, incluindo condutiva, neurossensorial ou mista."},{label:"Monitorar a saúde auditiva",text:"especialmente em pessoas expostas a ruÃdos constantes ou que utilizam medicamentos ototóxicos."},{label:"Avaliar a necessidade de aparelhos auditivos",text:"ajuda a verificar se um dispositivo pode ser indicado."},{label:"Investigar doenças do ouvido",text:"o conteúdo cita condições como otite média e alterações n
1a cóclea."}]},{type:"heading",level:2,text:"Como é feito o exame?"},{type:"list",ordered:!0,items:[{label:"Fones de ouvido",text:"são apresentados sons de diferentes frequências e volumes."},{label:"Resposta do paciente",text:"a pessoa sinaliza sempre que percebe um som."},{label:"Registro do audiograma",text:"as respostas são registradas no gráfico para indicar o menor volume percebido em cada frequência."}]},{type:"heading",level:2,text:"O que o audiograma revela?"},{type:"list",ordered:!1,items:[{label:"Frequências em Hertz (Hz)",text:"sons graves, médios e agudos."},{label:"Intensidade em decibéis (dB)",text:"o volume necessário para perceber o som."},{label:"Curvas auditivas",text:"demonstram o nÃvel de audição em cada ouvido."}]},{type:"paragraph",text:"Essas informações ajudam o profissional a caracterizar o tipo e o grau de perda auditiva e a orientar os próximos passos."},{type:"heading",level:2,text:"Quem deve fazer a Audiometria Tonal?"},{type:"list",ordered:!1,items:[{text:"Pessoas com dificuldade para ouvir ou entender conversas."},{text:"Trabalhadores expostos a ruÃdos."},{text:"Idosos em acompanhamento da audição."},{text:"Pessoas com zumbido."},{text:"Crianças com atraso na fala ou dificuldades de aprendizado, quando houver indicação profissional."}]},{type:"heading",level:2,text:"BenefÃcios do exame"},{type:"list",ordered:!1,items:[{text:"Diagnóstico precoce de alterações."},{text:"Prevenção de complicações por meio da investigação e acompanhamento."},{text:"Orientação para melhorar comunicação e qualidade de vida."}]}],cta:{title:"Saiba mais sobre a Audiometria Tonal",text:"Entre em contato com a Amplivox para informações sobre avaliação auditiva e exames."}},{schema:"amplivox.content.current-editorial.v1",slug:"audiometria-vocal-entenda-o-exame-e-sua-importancia-para-a-comunicacao",publicPath:"/audiometria-vocal-entenda-o-exame-e-sua-importancia-para-a-comunicacao/",category:"Exames",title:"Audiometria Vocal e a comunicação",excerpt:"Entenda como a avaliação vocal ajuda a observar reconhecimento e compreensão da fala.",seo:{title:"Audiometria Vocal: Entenda o Exame | Amplivox",description:"Entenda como a audiometria vocal avalia reconhecimento e compreensão da fala e como o exame é realizado."},hero:{eyebrow:"Exames relacionados",title:"Audiometria Vocal",intro:"Exame voltado à capacidade de reconhecer, repetir e compreender palavras faladas."},blocks:[{type:"lead",text:"A audiometria vocal avalia a capacidade de entender a fala. Mais do que perceber sons, ela observa como as palavras são reconhecidas e interpretadas em diferentes volumes."},{type:"heading",level:2,text:"O que é a Audiometria Vocal?"},{type:"paragraph",text:"à um teste que mede a habilidade de reconhecer, repetir e interpretar palavras faladas. Enquanto a audiometria tonal avalia sons em diferentes frequências, a vocal concentra-se na compreensão da fala."},{type:"heading",level:2,text:"Para que serve?"},{type:"list",ordered:!0,items:[{label:"Identificar dificuldades de comunicação",text:"avalia como sons e palavras são interpretados."},{label:"Diagnosticar perdas auditivas",text:"ajuda na investigação de casos em que a percepção dos sons e a compreensão podem apresentar comportamentos diferentes."},{label:"Avaliar o benefÃcio de aparelhos auditivos",text:"permite comparar a compreensão da fala em diferentes etapas do acompanhamento."},{label:"Acompanhar doenças auditivas",text:"o conteúdo cita perdas neurossensoriais e condições que afetam o nervo auditivo."}]},{type:"heading",level:2,text:"Como é feito o exame?"},{type:"list",ordered:!0,items:[{label:"Fones de ouvido",text:"o paciente escuta palavras gravadas ou faladas pelo profissional."},{label:"Repetição das palavras",text:"as palavras são apresentadas em diferentes volumes e condições."},{label:"Registro do desempenho",text:"o profissional registra quantas palavras foram reconhecidas corretamente."}]},{type:"heading",level:2,text:"O que o exame avalia?"},{type:"card-grid",cards:[{title:"IRF",text:"Ãndice de Reconhecimento de Fala: percentual de palavras entendidas corretamente."},{title:"LRF",text:"Limiar de Reconhecimento de Fala: volume mÃnimo necessário para reconhecer e compreender palavras."},{title:"Compreensão",text:"O resultado complementa outros exames ao mostrar como a audição se relaciona com a comunicação."}]},{type:"heading",level:2,text:"Quem deve fazer a Audiometria Vocal?"},{type:"list",ordered:!1,items:[{text:"Pessoas com dificuldade para entender conversas, inclusive em ambientes silenciosos."},{text:"Pacientes com perda auditiva."},{text:"Usuários de aparelhos auditivos em acompanhamento."},{text:"Crianças com atraso na fala ou dificuldades escolares, quando houver indicação."}]},{type:"heading",level:2,text:"Audiometria Tonal e Vocal"},{type:"list",ordered:!1,items:[{label:"Tonal",text:"mede a capacidade de perceber sons em diferentes frequências e intensidades."},{label:"Vocal",text:"avalia reconhecimento e compreensão de palavras."}]},{type:"paragraph",text:"O conteúdo original apresenta os dois exames como complementares na avaliação da saúde auditiva."},{type:"heading",level:2,text:"BenefÃcios da Audiometria Vocal"},{type:"list",ordered:!1,items:[{text:"Investigação mais detalhada da compreensão da fala."},{text:"Orientação do acompanhamento e de ajustes de aparelhos auditivos."},{text:"Identificação de dificuldades que podem afetar comunicação e interação social."}]}],cta:{title:"Dificuldade para entender conversas?",text:"Fale com a Amplivox para saber mais sobre a Audiometria Vocal e a avaliação da sua audição."}},{schema:"amplivox.content.current-editorial.v1",slug:"logoaudiometria-o-que-e-e-por-que-e-importante",publicPath:"/logoaudiometria-o-que-e-e-por-que-e-importante/",category:"Exames",title:"Logoaudiometria: o que é e por que é importante?",excerpt:"Conheça a avaliação da capacidade de reconhecer e compreender palavras em diferentes condições sonoras.",seo:{title:"Logoaudiometria: O Que à e Por Que à Importante? | Amplivox",description:"Entenda o que é logoaudiometria, para que serve, como o exame avalia a compreensão da fala e para quem é indicada."},hero:{eyebrow:"Exames relacionados",title:"Logoaudiometria",intro:"Exame voltado à capacidade de reconhecer, interpretar e compreender a fala em diferentes condições."},blocks:[{type:"lead",text:"A logoaudiometria avalia como a pessoa processa e compreende a fala. O foco está na interpretação de palavras e na audição funcional para a comunicação."},{type:"heading",level:2,text:"O que é Logoaudiometria?"},{type:"paragraph",text:"à um exame auditivo que analisa a capacidade de reconhecer, interpretar e processar sons da fala. O conteúdo atual da Amplivox a apresenta como relacionada à audiometria vocal, com avaliação mais aprofundada da qualidade da compreensão."},{type:"heading",level:2,text:"Para que serve a Logoaudiometria?"},{type:"list",ordered:!0,items:[{label:"Avaliar a compreensão da fala",text:"observa como palavras e frases são interpretadas em diferentes condições."},{label:"Investigar dificuldades auditivas",text:"incluindo dificuldade para entender conversas em ambientes com ruÃdo."},{label:"Monitorar o uso de aparelhos auditivos",text:"ajuda a observar o impacto do dispositivo na compreensão da fala."},{label:"Acompanhar tratamentos auditivos",text:"pode ser utilizada para acompanhar evolução em processos de reabilitação."}]},{type:"heading",level:2,text:"Como funciona o exame?"},{type:"list",ordered:!0,items:[{label:"Apresentação de palavras ou frases",text:"o paciente escuta estÃmulos gravados ou apresentados pelo profissional."},{label:"Resposta do paciente",text:"repete o que ouviu ou demonstra a compreensão das palavras."},{label:"Registro dos resultados",text:"o profissional avalia a precisão das respostas e o desempenho."}]},{type:"paragraph",text:"O teste pode utilizar diferentes volumes e condições, inclusive presença de ruÃdo, para observar a compreensão em situações variadas."},{type:"heading",level:2,text:"Logoaudiometria e Audiometria Vocal"},{type:"list",ordered:!1,items:[{label:"Audiometria Vocal",text:"avalia o re
1conhecimento de palavras em diferentes volumes."},{label:"Logoaudiometria",text:"aprofunda a avaliação de como a fala é interpretada em diferentes condições."}]},{type:"heading",level:2,text:"Para quem é indicada?"},{type:"list",ordered:!1,items:[{text:"Pessoas com dificuldade de entender fala, especialmente com ruÃdo de fundo."},{text:"Pacientes com perda auditiva."},{text:"Usuários de aparelhos auditivos."},{text:"Crianças com dificuldades de fala ou aprendizado, quando houver indicação profissional."}]},{type:"heading",level:2,text:"BenefÃcios da Logoaudiometria"},{type:"list",ordered:!1,items:[{text:"Investigação detalhada de dificuldades de compreensão."},{text:"Informações para orientar acompanhamento e comunicação."},{text:"Apoio ao ajuste e avaliação de aparelhos auditivos."},{text:"Identificação de barreiras que podem afetar a interação social."}]}],cta:{title:"Entenda melhor sua compreensão da fala",text:"Entre em contato com a Amplivox para informações sobre logoaudiometria e avaliação auditiva."}},{schema:"amplivox.content.current-editorial.v1",slug:"diagnostico-de-perda-auditiva-tudo-o-que-voce-precisa-saber",publicPath:"/diagnostico-de-perda-auditiva-tudo-o-que-voce-precisa-saber/",category:"Saúde auditiva",title:"Diagnóstico de Perda Auditiva: tudo o que você precisa saber",excerpt:"Conheça sinais de perda auditiva, graus de alteração e exames usados na investigação da audição.",seo:{title:"Diagnóstico de Perda Auditiva | Amplivox",description:"Entenda sinais, tipos de perda auditiva e exames usados na avaliação da audição."},hero:{eyebrow:"Audiometria · Aplicações e cuidados",title:"Diagnóstico de Perda Auditiva",intro:"Principais sinais, formas de avaliação e a importância de investigar alterações na audição."},blocks:[{type:"paragraph",text:"A perda auditiva pode atingir um ou ambos os ouvidos e variar de leve a profunda. Também pode ter origem condutiva, neurossensorial ou mista."},{type:"heading",level:2,text:"Sinais que merecem atenção"},{type:"list",ordered:!1,items:[{text:"Dificuldade para compreender conversas, principalmente com ruÃdo ao redor."},{text:"Necessidade frequente de aumentar o volume da televisão ou do rádio."},{text:"Pedidos constantes para que outras pessoas repitam o que disseram."},{text:"Zumbido e redução da percepção de sons cotidianos."}]},{type:"heading",level:2,text:"Como a audição é investigada?"},{type:"paragraph",text:"A avaliação profissional pode combinar exames diferentes. A audiometria tonal mede a percepção de frequências, a vocal verifica a compreensão da fala, a imitanciometria auxilia na avaliação do ouvido médio e exames como o BERA analisam respostas do sistema auditivo."},{type:"heading",level:2,text:"Por que identificar cedo?"},{type:"paragraph",text:"Reconhecer uma alteração auditiva permite definir a conduta adequada e reduzir impactos na comunicação e na rotina. Dependendo do caso, as soluções podem envolver aparelhos auditivos, reabilitação auditiva ou avaliação médica especÃfica."}],cta:{title:"Percebeu alguma mudança na sua audição?",text:"Fale com a Amplivox para receber orientação sobre avaliação auditiva e exames disponÃveis."}},{schema:"amplivox.content.current-editorial.v1",slug:"audiometria-para-criancas-como-funciona-e-qual-a-importancia-do-exame",publicPath:"/audiometria-para-criancas-como-funciona-e-qual-a-importancia-do-exame/",category:"Audição infantil",title:"Audiometria para Crianças: como funciona e qual a importância do exame",excerpt:"Veja como a avaliação auditiva pode ser adaptada à infância e por que a identificação precoce é importante.",seo:{title:"Audiometria para Crianças | Amplivox",description:"Entenda como funciona a audiometria infantil, quando ela é indicada e quais sinais auditivos merecem atenção."},hero:{eyebrow:"Audiometria · Aplicações e cuidados",title:"Audiometria para Crianças",intro:"Como funciona a avaliação auditiva infantil e por que a detecção precoce é importante para comunicação e desenvolvimento."},blocks:[{type:"paragraph",text:"A audiometria infantil avalia a capacidade auditiva da criança com métodos adaptados à idade e à forma como ela consegue responder aos estÃmulos."},{type:"heading",level:2,text:"Avaliação em diferentes fases"},{type:"list",ordered:!1,items:[{text:"Recém-nascidos podem passar pela triagem auditiva neonatal."},{text:"Bebês e crianças pequenas podem ser avaliados com reforço visual."},{text:"A partir da primeira infância, atividades lúdicas ajudam a obter respostas aos sons."},{text:"A audiometria vocal verifica o reconhecimento e a repetição de palavras."}]},{type:"heading",level:2,text:"Sinais que justificam uma avaliação"},{type:"paragraph",text:"Dificuldade para reagir a sons familiares, atraso de fala, problemas para seguir comandos, volume muito alto em aparelhos eletrônicos ou dificuldades escolares podem indicar a necessidade de investigar a audição."},{type:"heading",level:2,text:"Por que avaliar cedo?"}
1,{type:"paragraph",text:"Alterações auditivas podem interferir na linguagem e na comunicação. Quando identificadas precocemente, permitem definir acompanhamento e soluções adequadas ao caso."}],cta:{title:"Quer avaliar a audição de uma criança?",text:"Entre em contato com a Amplivox para confirmar os exames e o atendimento adequado à faixa etária."}},{schema:"amplivox.content.current-editorial.v1",slug:"quando-fazer-o-exame-de-audiometria-saiba-a-importancia-e-os-momentos-certos",publicPath:"/quando-fazer-o-exame-de-audiometria-saiba-a-importancia-e-os-momentos-certos/",category:"Saúde auditiva",title:"Quando fazer o exame de audiometria?",excerpt:"Confira situações em que a avaliação auditiva pode ser indicada, incluindo sintomas, exposição a ruÃdo e acompanhamento periódico.",seo:{title:"Quando Fazer o Exame de Audiometria? | Amplivox",description:"Veja em quais momentos a audiometria é indicada, da infância ao acompanhamento de adultos e usuários de aparelhos auditivos."},hero:{eyebrow:"Audiometria · Aplicações e cuidados",title:"Quando Fazer o Exame de Audiometria?",intro:"A audiometria pode ser indicada de forma preventiva, diante de sintomas ou no acompanhamento periódico da audição."},blocks:[{type:"paragraph",text:"A audiometria mede a capacidade de perceber sons em diferentes frequências e intensidades e pode ajudar a identificar alterações auditivas em fases iniciais."},{type:"heading",level:2,text:"Momentos em que o exame pode ser indicado"},{type:"list",ordered:!0,items:[{text:"Na triagem e no acompanhamento auditivo de bebês e crianças."},{text:"Quando surgem dificuldades escolares, atraso de fala ou dúvidas sobre a audição infantil."},{text:"Como parte do acompanhamento auditivo de adultos e idosos."},{text:"Em trabalhadores expostos continuamente a nÃveis elevados de ruÃdo."},{text:"Quando há sinais como dificuldade para ouvir, necessidade de repetir frases ou zumbido."},{text:"Após quadros recorrentes de infecção de ouvido, conforme orientação profissional."},{text:"Periodicamente para quem já utiliza aparelhos auditivos e precisa acompanhar possÃveis mudanças na audição."}]},{type:"highlight",text:"Em caso de dúvida sobre a necessidade ou a periodicidade do exame, a indicação deve considerar a idade, os sintomas, o histórico e a avaliação profissional."}],cta:{title:"Está na hora de conferir sua audição?",text:"Fale com a Amplivox para receber orientação sobre audiometria e agendamento de avaliação auditiva."}},{schema:"amplivox.content.current-editorial.v1",slug:"cuidados-com-a-saude-auditiva-dicas-para-proteger-sua-audicao",publicPath:"/cuidados-com-a-saude-auditiva-dicas-para-proteger-sua-audicao/",category:"Saúde auditiva",title:"Cuidados com a Saúde Auditiva",excerpt:"Hábitos de prevenção, proteção contra ruÃdo e sinais que justificam buscar avaliação profissional.",seo:{title:"Cuidados com a Saúde Auditiva | Amplivox",description:"Veja hábitos de escuta segura, sinais de atenção e cuidados simples que ajudam a proteger a audição no dia a dia."},hero:{eyebrow:"Audiometria · Aplicações e cuidados",title:"Cuidados com a Saúde Auditiva",intro:"Hábitos de escuta segura e atenção aos sinais da audição ajudam a reduzir riscos evitáveis e favorecem o cuidado ao longo da vida."},blocks:[{type:"lead",text:"Cuidar da audição envolve reduzir exposições desnecessárias a sons intensos, observar mudanças na forma de ouvir e procurar avaliação profissional quando surgirem sinais persistentes."},{type:"heading",level:2,text:"Controle o volume e o tempo de exposição"},{type:"paragraph",text:"Sons muito intensos podem causar zumbido, sensação de audição abafada e, com exposições repetidas ou prolongadas, perda auditiva induzida por ruÃdo. Em fones e dispositivos pessoais, uma referência prática de escuta segura é manter o volume abaixo de 60% do máximo e fazer pausas regulares."},{type:"heading",level:2,text:"Proteja-se em ambientes barulhentos"},{type:"list",ordered:!1,items:[{text:"Afaste-se de caixas de som, máquinas e outras fontes intensas sempre que possÃvel."},{text:"Use protetores auditivos adequados quando houver exposição ocupacional ou recreativa importante."}
1,{text:"Faça intervalos em locais mais silenciosos para reduzir a dose total de ruÃdo."}]},{type:"heading",level:2,text:"Não introduza objetos no canal auditivo"},{type:"paragraph",text:"Hastes flexÃveis, objetos, óleos e outras substâncias podem empurrar a cera para dentro ou machucar o canal e o tÃmpano. Dor, secreção, sensação persistente de ouvido tampado ou dificuldade para ouvir merecem avaliação profissional."},{type:"heading",level:2,text:"Observe os sinais de alerta"},{type:"list",ordered:!1,items:[{text:"Zumbido persistente."},{text:"Dificuldade para compreender conversas, sobretudo em ambientes ruidosos."},{text:"Dificuldade para perceber sons mais agudos."},{text:"Necessidade frequente de aumentar o volume de televisão, celular ou outros aparelhos."}]},{type:"heading",level:2,text:"Faça avaliação quando houver mudança na audição"},{type:"paragraph",text:"A identificação precoce de alterações auditivas permite investigar a causa e definir a conduta adequada. Exames de audiometria e outras avaliações podem ser indicados conforme sintomas, idade, histórico e exposição a ruÃdo."},{type:"highlight",text:"Uma redução súbita da audição, especialmente em um único ouvido, precisa de avaliação médica rápida. Não espere a audição âvoltar sozinhaâ para procurar atendimento."},{type:"heading",level:2,text:"Fontes de referência"},{type:"paragraph",text:"Conteúdo editorial reconstruÃdo com base nas orientações públicas da Organização Mundial da Saúde sobre escuta segura, prevenção de perda auditiva e cuidados com os ouvidos."},{type:"links",links:[{label:"OMS · Safe listening",href:"https://www.who.int/news-room/questions-and-answers/item/deafness-and-hearing-loss-safe-listening"},{label:"OMS · Ear care",href:"https://www.who.int/news-room/questions-and-answers/item/deafness-and-hearing-loss-ear-care"}]}],cta:{title:"Quer saber como está sua audição?",text:"Fale com a Amplivox para receber orientação sobre avaliação auditiva e exames disponÃveis."}},{schema:"amplivox.content.current-editorial.v1",slug:"como-saber-se-voce-precisa-de-um-aparelho-auditivo",publicPath:"/como-saber-se-voce-precisa-de-um-aparelho-auditivo/",category:"Saúde auditiva",title:"Como saber se você precisa de um aparelho auditivo?",excerpt:"Conheça sinais que podem indicar a necessidade de investigar a audição e quando procurar avaliação profissional.",seo:{title:"Como saber se você precisa de um aparelho auditivo? | Amplivox",description:"Conheça sinais que podem indicar perda auditiva e entenda por que a indicação de aparelho auditivo depende de avaliação profissional."},hero:{eyebrow:"Saúde auditiva",title:"Como saber se você precisa de um aparelho auditivo?",intro:"A perda auditiva muitas vezes aparece de forma gradual. Alguns sinais do dia a dia ajudam a perceber quando é hora de investigar melhor a audição."},blocks:[{type:"lead",text:"Nem sempre a perda auditiva aparece de repente. Muitas vezes, ela é sutil e gradual, e familiares ou pessoas próximas percebem as mudanças antes de quem está ouvindo menos."},{type:"heading",level:2,text:"Sinais que merecem atenção"},{type:"list",ordered:!1,items:[{text:"Pedir com frequência para as pessoas repetirem o que disseram."},{text:"Ter dificuldade para acompanhar conversas em locais com barulho."},{text:"Aumentar o volume da televisão, do celular ou de outros aparelhos."},{text:"Ouvir que alguém está falando, mas ter dificuldade para entender as palavras."},{text:"Perceber zumbido persistente ou mudanças na percepção de sons agudos."}]},{type:"heading",level:2,text:"Esses sinais significam que você precisa usar aparelho?"},{type:"paragraph",text:"Não necessariamente. Sintomas auditivos podem ter causas diferentes e a indicação de um aparelho auditivo não deve ser feita apenas pela percepção pessoal. O primeiro passo é uma avaliação auditiva adequada, que pode incluir audiometria tonal, audiometria vocal e outros exames conforme o caso."},{type:"heading",level:2,text:"O que a avaliação considera?"},{type:"paragraph",text:"Além do resultado dos exames, o profissional considera como a dificuldade auditiva interfere na comunicação, no trabalho, na convivência social e na autonomia. Pessoas com resultados parecidos podem ter necessidades de reabilitação diferentes."},{type:"heading",level:2,text:"Quando o aparelho auditivo pode fazer parte da solução?"},{type:"paragraph",text:"Quando existe uma perda auditiva permanente que compromete a comunicação e há indicação profissional, aparelhos auditivos podem fazer parte da reabilitação. A escolha do modelo e os ajustes devem considerar o perfil auditivo, a rotina e as necessidades individuais."},{type:"highlight",text:"Perda auditiva súbita, principalmente em apenas um ouvido, exige avaliação médica rápida. Mudanças bruscas não devem ser tratadas apenas como uma questão de adaptação de aparelho auditivo."},{type:"heading",level:2,text:"Fontes de referência"},{type:"paragraph",text:"O trecho inicial preserva a mensagem observada na homepage atual da Amplivox. O restante foi reconstruÃdo editorialmente com apoio de orientações públicas da Organização Mundial da Saúde sobre sinais de perda auditiva e avaliação."},{type:"links",links:[{label:"OMS · Safe listening",href:"https://www.who.int/news-room/questions-and-answers/item/deafness-and-hearing-loss-safe-listening"},{label:"OMS · Deafness and hearing loss",href:"https://www.who.int/news-room/fact-sheets/detail/deafness-and-hearing-loss"}]}],cta:{title:"Percebeu algum desses sinais?",text:"Fale com a Amplivox para receber orientação sobre avaliação auditiva e entender os próximos passos."}},{schema:"amplivox.content.current-editorial.v1",slug:"feliz-dia-das-criancas-a-importancia-da-audicao-infantil",publicPath:"/feliz-dia-das-criancas-a-importancia-da-audicao-infantil/",category:"Audição infantil",title:"Feliz Dia das Crianças: a importância da audição infantil",excerpt:"Conteúdo sobre desenvolvimento, comunicação e a importância de observar a audição durante a infância.",seo:{title:"A importância da audição infantil | Amplivox",description:"Entenda a importância da audição para o desenvolvimento infantil e por que alterações auditivas devem ser identificadas o quanto antes."},hero:{eyebrow:"Audição infantil",title:"Feliz Dia das Crianças: a importância da audição infantil",intro:"Ouvir bem participa do desenvolvimento da comunicação, da aprendizagem e da interação social desde os primeiros anos de vida."},blocks:[{type:"lead",text:"Desde os primeiros meses de vida, ouvir bem é essencial para o desenvolvimento da criança. à por meio da audição que ela começa a reconhecer sons, vozes e padrões de comunicação presentes ao seu redor."},{type:"heading",level:2,text:"Por que a audição é tão importante na infância?"},{type:"paragraph",text:"Alterações auditivas podem afetar o desenvolvimento da fala e da linguagem, a comunicação e habilidades sociais. Quanto mais cedo uma dificuldade permanente é identificada e acompanhada, maiores são as oportunidades de oferecer suporte adequado ao desenvolvimento da criança."},{type:"heading",level:2,text:"Sinais que podem merecer investigação"},{type:"list",ordered:!1,items:[{text:"Pouca reação a sons ou ao chamado pelo nome."},{text:"Atrasos ou mudanças no desenvolvimento da fala e da linguagem."},{text:"Necessidade frequente de aumentar o volume de televisão e dispositivos."},{text:"Dificuldade para acompanhar orientações, conversas ou atividades em ambientes com ruÃdo."},{text:"Queixas escolares relacionadas à atenção ou compreensão que possam ter componente auditivo."}]},{type:"heading",level:2,text:"A avaliação muda conforme a idade"},{type:"paragraph",text:"A investigação auditiva infantil pode usar métodos diferentes conforme a faixa etária e a capacidade de resposta da criança. Em alguns casos são empregados exames objetivos; em outros, avaliações comportamentais e audiometria adaptada à infância."},{type:"heading",level:2,text:"Identificação precoce faz diferença"},{type:"paragraph",text:"Programas de detecção precoce buscam reconhecer perdas auditivas ainda nos primeiros meses de vida. Quando existe alteração confirmada, o acompanhamento pode envolver profissionais de saúde auditiva, avaliação médica e intervenções adequadas à s necessidades da criança e da famÃlia."},{type:"highlight",text:"Se pais, responsáveis ou professores percebem mudanças persistentes na resposta aos sons, fala ou compreensão, vale procurar avaliação profissional em vez de esperar que a dificuldade desapareça sozinha."},{type:"heading",level:2,text:"Fontes de referência"},{type:"paragraph",text:"O trecho inicial preserva a mensagem observada na homepage atual da Amplivox. O restante foi reconstruÃdo editorialmente com apoio de orientações públicas do CDC sobre identificação e intervenção precoces em perda auditiva infantil."},{type:"links",links:[{label:"CDC · Hearing Loss in Children",href:"https://www.cdc.gov/hearing-loss-children/hcp/clinical-guidance/index.html"},{label:"CDC · Early Hearing Detection and Intervention",href:"https://www.cdc.gov/hearing-loss-children/articles/infants-suspected-hearing-loss.html"}]}],cta:{title:"Tem dúvidas sobre a audição de uma criança?",text:"Fale com a Amplivox para receber orientação sobre avaliação auditiva infantil e os atendimentos disponÃveis."}}];function ga(a){return va.find(i=>i.publicPath===a)}
1function fa(a){return a.split("/").filter(Boolean).at(-1)??""}const ba=fe.map(a=>{const i=ga(a.href);return{sourceKey:`editorial-current:${a.href}`,sourceKind:"editorial-current",sourcePath:i?"src/data/current-editorial-shadow-documents.ts":"src/data/editorial.ts + route module",materialization:i?"structured":"catalog-only",contentType:a.group==="news"?"news":"guide",slug:fa(a.href),publicPath:a.href,title:a.title,excerpt:a.summary,...i?{payload:{...i}}:{}}}),ja=ve.map(a=>({sourceKey:`legacy-editorial:${a.slug}`,sourceKind:"legacy-editorial",sourcePath:"src/data/legacy-editorial-posts.ts",materialization:"structured",contentType:"guide",slug:a.slug,publicPath:`/${a.slug}/`,title:a.title,excerpt:a.intro,payload:{schema:"amplivox.content.legacy-editorial.v1",title:a.title,excerpt:a.intro,category:a.category,paragraphs:a.paragraphs,relatedHref:a.relatedHref,relatedLabel:a.relatedLabel,migrationMode:a.migrationMode}})),ya=ge.map(a=>({sourceKey:`faq:${a.slug}`,sourceKind:"faq",sourcePath:"src/data/hearing-aid-faq-registry.ts",materialization:"structured",contentType:"faq",slug:a.slug,publicPath:`/duvida-frequente/${a.slug}/`,title:a.title,excerpt:a.intro,payload:{schema:"amplivox.content.faq.v1",title:a.title,excerpt:a.intro,intro:a.intro,steps:a.steps??[],notes:a.notes??[],warning:a.warning??null,sourceLabel:a.sourceLabel,sourceHref:a.sourceHref}})),q=[...ba,...ja,...ya],ee=q.filter(a=>a.materialization==="structured"),ae=q.filter(a=>a.materialization==="catalog-only");function Aa(a){return q.find(i=>i.sourceKey===a)}function U(a){return a&&typeof a=="object"&&!Array.isArray(a)?a:{}}function C(a){return typeof a=="string"?a.trim():""}function Na(a){if(!a)return!1;if(a.startsWith("/")&&!a.startsWith("//"))return!0;if(!a.startsWith("https://"))return!1;try{const i=new URL(a);return i.protocol==="https:"&&!!i.hostname}catch{return!1}}function Ca(a){const i=U(a),s=[],t=(u,y,m)=>{C(y)||s.push({path:u,severity:"error",message:m})};t("title",i.title,"TÃtulo editorial é obrigatório."),t("excerpt",i.excerpt,"Resumo editorial é obrigatório.");const o=U(i.seo);t("seo.title",o.title,"TÃtulo SEO é obrigatório."),t("seo.description",o.description,"Descrição SEO é obrigatória.");const r=U(i.hero);t("hero.title",r.title,"TÃtulo do HERO é obrigatório."),t("hero.intro",r.intro,"Introdução do HERO é obrigatória.");const n=U(i.cta);t("cta.title",n.title,"TÃtulo do CTA é obrigatório."),t("cta.text",n.text,"Texto do CTA é obrigatório.");const l=be(i.blocks);l?l.length?l.forEach((u,y)=>{const m=`blocks[${y}]`;if(u.type==="lead"||u.type==="paragraph"||u.type==="highlight"){C(u.text)||s.push({path:`${m}.text`,severity:"error",message:`${u.type} não pode ficar vazio.`});return}if(u.type==="heading"){C(u.text)||s.push({path:`${m}.text`,severity:"error",message:"Heading não pode ficar vazio."});return}if(u.type==="list"){if(!u.items.length){s.push({path:`${m}.items`,severity:"error",message:"Lista precisa ter pelo menos um item."});return}u.items.forEach((d,f)=>{C(d.text)||s.push({path:`${m}.items[${f}].text`,severity:"error",message:"Item de lista não pode ficar vazio."}),Object.prototype.hasOwnProperty.call(d,"label")&&!C(d.label)&&s.push({path:`${m}.items[${f}].label`,severity:"error",message:"Rótulo habilitado não pode ficar vazio."})});return}if(u.type==="card-grid"){if(!u.cards.length){s.push({path:`${m}.cards`,severity:"error",message:"Grade de cards precisa ter pelo menos um card."});return}u.cards.forEach((d,f)=>{C(d.title)||s.push({path:`${m}.cards[${f}].title`,severity:"error",message:"TÃtulo do card é obrigatório."}),C(d.text)||s.push({path:`${m}.cards[${f}].text`,severity:"error",message:"Texto do card é obrigatório."})});return}if(!u.links.length){s.push({path:`${m}.links`,severity:"error",message:"Bloco de links precisa ter pelo menos um link."});return}u.links.forEach((d,f)=>{C(d.label)||s.push({path:`${m}.links[${f}].label`,severity:"error",message:"Label do link é obrigatório."}),Na(C(d.href))||s.push({path:`${m}.links[${f}].href`,severity:"error",message:"Link deve usar HTTPS ou caminho interno absoluto."})})}):s.push({path:"blocks",severity:"error",message:"O conteúdo precisa ter pelo menos um bloco."}):s.push({path:"blocks",severity:"error",message:"Estrutura de blocos inválida."});const x=C(o.title),p=C(o.description);x.length>65&&s.push({path:"seo.title",severity:"warning",message:"TÃtulo SEO ultrapassa 65 caracteres; revisar truncamento nos resultados de busca."}),p.length>170&&s.push({path:"seo.description",severity:"warning",message:"Descrição SEO ultrapassa 170 caracteres; revisar truncamento nos resultados de busca."});const v=s.filter(u=>u.severity==="error").length,j=s.filter(u=>u.severity==="warning").length;return{valid:v===0,errors:v,warnings:j,issues:s}}
1const we="amplivox.content.draft-candidate.v1",wa="fnv1a64-canonical-json-v1";function Sa(a){return!!a&&typeof a=="object"&&!Array.isArray(a)}function ie(a,i="$"){if(a===null||typeof a=="string"||typeof a=="boolean")return a;if(typeof a=="number"){if(!Number.isFinite(a))throw new TypeError(`AMPLIVOX_CONTENT_CANDIDATE_NON_FINITE_NUMBER:${i}`);return a}if(Array.isArray(a))return a.map((s,t)=>ie(s,`${i}[${t}]`));if(Sa(a)){const s={};for(const t of Object.keys(a).sort()){const o=a[t];if(o===void 0)throw new TypeError(`AMPLIVOX_CONTENT_CANDIDATE_UNDEFINED:${i}.${t}`);s[t]=ie(o,`${i}.${t}`)}return s}throw new TypeError(`AMPLIVOX_CONTENT_CANDIDATE_NON_JSON_VALUE:${i}`)}function Ea(a){return JSON.stringify(ie(a))}function qa(a){let i=0xcbf29ce484222325n;const s=0x100000001b3n,t=new TextEncoder().encode(a);for(const o of t)i^=BigInt(o),i=BigInt.asUintN(64,i*s);return i.toString(16).padStart(16,"0")}function ce(a,i){const s={schema:we,sourceKey:a.sourceKey,sourceKind:a.sourceKind,contentType:a.contentType,slug:a.slug,publicPath:a.publicPath,payload:i},t=Ea(s);return{canonical:t,fingerprint:`fnv1a64:${qa(t)}`,bytes:new TextEncoder().encode(t).byteLength}}function Pa(a,i,s){if(a.sourceKind!=="editorial-current"||!i.revisionId.trim()||!Number.isInteger(i.revisionNumber)||i.revisionNumber<1)return null;const t=Ca(s),o=ye(i.payload,s),r=ce(a,i.payload),n=ce(a,s),l=!o.identical;return{schema:we,sourceKey:a.sourceKey,sourceKind:a.sourceKind,contentType:a.contentType,slug:a.slug,publicPath:a.publicPath,baselineRevisionId:i.revisionId,baselineRevisionNumber:i.revisionNumber,fingerprintAlgorithm:wa,localBaselineFingerprint:r.fingerprint,localCandidateFingerprint:n.fingerprint,canonicalEnvelopeBytes:n.bytes,payload:s,validation:t,changes:{total:o.changes.length,added:o.added,removed:o.removed,changed:o.changed,paths:o.changes.map(x=>({path:x.path,kind:x.kind}))},hasChanges:l,readyForAdapter:t.valid&&l}}function Ta(a,i){if(a.sourceKind!=="editorial-current"||a.materialization!=="structured"||!a.payload)return null;const s=je(a);return s?Pa({sourceKey:a.sourceKey,sourceKind:a.sourceKind,contentType:a.contentType,slug:a.slug,publicPath:a.publicPath},{revisionId:s.revisionId,revisionNumber:s.revisionNumber,payload:s.payload},i):null}function P(a,i,s){return{code:a,scope:i,message:s}}function Oa(a,i){const s=[],t=Ue("conteudo");a?(a.validation.valid||s.push(P("candidate-invalid","candidate","O draft candidate possui erros editoriais locais.")),a.hasChanges||s.push(P("candidate-no-changes","candidate","O draft candidate não possui alterações em relação à baseline."))):s.push(P("candidate-missing","candidate","Nenhum draft candidate válido foi materializado.")),s.push(P("entry-missing","entry","Nenhum content entry real foi lido do shadow backend.")),t.deployment!=="verified"&&s.push(P("deployment-unverified","domain","O deployment do domÃnio Conteúdo ainda não foi verificado no backend real.")),t.editorMode!=="persistent"&&s.push(P("editor-preview","domain","O editor de Conteúdo permanece em modo preview.")),t.writeAdapter==="none"&&s.push(P("adapter-none","domain","Nenhum writeAdapter de Conteúdo está ativo."));const o=!!(a&&a.readyForAdapter&&a.validation.valid&&a.hasChanges),r=!!i;s.filter(p=>p.scope==="binding");const n=!!(a&&i),l=o&&r&&n,x=l&&Ae("conteudo");return{candidateReady:o,entryReady:r,baselineBound:n,canPrepareRequest:l,canDispatch:x,blockers:s}}function _(a){return a&&typeof a=="object"&&!Array.isArray(a)?a:{}}function E(a){return typeof a=="string"?a:""}function X(a){const i=_(a.seo),s=_(a.hero),t=_(a.cta);return{title:E(a.title),excerpt:E(a.excerpt),seoTitle:E(i.title),seoDescription:E(i.description),heroEyebrow:E(s.eyebrow),heroTitle:E(s.title),heroIntro:E(s.intro),ctaTitle:E(t.title),ctaText:E(t.text),ctaLabel:E(t.label)}}function ka(a,i,s){const t=_(a.seo),o=_(a.hero),r=_(a.cta),n=Object.fromEntries(Object.entries(r).filter(([x])=>x!=="label")),l=i.ctaLabel.trim();return{...a,title:i.title,excerpt:i.excerpt,seo:{...t,title:i.seoTitle,description:i.seoDescription},hero:{...o,eyebrow:i.heroEyebrow,title:i.heroTitle,intro:i.heroIntro},blocks:Fe(s),cta:{...n,title:i.ctaTitle,text:i.ctaText,...l?{label:i.ctaLabel}:{}}}}function L(a,i,s){return a?i:s}function Ra({item:a}
1){const i=a.payload?_(a.payload):null,s=i?be(i.blocks):null,t=s?Le(s,a.sourceKey):null,[o,r]=g.useState(()=>X(i||{})),[n,l]=g.useState(()=>t??[]),x=g.useMemo(()=>i&&t?ka(i,o,n):null,[n,o,t,i]),p=x?Ta(a,x):null;if(a.sourceKind!=="editorial-current"||!i||!t||!x||!p)return null;const v=p.validation,j=Oa(p,null);function u(d,f){r(M=>({...M,[d]:f}))}function y(){!i||!t||(r(X(i)),l(t))}const m=p.readyForAdapter?"Candidato apto para um futuro writeAdapter":p.hasChanges?"Candidato bloqueado pela validação local":"Baseline sem alterações locais";return e.jsxs("section",{className:"admin-content-sandbox","aria-labelledby":"admin-content-sandbox-title",children:[e.jsxs("div",{className:"admin-shadow-preview-heading",children:[e.jsxs("div",{children:[e.jsx("span",{children:"Sandbox editorial"}),e.jsx("h3",{id:"admin-content-sandbox-title",children:"Rascunho local sem persistência"})]}),e.jsx("small",{children:p.hasChanges?`${p.changes.total} alteração(ões)`:"sem alterações"})]}),e.jsxs("div",{className:"admin-content-sandbox-notice",children:[e.jsx(R,{size:16,"aria-hidden":"true"}),e.jsx("p",{children:"Esta sandbox altera somente uma cópia em memória. Blocos, itens, cards e links agora possuem identidade editorial local estável, permitindo adicionar, remover e reordenar sem usar posição de array como identidade. Nada é salvo ou publicado."})]}),e.jsxs("div",{className:"admin-content-sandbox-grid",children:[e.jsxs("label",{children:[e.jsx("span",{children:"TÃtulo editorial"}),e.jsx("input",{value:o.title,onChange:d=>u("title",d.target.value)})]}),e.jsxs("label",{children:[e.jsx("span",{children:"Resumo"}),e.jsx("textarea",{rows:3,value:o.excerpt,onChange:d=>u("excerpt",d.target.value)})]}),e.jsxs("fieldset",{children:[e.jsx("legend",{children:"SEO"}),e.jsxs("label",{children:[e.jsx("span",{children:"TÃtulo SEO"}),e.jsx("input",{value:o.seoTitle,onChange:d=>u("seoTitle",d.target.value)})]}),e.jsxs("label",{children:[e.jsx("span",{children:"Descrição SEO"}),e.jsx("textarea",{rows:3,value:o.seoDescription,onChange:d=>u("seoDescription",d.target.value)})]})]}),e.jsxs("fieldset",{children:[e.jsx("legend",{children:"HERO"}),e.jsxs("label",{children:[e.jsx("span",{children:"Eyebrow"}),e.jsx("input",{value:o.heroEyebrow,onChange:d=>u("heroEyebrow",d.target.value)})]}),e.jsxs("label",{children:[e.jsx("span",{children:"TÃtulo do HERO"}),e.jsx("input",{value:o.heroTitle,onChange:d=>u("heroTitle",d.target.value)})]}),e.jsxs("label",{children:[e.jsx("span",{children:"Introdução"}),e.jsx("textarea",{rows:3,value:o.heroIntro,onChange:d=>u("heroIntro",d.target.value)})]})]}),e.jsxs("fieldset",{children:[e.jsx("legend",{children:"CTA"}),e.jsxs("label",{children:[e.jsx("span",{children:"TÃtulo"}),e.jsx("input",{value:o.ctaTitle,onChange:d=>u("ctaTitle",d.target.value)})]}),e.jsxs("label",{children:[e.jsx("span",{children:"Texto"}),e.jsx("textarea",{rows:3,value:o.ctaText,onChange:d=>u("ctaText",d.target.value)})]}),e.jsxs("label",{children:[e.jsx("span",{children:"Label opcional"}),e.jsx("input",{value:o.ctaLabel,onChange:d=>u("ctaLabel",d.target.value)})]})]})]}),e.jsx(Be,{blocks:n,onChange:l}),e.jsxs("section",{className:`admin-content-sandbox-validation ${v.valid?"is-valid":"has-errors"}`,"aria-labelledby":"admin-content-sandbox-validation-title",children:[e.jsxs("div",{className:"admin-content-sandbox-validation-heading",children:[v.valid?e.jsx(Q,{size:18,"aria-hidden":"true"}):e.jsx(Ke,{size:18,"aria-hidden":"true"}),e.jsxs("div",{children:[e.jsx("strong",{id:"admin-content-sandbox-validation-title",children:v.valid?"Draft válido localmente":"Draft precisa de revisão"}),e.jsxs("span",{children:[v.errors," erro(s) · ",v.warnings," aviso(s)"]})]})]}),v.issues.length?e.jsx("ul",{children:v.issues.map((d,f)=>e.jsxs("li",{children:[e.jsx("code",{children:d.path}),e.jsx("span",{className:"admin-status-pill",children:d.severity}),e.jsx("p",{children:d.message})]},`${d.path}-${d.severity}-${f}`))}):e.jsx("p",{children:"Campos essenciais, blocos estruturados e links passaram pela validação local. Isso ainda não habilita persistência."})]}),e.jsxs("section",{className:`admin-content-sandbox-candidate ${p.readyForAdapter?"is-ready":"is-blocked"}`,"aria-labelledby":"admin-content-sandbox-candidate-title",children:[e.jsxs("div",{className:"admin-content-sandbox-candidate-heading",children:[e.jsx(R,{size:18,"aria-hidden":"true"}),e.jsxs("div",{children:[e.jsx("strong",{id:"admin-content-sandbox-candidate-title",children:"Draft candidate package"}),e.jsx("span",{children:m})]})]}),e.jsxs("dl",{children:[e.jsxs("div",{children:[e.jsx("dt",{children:"Schema"}),e.jsx("dd",{children:e.jsx("code",{children:p.schema})})]}),e.jsxs("div",{children:[e.jsx("dt",{children:"Baseline"}),e.jsx("dd",{children:e.jsx("code",{children:p.baselineRevisionId})})]}),e.jsxs("div",{children:[e.jsx("dt",{children:"Algoritmo local"}),e.jsx("dd",{children:e.jsx("code",{children:p.fingerprintAlgorithm})})]}),e.jsxs("div",{children:[e.jsx("dt",{children:"Fingerprint baseline"}),e.jsx("dd",{children:e.jsx("code",{children:p.localBaselineFingerprint})})]}),e.jsxs("div",{children:[e.jsx("dt",{children:"Fingerprint candidato"}),e.jsx("dd",{children:e.jsx("code",{children:p.localCandidateFingerprint})})]}),e.jsxs("div",{children:[e.jsx("dt",{children:"Envelope canônico"}),e.jsxs("dd",{children:[p.canonicalEnvelopeBytes," byte(s)"]})]})]}),p.changes.paths.length?e.jsxs("details",{children:[e.jsxs("summary",{children:["Ver paths alterados (",p.changes.paths.length,")"]}),e.jsx("ul",{children:p.changes.paths.map((d,f)=>e.jsxs("li",{children:[e.jsx("span",{children:d.kind}),e.jsx("code",{children:d.path})]},`${d.kind}-${d.path}-${f}`))})]}):null,e.jsxs("p",{children:["O fingerprint acima serve apenas para identidade e mudança do candidato local. Ele não substitui nem tenta reproduzir o ",e.jsx("code",{children:"source_fingerprint"})," calculado pelo PostgreSQL no baseline."]})]}),e.jsxs("section",{className:"admin-content-sandbox-readiness","aria-labelledby":"admin-content-sandbox-readiness-title",children:[e.jsxs("div",{className:"admin-content-sandbox-readiness-heading",children:[e.jsx(R,{size:18,"aria-hidden":"true"}),e.jsxs("div",{children:[e.jsx("strong",{id:"admin-content-sandbox-readiness-title",children:"Write readiness preflight"}),e.jsx("span",{children:j.canDispatch?"Dispatch habilitado":`${j.blockers.length} bloqueio(s) ativo(s)`})]})]}),e.jsxs("dl",{children:[e.jsxs("div",{children:[e.jsx("dt",{children:"Candidate"}),e.jsx("dd",{children:L(j.candidateReady,"pronto","pendente")})]}),e.jsxs("div",{children:[e.jsx("dt",{children:"Entry backend"}),e.jsx("dd",{children:L(j.entryReady,"pronto","não conectado")})]}),e.jsxs("div",{children:[e.jsx("dt",{children:"Baseline binding"}),e.jsx("dd",{children:L(j.baselineBound,"confirmado","não confirmado")})]}),e.jsxs("div",{children:[e.jsx("dt",{children:"Preparar request"}),e.jsx("dd",{children:L(j.canPrepareRequest,"permitido","bloqueado")})]}),e.jsxs("div",{children:[e.jsx("dt",{children:"Dispatch"}),e.jsx("dd",{children:L(j.canDispatch,"permitido","bloqueado")})]})]}),e.jsx("ul",{children:j.blockers.map(d=>e.jsxs("li",{children:[e.jsx("code",{children:d.code}),e.jsx("span",{children:d.scope}),e.jsx("p",{children:d.message})]},d.code))}),e.jsxs("p",{children:["A sandbox passa ",e.jsx("code",{children:"entry = null"})," deliberadamente. Este preflight não consulta backend e não fabrica ",e.jsx("code",{children:"contentId"}),", versão ou revisão para aparentar prontidão."]})]}),e.jsxs("div",{className:"admin-content-sandbox-footer",children:[e.jsxs("div",{children:[e.jsx("strong",{children:p.hasChanges?"Cópia local modificada":"Cópia local em paridade"}),e.jsxs("span",{children:[p.changes.added," adicionado(s) · ",p.changes.changed," alterado(s) · ",p.changes.removed," removido(s)"]})]}),e.jsxs("button",{type:"button",className:"admin-secondary-button",onClick:y,disabled:!p.hasChanges,children:[e.jsx(Qe,{size:15,"aria-hidden":"true"})," Descartar alterações locais"]})]})]})}function ue(a){return a===void 0?"ausente":a===null?"null":typeof a=="str
1ing"?a.length>120?`${a.slice(0,117)}â¦`:a:typeof a=="number"||typeof a=="boolean"?String(a):JSON.stringify(a)}function _a({item:a}){const i=je(a);if(!i)return e.jsxs("section",{className:"admin-shadow-history admin-shadow-history-empty","aria-label":"Histórico de revisões shadow",children:[e.jsx(Ge,{size:18,"aria-hidden":"true"}),e.jsxs("div",{children:[e.jsx("strong",{children:"Histórico indisponÃvel"}),e.jsx("p",{children:"Este item não possui payload materializado e não pode formar uma revisão baseline local."})]})]});const s=ye(i.payload,a.payload??{});return e.jsxs("section",{className:"admin-shadow-history","aria-labelledby":"admin-shadow-history-title",children:[e.jsxs("div",{className:"admin-shadow-preview-heading",children:[e.jsxs("div",{children:[e.jsx("span",{children:"Histórico editorial"}),e.jsx("h3",{id:"admin-shadow-history-title",children:"Revisões e comparação"})]}),e.jsx("small",{children:"Read-only local"})]}),e.jsxs("div",{className:"admin-shadow-history-notice",children:[e.jsx(R,{size:16,"aria-hidden":"true"}),e.jsx("p",{children:"Apenas a revisão baseline derivada da fonte versionada é legÃtima nesta fase. Revisões adicionais serão carregadas pelas RPCs protegidas somente depois de o shadow backend ser verificado."})]}),e.jsxs("div",{className:"admin-shadow-history-layout",children:[e.jsx("ol",{className:"admin-shadow-history-timeline","aria-label":"Linha do tempo de revisões disponÃveis",children:e.jsxs("li",{className:"is-published",children:[e.jsx("span",{className:"admin-shadow-history-marker","aria-hidden":"true"}),e.jsxs("div",{children:[e.jsxs("div",{className:"admin-shadow-history-title-row",children:[e.jsxs("strong",{children:["Revisão ",i.revisionNumber]}),e.jsxs("div",{className:"admin-schema-tags",children:[e.jsx("span",{children:"baseline local"}),i.isPublished?e.jsx("span",{children:"publicada"}):null,i.isDraft?e.jsx("span",{children:"draft atual"}):null]})]}),e.jsx("p",{children:i.changeNote}),e.jsxs("small",{children:[i.createdByName," · ainda sem timestamp de banco"]}),e.jsx("code",{children:i.revisionId})]})]})}),e.jsxs("section",{className:"admin-shadow-history-comparison","aria-label":"Comparação estrutural da revisão baseline",children:[e.jsxs("div",{className:"admin-shadow-history-comparison-heading",children:[e.jsx(Ve,{size:17,"aria-hidden":"true"}),e.jsxs("div",{children:[e.jsx("span",{children:"Comparação estrutural"}),e.jsx("strong",{children:s.identical?"Baseline em paridade com o payload atual":"Diferenças locais detectadas"})]})]}),e.jsxs("div",{className:"admin-shadow-history-metrics",children:[e.jsxs("div",{children:[e.jsx("strong",{children:s.added}),e.jsx("span",{children:"adicionados"})]}),e.jsxs("div",{children:[e.jsx("strong",{children:s.changed}),e.jsx("span",{children:"alterados"})]}),e.jsxs("div",{children:[e.jsx("strong",{children:s.removed}),e.jsx("span",{children:"removidos"})]})]}),s.identical?e.jsx("p",{className:"admin-system-audit-note",children:"O payload materializado atual coincide com a revisão baseline local. Isso não prova paridade com o banco enquanto o deployment permanecer não verificado."}):e.jsxs("details",{className:"admin-shadow-history-diff",children:[e.jsxs("summary",{children:["Ver ",s.changes.length," alteração(ões)"]}),e.jsx("ul",{children:s.changes.slice(0,50).map(t=>e.jsxs("li",{children:[e.jsx("code",{children:t.path}),e.jsx("span",{className:"admin-status-pill",children:t.kind}),e.jsxs("div",{children:[e.jsx("del",{children:ue(t.before)}),e.jsx("ins",{children:ue(t.after)})]})]},`${t.kind}-${t.path}`))}),s.changes.length>50?e.jsx("small",{children:"Mostrando as primeiras 50 alterações."}):null]})]})]})]})}function D(a){return a&&typeof a=="object"&&!Array.isArray(a)?a:null}function se(a){return Array.isArray(a)?a.map(D).filter(i=>!!i):[]}function h(a){return typeof a=="string"?a:""}function Ia(a){if(typeof a=="string")return a;const i=D(a);if(!i)return"";const s=h(i.label),t=h(i.text);return s?`${s}: ${t}`:t}function G(a){return Array.isArray(a)?a.map(Ia).filter(Boolean):[]}function $a({block:a}){const i=h(a.type);if(i==="lead")return e.jsx("p",{className:"admin-shadow-preview-lead",children:h(a.text)});if(i==="heading")return Number(a.level)===3?e.jsx("h4",{children:h(a.text)}):e.jsx("h3",{children:h(a.text)});if(i==="paragraph")return e.jsx("p",{children:h(a.text)});if(i==="list"){const s=G(a.items);return a.ordered===!0?e.jsx("ol",{children:s.map((t,o)=>e.jsx("li",{children:t},`${o}-${t}`))}):e.jsx("ul",{children:s.map((t,o)=>e.jsx("li",{children:t},`${o}-${t}`))})}return i==="card-grid"?e.jsx("div",{className:"admin-shadow-preview-cards",children:se(a.cards).map((s,t)=>e.jsxs("article",{children:[e.jsx("strong",{children:h(s.title)}),e.jsx("p",{children:h(s.text)})]},`${t}-${h(s.title)}`))}):i==="highlight"?e.jsx("aside",{className:"admin-shadow-preview-highlight",children:h(a.text)}):i==="links"?e.jsx("div",{className:"admin-shadow-preview-links",children:se(a.links).map((s,t)=>{const o=h(s.label),r=h(s.href);return r?e.jsx("a",{href:r,target:"_blank",rel:"noreferrer","aria-label":`Abrir referência ${o||r} em nova aba`,title:o||r,children:o||r},`${t}-${r}`):null})}):null}function za({payload:a}){const i=D(a.hero),s=D(a.seo),t=D(a.cta),o=se(a.blocks);return e.jsxs("article",{className:"admin-shadow-preview-document",children:[e.jsxs("header",{className:"admin-shadow-preview-hero",children:[i&&h(i.eyebrow)?e.jsx("span",{children:h(i.eyebrow)}):null,e.jsx("h2",{children:h(i?i.title:a.title)}),i&&h(i.intro)?e.jsx("p",{children:h(i.intro)}):null]}),s?e.jsxs("aside",{className:"admin-shadow-preview-seo","aria-label":"Prévia de metadata SEO",children:[e.jsx("strong",{children:"SEO"}),e.jsx("span",{children:h(s.title)}),e.jsx("p",{children:h(s.description)})]}):null,e.jsx("div",{className:"admin-shadow-preview-body",children:o.map((r,n)=>e.jsx($a,{block:r},`${n}-${h(r.type)}`))}),t?e.jsxs("footer",{className:"admin-shadow-preview-cta",children:[e.jsx("strong",{children:h(t.title)}),e.jsx("p",{children:h(t.text)}),h(t.label)?e.jsx("span",{children:h(t.label)}):null]}):null]})}function Da({payload:a}){const i=G(a.paragraphs),s=h(a.relatedHref),t=h(a.relatedLabel);return e.jsxs("article",{className:"admin-shadow-preview-document",children:[e.jsxs("header",{className:"admin-shadow-preview-hero",children:[e.jsx("span",{children:h(a.category)||"Editorial recuperado"}),e.jsx("h2",{children:h(a.title)}),e.jsx("p",{children:h(a.excerpt)})]}),e.jsx("div",{className:"admin-shadow-preview-body",children:i.map((o,r)=>
1e.jsx("p",{children:o},`${r}-${o.slice(0,24)}`))}),s?e.jsxs("footer",{className:"admin-shadow-preview-cta",children:[e.jsx("strong",{children:"Conteúdo relacionado"}),e.jsx("a",{href:s,target:"_blank",rel:"noreferrer","aria-label":`Abrir conteúdo relacionado ${t||s} em nova aba`,title:t||s,children:t||s})]}):null]})}function Ma({payload:a}){const i=G(a.steps),s=G(a.notes),t=h(a.warning),o=h(a.sourceHref),r=h(a.sourceLabel);return e.jsxs("article",{className:"admin-shadow-preview-document",children:[e.jsxs("header",{className:"admin-shadow-preview-hero",children:[e.jsx("span",{children:"Central de Dúvidas"}),e.jsx("h2",{children:h(a.title)}),e.jsx("p",{children:h(a.intro)||h(a.excerpt)})]}),e.jsxs("div",{className:"admin-shadow-preview-body",children:[i.length?e.jsxs("section",{children:[e.jsx("h3",{children:"Orientação"}),e.jsx("ol",{children:i.map((n,l)=>e.jsx("li",{children:n},`${l}-${n}`))})]}):null,s.length?e.jsxs("section",{children:[e.jsx("h3",{children:"Notas"}),e.jsx("ul",{children:s.map((n,l)=>e.jsx("li",{children:n},`${l}-${n}`))})]}):null,t?e.jsx("aside",{className:"admin-shadow-preview-highlight",children:t}):null]}),o?e.jsxs("footer",{className:"admin-shadow-preview-cta",children:[e.jsx("strong",{children:"Fonte de referência"}),e.jsx("a",{href:o,target:"_blank",rel:"noreferrer","aria-label":`Abrir fonte ${r||o} em nova aba`,title:r||o,children:r||o})]}):null]})}function La({item:a}){const i=a.payload?D(a.payload):null;return i?e.jsxs("section",{className:"admin-shadow-preview","aria-labelledby":"admin-shadow-preview-title",children:[e.jsxs("div",{className:"admin-shadow-preview-heading",children:[e.jsxs("div",{children:[e.jsx("span",{children:"Render estruturado"}),e.jsx("h3",{id:"admin-shadow-preview-title",children:"Prévia editorial shadow"})]}),e.jsx("small",{children:"Não altera a página pública"})]}),a.sourceKind==="editorial-current"?e.jsx(za,{payload:i}):null,a.sourceKind==="legacy-editorial"?e.jsx(Da,{payload:i}):null,a.sourceKind==="faq"?e.jsx(Ma,{payload:i}):null]}):e.jsxs("section",{className:"admin-shadow-preview-empty",children:[e.jsx("strong",{children:"Prévia indisponÃvel"}),e.jsx("p",{children:"Este item não possui payload estruturado e permanece bloqueado para baseline."})]})}const me={"editorial-current":"Editorial atual","legacy-editorial":"Editorial histórico",faq:"Central de Dúvidas"},Ba={page:"Página",news:"NotÃcia",guide:"Guia",faq:"FAQ"};function Z(a){return a&&typeof a=="object"&&!Array.isArray(a)?a:null}function H(a){return Array.isArray(a)?a.length:0}function B(a){return typeof a=="string"?a:null}function Fa(a){return B(a.payload?.schema)??"sem schema materializado"}function Va(a){const i=a.payload;if(!i)return[];if(a.sourceKind==="editorial-current"){const s=Z(i.seo),t=Z(i.hero),o=Z(i.cta);return[{label:"Blocos editoriais",value:String(H(i.blocks))},{label:"SEO",value:s?"materializado":"ausente"},{label:"HERO",value:t?"materializado":"ausente"},{label:"CTA",value:o?"materializado":"ausente"}]}return a.sourceKind==="legacy-editorial"?[{label:"Parágrafos recuperados",value:String(H(i.paragraphs))},{label:"Modo de migração",value:B(i.migrationMode)??"não informado"},{label:"Categoria",value:B(i.category)??"não informada"}]:[{label:"Passos",value:String(H(i.steps))},{label:"Notas",value:String(H(i.notes))},{label:"Alerta",value:B(i.warning)?"presente":"não informado"},{label:"Fonte",value:B(i.sourceLabel)??"não informada"}]}function Ua(){const a=q[0]?.sourceKey??"",[i,s]=g.useState(a),t=g.useMemo(()=>Aa(i)??q[0],[i]);if(!t)return null;const o=Va(t),r=Fa(t);return e.jsxs("section",{className:"admin-panel admin-content-inspector","aria-labelledby":"content-shadow-inspector-title",children:[e.jsxs("div",{className:"admin-panel-heading",children:[e.jsxs("div",{children:[e.jsx("span",{children:"Shadow read model"}),e.jsx("h2",{id:"content-shadow-inspector-title",children:"Inspeção editorial local"})]}),e.jsx("span",{className:"admin-count-badge",children:q.length})]}),e.jsxs("p",{className:"admin-system-audit-note",children:[e.jsx(R,{size:15,"aria-hidden":"true"})," Somente leitura local. Esta superfÃcie inspeciona o inventário versionado e não executa RPC, fetch, importação ou escrita no Supabase."]}),e.jsxs("div",{className:"admin-content-inspector-toolbar",children:[e.jsxs("label",{htmlFor:"admin-content-shadow-item",children:[e.jsx("span",{children:"Item do inventário"}),e.jsx("select",{id:"admin-content-shadow-item",value:t.sourceKey,onChange:n=>s(n.target.value),children:q.map(n=>e.jsxs("option",{value:n.sourceKey,children:[n.title," · ",me[n.sourceKind]]},n.sourceKey))})]}),e.jsxs("a",{className:"admin-secondary-button",href:t.publicPath,target:"_blank",rel:"noreferrer","aria-label":`Abrir conteúdo público ${t.title} em nova aba`,title:`Abrir ${t.publicPath}`,children:[e.jsx(We,{size:15,"aria-hidden":"true"})," Ver página pública"]})]}),e.jsxs("div",{className:"admin-content-inspector-grid",children:[e.jsxs("section",{className:"admin-content-inspector-card","aria-label":"Identidade do conteúdo shadow",children:[e.jsx("span",{children:"Identidade"}),e.jsx("h3",{children:t.title}),e.jsx("p",{children:t.excerpt}),e.jsxs("dl",{children:[e.jsxs("div",{children:[e.jsx("dt",{children:"Source key"}),e.jsx("dd",{children:e.jsx("code",{children:t.sourceKey})})]}),e.jsxs("div",{children:[e.jsx("dt",{children:"Origem"}
1),e.jsx("dd",{children:me[t.sourceKind]})]}),e.jsxs("div",{children:[e.jsx("dt",{children:"Tipo"}),e.jsx("dd",{children:Ba[t.contentType]})]}),e.jsxs("div",{children:[e.jsx("dt",{children:"Materialização"}),e.jsx("dd",{children:t.materialization})]}),e.jsxs("div",{children:[e.jsx("dt",{children:"Path público"}),e.jsx("dd",{children:e.jsx("code",{children:t.publicPath})})]})]})]}),e.jsxs("section",{className:"admin-content-inspector-card","aria-label":"Contrato estruturado do conteúdo shadow",children:[e.jsx("span",{children:"Contrato estruturado"}),e.jsx("h3",{children:r}),e.jsxs("p",{children:["Fonte versionada: ",e.jsx("code",{children:t.sourcePath})]}),o.length?e.jsx("dl",{children:o.map(n=>e.jsxs("div",{children:[e.jsx("dt",{children:n.label}),e.jsx("dd",{children:n.value})]},n.label))}):e.jsx("p",{className:"admin-system-audit-note",children:"Item catalogado sem payload estruturado. Ele deve permanecer bloqueado para baseline."})]})]}),e.jsx(La,{item:t}),e.jsx(_a,{item:t}),e.jsx(Ra,{item:t},t.sourceKey),e.jsxs("details",{className:"admin-content-inspector-payload",children:[e.jsxs("summary",{children:[e.jsx(ua,{size:15,"aria-hidden":"true"})," Ver payload estruturado"]}),e.jsx("pre",{children:t.payload?JSON.stringify(t.payload,null,2):"Payload não materializado."})]})]})}function Ha(a,i){if(a?.status!=="imported"&&a?.status!=="unchanged"||!a.id||a.source_key!==i||!Number.isInteger(a.version)||a.version<1||!a.baseline_fingerprint)throw new Error(`A reconciliação de ${i} retornou um resultado inválido.`);return{status:a.status,id:a.id,sourceKey:a.source_key,version:a.version,baselineFingerprint:a.baseline_fingerprint}}
1async function Ka(a){const i=[...new Set(a)],s=[];for(const t of i){const o=Xe(t);if(!o)throw new Error(`O baseline local não reconhece ${t}.`);const r=await I("amplivox_admin_import_product_baseline",{...Ze(o)});s.push(Ha(r,t))}return s}function Qa(a){return a==="matched"?"Em paridade":a==="missing"?"Ausente no shadow":a==="drift"?"Drift detectado":"Conflito de identidade"}function Ga(){const a=oe(),i=te(a.capabilities,"products.manage"),[s,t]=g.useState(null),[o,r]=g.useState(!1),[n,l]=g.useState(null),[x,p]=g.useState(null);async function v(){const[m,d]=await Promise.all([Ye(),ea()]);return{health:m,rows:d,summary:aa(d)}}async function j(){r(!0),l(null),p(null),t(null);try{t(await v())}catch(m){const d=m instanceof Error?m.message:"Falha desconhecida ao consultar o backend.";l(`O backend shadow de Produtos não pôde ser verificado neste ambiente. ${d}`)}finally{r(!1)}}async function u(){if(!s||!i||s.health.schemaVersion<3||!s.summary.safeToImportMissing||s.summary.missing===0)return;const m=s.rows.filter(d=>d.status==="missing").map(d=>d.sourceKey);r(!0),l(null),p(null);try{const d=await Ka(m);t(await v());const f=d.filter(M=>M.status==="imported").length;p(`${f} item(ns) reconciliado(s) no catálogo administrativo. A fonte pública não foi alterada.`)}catch(d){l(d instanceof Error?d.message:"Não foi possÃvel reconciliar os itens ausentes.")}finally{r(!1)}}const y=!!(s&&s.health.schemaVersion>=3);return e.jsxs("section",{className:"admin-panel admin-product-reconciliation","aria-labelledby":"admin-product-reconciliation-title",children:[e.jsxs("div",{className:"admin-product-reconciliation-heading",children:[e.jsxs("div",{children:[e.jsx("span",{children:"Reconciliação controlada"}),e.jsxs("h2",{id:"admin-product-reconciliation-title",children:[e.jsx(Ce,{size:19,"aria-hidden":"true"})," Paridade do catálogo shadow"]}),e.jsx("p",{children:"A verificação é read-only e compara o baseline derivado do registry canônico com o Supabase. A reconciliação de itens ausentes é uma operação bootstrap separada do CRUD: exige products.manage, backend generation 3 e ausência de drift/conflito, sem alterar as rotas públicas nem os produtos criados nativamente no Admin."})]}),e.jsxs("button",{className:"admin-secondary-button",type:"button",disabled:o,onClick:()=>void j(),children:[e.jsx(re,{size:15,"aria-hidden":"true"})," ",o?"Processandoâ¦":"Verificar backend shadow"]})]}),e.jsxs("div",{className:"admin-product-reconciliation-plan",children:[e.jsxs("div",{children:[e.jsx("strong",{children:J.inventoryCount}),e.jsx("span",{children:"itens no baseline"})]}),e.jsxs("div",{children:[e.jsx("strong",{children:J.hearingAidCount}),e.jsx("span",{children:"aparelhos"})]}),e.jsxs("div",{children:[e.jsx("strong",{children:J.accessoryCount}),e.jsx("span",{children:"acessórios"})]})]}),n?e.jsxs("div",{className:"admin-product-reconciliation-error",role:"alert",children:[e.jsx(Ne,{size:17,"aria-hidden":"true"}),e.jsxs("div",{children:[e.jsx("strong",{children:"Operação não concluÃda"}),e.jsx("p",{children:n})]})]}):null,x?e.jsxs("div",{className:"admin-product-reconciliation-success",role:"status",children:[e.jsx(Q,{size:17,"aria-hidden":"true"})," ",e.jsx("span",{children:x})]}):null,s?e.jsxs("div",{className:"admin-product-reconciliation-result","aria-live":"polite",children:[e.jsxs("div",{className:"admin-product-reconciliation-result-heading",children:[e.jsxs("div",{children:[e.jsx(Q,{size:18,"aria-hidden":"true"}),e.jsxs("div",{children:[e.jsx("strong",{children:"RPCs do catálogo responderam"}),e.jsxs("span",{children:["Schema ",s.health.schemaVersion," · ",s.health.entryCount," entries · ",s.health.revisionCount," revisões · ",s.health.baselineCount," baseline · ",s.health.adminNativeCount," admin-native"]})]})]}),e.jsx("span",{className:`admin-product-reconciliation-verdict ${s.summary.fullyMatched?"is-matched":s.summary.safeToImportMissing?"is-safe":"is-blocked"}`,children:s.summary.fullyMatched?"Paridade integral":s.summary.safeToImportMissing?"Sem drift/conflito":"Revisão necessária"})]}),e.jsxs("div",{className:"admin-product-reconciliation-counts",children:[e.jsxs("div",{children:[e.jsx("strong",{children:s.summary.matched}),e.jsx("span",{children:"matched"})]}),e.jsxs("div",{children:[e.jsx("strong",{children:s.summary.missing}),e.jsx("span",{children:"missing"})]}),e.jsxs("div",{children:[e.jsx("strong",{children:s.summary.drift}),e.jsx("span",{children:"drift"})]}),e.jsxs("div",{children:[e.jsx("strong",{children:s.summary.conflict}),e.jsx("span",{children:"conflito"})]})]}),e.jsx("p",{className:"admin-product-reconciliation-guidance",children:s.summary.fullyMatched?"O baseline canônico está integralmente representado. O editor administrativo pode operar para perfis autorizados, inclusive com entries admin-native separadas; o runtime público continua no registry até cutover explÃcito.":y?s.summary.safeToImportMissing?"Os itens existentes não apresentam drift nem conflito. Os itens missing podem ser reconciliados como bootstrap auditado; entries admin-native permanecem fora dessa comparação de baseline.":"Há drift ou conflito de identidade. Nenhuma importação deve ser executada antes de revisar esses itens.":"O backend respondeu, mas ainda não está na generation 3 exigida pelo Admin atual. Aplique toda a sequência de migrations de Produtos antes de reconciliar o baseline."}),s.summary.safeToImportMissing&&s.summary.missing>0?e.jsxs("div",{className:"admin-product-reconciliation-import",children:[e.jsxs("button",{className:"admin-primary-button",type:"button",disabled:o||!i||!y,onClick:()=>void u(),children:[e.jsx(sa,{size:15,"aria-hidden":"true"})," Reconciliar ",s.summary.missing," item(ns) ausente(s)"]}),e.jsx("small",{children:i?y?"A operação é explÃcita, idempotente e auditada. Ela reconcilia apenas o baseline administrativo sem alterar o registry público.":"A reconciliação exige schema 3, que confirma a geração atual do catálogo administrativo.":"Seu perfil não possui products.manage."})]}
1):null,s.rows.some(m=>m.status==="drift"||m.status==="conflict")?e.jsx("div",{className:"admin-product-reconciliation-problems",children:s.rows.filter(m=>m.status==="drift"||m.status==="conflict").map(m=>e.jsxs("div",{children:[e.jsx("strong",{children:m.slug}),e.jsx("span",{children:Qa(m.status)}),e.jsx("small",{children:m.actualPublicPath||m.publicPath})]},m.sourceKey))}):null]}):null]})}const Wa={draft:"Rascunho",review:"Em revisão",published:"Publicado no backend",archived:"Arquivado"};function Ja(a){const i=new Date(a);return Number.isNaN(i.getTime())?a:i.toLocaleString("pt-BR")}function Xa(){const a=oe(),i=te(a.capabilities,"products.manage"),s=Ae("produtos"),[t,o]=g.useState(null),[r,n]=g.useState(!1),[l,x]=g.useState(null);async function p(){n(!0),x(null);try{o(await ia())}catch(v){o(null),x(v instanceof Error?v.message:"Não foi possÃvel carregar o catálogo administrativo.")}finally{n(!1)}}return e.jsxs("section",{className:"admin-panel admin-product-workspace","aria-labelledby":"admin-product-workspace-title",children:[e.jsxs("div",{className:"admin-panel-heading admin-
1product-workspace-heading",children:[e.jsxs("div",{children:[e.jsx("span",{children:"Catálogo administrativo"}),e.jsxs("h2",{id:"admin-product-workspace-title",children:[e.jsx(Ce,{size:18,"aria-hidden":"true"})," Revisões persistentes"]})]}),e.jsxs("div",{className:"admin-product-workspace-actions",children:[i&&s?e.jsxs("a",{className:"admin-primary-button",href:"/admin/produtos/catalogo/novo/",children:[e.jsx(ta,{size:15,"aria-hidden":"true"})," Novo produto"]}):null,e.jsxs("button",{className:"admin-secondary-button",type:"button",disabled:r,onClick:()=>void p(),children:[e.jsx(re,{size:15,"aria-hidden":"true"})," ",r?"Carregandoâ¦":t?"Atualizar catálogo":"Carregar catálogo"]})]})]}),e.jsx("p",{className:"admin-system-audit-note",children:"Esta leitura consulta somente o catálogo administrativo. As páginas públicas de produto continuam usando o registry versionado até um cutover explÃcito."}),s?null:e.jsx(b,{tone:"warning",title:"Editor preparado, deployment ainda não verificado",children:e.jsx("p",{children:"O workspace pode inspecionar RPCs quando elas existirem no ambiente. Salvar, enviar para revisão, publicar e criar novos produtos permanecem bloqueados até o domÃnio Produtos ser marcado como verificado após a aplicação das migrations."})}),l?e.jsx(b,{tone:"error",title:"Catálogo administrativo indisponÃvel",children:e.jsx("p",{children:l})}):null,t?.length===0?e.jsxs("div",{className:"admin-product-workspace-empty",children:[e.jsx("strong",{children:"Nenhuma entrada persistente encontrada"}),e.jsx("p",{children:"O baseline precisa ser reconciliado no backend antes que os produtos possam entrar no workflow administrativo."})]}):null,t?.length?e.jsx("div",{className:"admin-product-workspace-table-wrap",children:e.jsxs("table",{className:"admin-product-workspace-table",children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Produto"}),e.jsx("th",{children:"Origem"}),e.jsx("th",{children:"Status"}),e.jsx("th",{children:"Revisões"}),e.jsx("th",{children:"Atualização"}),e.jsx("th",{children:"Ação"})]})}),e.jsx("tbody",{children:t.map(v=>e.jsxs("tr",{children:[e.jsxs("td",{children:[e.jsx("strong",{children:v.name}),e.jsx("span",{children:v.publicPath})]}),e.jsx("td",{children:e.jsx("span",{children:v.entryOrigin==="baseline"?"Registry reconciliado":"Admin nativo"})}),e.jsx("td",{children:e.jsx("span",{className:`admin-status-pill is-${v.workflowStatus}`,children:Wa[v.workflowStatus]})}),e.jsx("td",{children:e.jsxs("span",{children:["Draft #",v.draftRevisionNumber??"â"," · Publicada #",v.publishedRevisionNumber??"â"]})}),e.jsx("td",{children:e.jsx("span",{children:Ja(v.updatedAt)})}),e.jsx("td",{children:e.jsx("a",{className:"admin-secondary-button",href:`/admin/produtos/catalogo/${v.id}/`,children:i&&s?"Editar":"Inspecionar"})})]},v.id))})]})}):null]})}function Za(a){return a.materialization!=="structured"||!a.payload?null:{requested_source_key:a.sourceKey,requested_source_kind:a.sourceKind,requested_content_type:a.contentType,requested_slug:a.slug,requested_public_path:a.publicPath,requested_payload:a.payload}}function Ya(){const a=ee.flatMap(i=>{const s=Za(i);return s?[s]:[]});return{inventoryCount:q.length,structuredCount:ee.length,blockedCount:ae.length,ready:ae.length===0&&a.length===q.length,requests:a}}const ei=Ya(),Se=[{key:"title",label:"Item",render:a=>e.jsxs("div",{className:"admin-primary-cell",children:[e.jsx("strong",{children:a.title}),e.jsx("span",{children:a.detail})]})},{key:"type",label:"Tipo",render:a=>a.type},{key:"status",label:"Status",render:a=>e.jsx("span",{className:"admin-status-pill",children:a.status})}],pe=[...fe.map(a=>({id:`editorial-${a.href}`,title:a.title,type:a.group==="news"?"NotÃcia":"Artigo",status:"Publicado",detail:`${a.category} · ${a.href}`})),...ve.map(a=>({id:`legacy-${a.slug}`,title:a.title,type:"Editorial histórico",status:a.migrationMode==="verified-context"?"Contexto verificado":"ReconstruÃdo",detail:`${a.category} · /${a.slug}/`})),...ge.map(a=>({id:`faq-${a.slug}
1`,title:a.title,type:"FAQ",status:"Publicado",detail:`/duvida-frequente/${a.slug}/`}))],ai=F.map(a=>({id:a.slug,title:a.name,type:a.category,status:"Migrado",detail:`${a.source==="oticon"?"Fonte Oticon":"Fonte Amplivox"} · /produto/${a.slug}/`})),ii=F.filter(a=>a.category==="Aparelho auditivo").length,si=F.filter(a=>a.category==="Acessório").length,ti=ne.filter(a=>a.productKind==="hearing-aid").length,oi=ne.filter(a=>a.productKind==="accessory").length,ni=[{href:"/admin/conteudo/pages/",label:"Páginas"},{href:"/admin/conteudo/news/",label:"NotÃcias"},{href:"/admin/conteudo/guides/",label:"Guias"},{href:"/admin/conteudo/faqs/",label:"FAQs"},{href:"/admin/conteudo/categorias/",label:"Categorias"},{href:"/admin/conteudo/tags/",label:"Tags"},{href:"/admin/conteudo/hero/",label:"HERO da homepage"}];function ri(){const a=ei;return e.jsx(S,{capability:"content.view",children:e.jsxs("div",{className:"admin-page",children:[e.jsx(w,{}),e.jsx(A,{eyebrow:"Publicação",title:"Conteúdo",description:"CMS editorial para páginas, notÃcias, guias, FAQs, taxonomias e componentes públicos controlados.",action:e.jsx("a",{className:"admin-primary-button",href:"/admin/conteudo/news/novo/",children:"Adicionar conteúdo"})}),e.jsxs("div",{className:"admin-subnav","aria-label":"Recursos de Conteúdo",children:[e.jsx("a",{href:"/admin/conteudo/",className:"is-current",children:"Visão geral"}),ni.map(i=>e.jsx("a",{href:i.href,children:i.label},i.href))]}),e.jsx(b,{tone:"info",title:"CMS administrativo ativo, runtime público controlado por cutover",children:e.jsx("p",{children:"Páginas, notÃcias, guias e FAQs possuem workflow administrativo de rascunho, revisão e publicação no backend editorial. Categorias e tags possuem registry próprio. O site público continua usando as fontes versionadas de cada domÃnio até o cutover explÃcito da rota correspondente."})}),e.jsx(b,{tone:a.ready?"info":"warning",title:a.ready?"Inventário editorial reconciliável":"Inventário editorial com bloqueios",children:e.jsxs("p",{children:["O plano local cobre ",a.structuredCount," de ",a.inventoryCount," item(ns), com ",a.blockedCount," bloqueado(s). Existem ",a.requests.length," request(s) determinÃsticos de baseline disponÃveis para auditoria técnica; esta tela não executa importações automaticamente."]})}),e.jsxs("div",{className:"admin-resource-schema-grid",children:[e.jsxs("section",{className:"admin-panel admin-resource-schema",children:[e.jsxs("div",{className:"admin-panel-heading",children:[e.jsxs("div",{children:[e.jsx("span",{children:"Shadow baseline"}),e.jsx("h2",{children:"Conteúdo estruturado"})]}),e.jsx("span",{className:"admin-count-badge",children:ee.length})]}),e.jsx("p",{children:"Itens com corpo completo em representação estruturada e cobertos pela camada de reconciliação editorial."})]}),e.jsxs("section",{className:"admin-panel admin-resource-schema",children:[e.jsxs("div",{className:"admin-panel-heading",children:[e.jsxs("div",{children:[e.jsx("span",{children:"Guarda de materialização"}),e.jsx("h2",{children:"Conteúdo somente catalogado"})]}),e.jsx("span",{className:"admin-count-badge",children:ae.length})]}),e.jsx("p",{children:"Se um materializer desaparecer, o item volta automaticamente para catalog-only e deixa de ser elegÃvel à reconciliação completa."})]})]}),e.jsx(Ua,{}),e.jsxs("section",{className:"admin-panel",children:[e.jsxs("div",{className:"admin-panel-heading",children:[e.jsxs("div",{children:[e.jsx("span",{children:"Inventário"}),e.jsx("h2",{children:"Conteúdo coberto pela reconciliação"})]}),e.jsx("span",{className:"admin-count-badge",children:q.length})]}),e.jsx("p",{className:"admin-system-audit-note",children:"O inventário mede cobertura técnica. O estado público de cada rota continua dependendo do seu contrato especÃfico de runtime e cutover."})]}),e.jsxs("section",{className:"admin-panel",children:[e.jsxs("div",{className:"admin-panel-heading",children:[e.jsxs("div",{children:[e.jsx("span",{children:"Acervo"}),e.jsx("h2",{children:"Conteúdo publicado e recuperado"})]}),e.jsx("span",{className:"admin-count-badge",children:pe.length})]}
1),e.jsx(N,{rows:pe,columns:Se,searchText:i=>`${i.title} ${i.type} ${i.status} ${i.detail}`,emptyText:"Nenhum conteúdo registrado."})]})]})})}function di(){return e.jsx(S,{capability:"products.view",children:e.jsxs("div",{className:"admin-page",children:[e.jsx(w,{}),e.jsx(A,{eyebrow:"Catálogo",title:"Produtos",description:"Catálogo canônico de aparelhos auditivos e acessórios, com reconciliação shadow e editor administrativo por revisões."}),e.jsx(b,{tone:"warning",title:"Catálogo público continua versionado",children:e.jsxs("p",{children:["O registry atual possui ",F.length," produtos: ",ii," aparelho(s) auditivo(s) e ",si," acessório(s). O backend administrativo pode manter rascunhos, revisão e publicação próprias, mas nenhuma dessas operações troca automaticamente as rotas públicas, que continuam lendo o registry versionado."]})}),e.jsxs("div",{className:"admin-resource-schema-grid",children:[e.jsxs("section",{className:"admin-panel admin-resource-schema",children:[e.jsxs("div",{className:"admin-panel-heading",children:[e.jsxs("div",{children:[e.jsx("span",{children:"Baseline determinÃstico"}),e.jsx("h2",{children:"Catálogo reconciliável"})]}),e.jsx("span",{className:"admin-count-badge",children:ne.length})]}),e.jsxs("p",{children:[ti," aparelho(s) auditivo(s) e ",oi," acessório(s) possuem payload `amplivox.product.v1`, sourceKey estável e URL pública canônica preparados para a revisão #1."]})]}),e.jsxs("section",{className:"admin-panel admin-resource-schema",children:[e.jsx("div",{className:"admin-panel-heading",children:e.jsxs("div",{children:[e.jsx("span",{children:"Workflow administrativo"}),e.jsx("h2",{children:"Editor persistente preparado"})]})}),e.jsx("p",{children:"A fundação mantém health check, leitura protegida e baseline idempotente; o workflow acrescenta revisões imutáveis, concorrência otimista e estados rascunho â revisão â publicação. A escrita só é liberada após deployment verificado."})]})]}),e.jsx(Ga,{}),e.jsx(Xa,{}),e.jsxs("section",{className:"admin-panel",children:[e.jsxs("div",{className:"admin-panel-heading",children:[e.jsxs("div",{children:[e.jsx("span",{children:"Registry público"}),e.jsx("h2",{children:"Catálogo publicado atual"})]}),e.jsx("span",{className:"admin-count-badge",children:F.length})]}),e.jsx(N,{rows:ai,columns:Se,searchText:a=>`${a.title} ${a.type} ${a.status} ${a.detail}`,emptyText:"Nenhum produto registrado."})]})]})})}const de=[{key:"title",label:"Item",render:a=>e.jsxs("div",{className:"admin-primary-cell",children:[e.jsx("strong",{children:a.title}),e.jsx("span",{children:a.detail})]})},{key:"type",label:"Tipo",render:a=>a.type},{key:"status",label:"Status",render:a=>e.jsx("span",{className:"admin-status-pill",children:a.status})}],he=[...Object.entries(Pe).map(([a,i])=>({id:`home-${a}`,title:i.split("/").at(-1)??a,type:"Home",status:"Versionado",detail:i})),...Te.map((a,i)=>({id:`clinic-${i+1}`,title:a.split("/").at(-1)??`ClÃnica ${i+1}`,type:"Galeria da clÃnica",status:"Versionado",detail:a})),...Oe.map(a=>({id:`article-${a.href}`,title:a.title,type:"Artigo",status:"Versionado",detail:a.image}))],li=[{id:"general",title:"Geral",type:"Configuração pública",status:"Versionado",detail:"Identidade pública, contato e dados institucionais permanecem definidos no rebuild."},{id:"content",title:"Conteúdo",type:"PolÃtica editorial",status:"Protegido",detail:"Recursos editoriais seguem registry, capabilities e validators antes de qualquer persistência."},{id:"media",title:"MÃdia",type:"PolÃtica de arquivos",status:"Versionado",detail:"Assets públicos continuam sob /media/amplivox; arquivos clÃnicos permanecem fora da biblioteca pública."},{id:"permalinks",title:"Permalinks",type:"Contrato de URL",status:"Protegido",detail:"Rotas, aliases, sitemap e redirects continuam protegidos pelos validators de URL e SEO."}];function ci(){return[{id:"supabase-client",title:"Supabase",type:"Backend",status:"Runtime configurado",detail:"O cliente usa somente URL e publishable key. Service role não pertence ao navegador."},{id:"admin-rpcs",title:"RPCs administrativas",type:"Backend protegido",status:"Depende do ambiente",detail:"O código exige as migrations administrativas aplicadas no projeto Supabase antes de ativar operações persistentes."},{id:"external-apis",title:"APIs externas",type:"Integração",status:"Sem escrita ativada",detail
1:"Nenhuma credencial administrativa externa é exposta no frontend do Admin."},{id:"webhooks",title:"Webhooks",type:"Automação",status:"Não ativado",detail:"A superfÃcie está reservada, mas não anuncia endpoints ou entregas que ainda não foram implantados."}]}function ui(){return e.jsx(S,{capability:"media.manage",children:e.jsxs("div",{className:"admin-page",children:[e.jsx(w,{}),e.jsx(A,{eyebrow:"Operação",title:"MÃdia",description:"Acervo versionado do rebuild e biblioteca persistente de imagens públicas reutilizáveis.",action:e.jsx("a",{className:"admin-primary-button",href:"/admin/midia/media-library/",children:"Abrir biblioteca"})}),e.jsx(b,{tone:"success",title:"Biblioteca persistente ativa",children:e.jsx("p",{children:"O bucket público amplivox-media, o registry de metadados e as RPCs protegidas foram verificados no Supabase gerenciado. Uploads autorizados podem ser reutilizados nos editores; arquivar preserva o arquivo fÃsico para não quebrar revisões históricas."})}),e.jsxs("section",{className:"admin-panel",children:[e.jsxs("div",{className:"admin-panel-heading",children:[e.jsxs("div",{children:[e.jsx("span",{children:"Inventário legado"}),e.jsx("h2",{children:"Assets públicos já versionados"})]}),e.jsx("span",{className:"admin-count-badge",children:he.length})]}),e.jsx("p",{className:"admin-system-audit-note",children:"Este inventário continua útil para auditoria do rebuild; novos uploads editoriais pertencem à biblioteca persistente."}),e.jsx(N,{rows:he,columns:de,searchText:a=>`${a.title} ${a.type} ${a.status} ${a.detail}`,emptyText:"Nenhum asset público registrado."})]})]})})}function mi(){return e.jsx(S,{capability:"settings.manage",children:e.jsxs("div",{className:"admin-page",children:[e.jsx(w,{}),e.jsx(A,{eyebrow:"Operação",title:"Configurações",description:"Leitura dos contratos que governam o site enquanto preferências persistentes ainda não foram ativadas."}),e.jsx(b,{tone:"info",title:"Configurações ainda são código",children:e.jsx("p",{children:"Esta etapa não cria um painel que aparenta salvar sem backend. Os valores continuam versionados e protegidos pelo build até existir um domÃnio persistente de configurações com auditoria."})}),e.jsx(N,{rows:li,columns:de,searchText:a=>`${a.title} ${a.type} ${a.status} ${a.detail}`,emptyText:"Nenhuma configuração registrada."})]})})}function pi(){const a=ci();return e.jsx(S,{capability:"integrations.manage",children:e.jsxs("div",{className:"admin-page",children:[e.jsx(w,{}),e.jsx(A,{eyebrow:"Operação",title:"Integrações",description:"Leitura do estado das conexões públicas que o runtime utiliza."}),e.jsx(b,{tone:"warning",title:"Runtime configurado não é deployment comprovado",children:e.jsx("p",{children:"A presença do cliente Supabase não comprova que as migrations administrativas estejam aplicadas. Cada domÃnio persistente mantém seu próprio estado de implantação e validação."})}),e.jsx(N,{rows:a,columns:de,searchText:i=>`${i.title} ${i.type} ${i.status} ${i.detail}`,emptyText:"Nenhuma integração registrada."})]})})}const Y=K.map(a=>({sourceKey:`unit:${a.slug}`,slug:a.slug,publicPath:`/unidade-amplivox/${a.slug}/`,payload:{schema:"amplivox.unit.v1",slug:a.slug,name:a.name,city:a.city,address:a.address??null,phone:a.phone??null,email:a.email??null,schedule:a.schedule??null,image:a.image??null}}));function hi(a){return{requested_slug:a.slug,requested_public_path:a.publicPath,requested_payload:a.payload}}function xi(a){return a&&typeof a=="object"&&!Array.isArray(a)?a:null}function T(a){return typeof a=="string"&&a.trim()?a:null}function vi(a){return a==="missing"||a==="matched"||a==="drift"||a==="conflict"?a:null}const W=Object.freeze({inventoryCount:Y.length,cityCount:new Set(Y.map(a=>String(a.payload.city))).size,requests:Y.map(hi)});function gi(a){return Array.isArray(a)?a.flatMap(i=>{const s=xi(i);if(!s)return[];const t=T(s.source_key),o=T(s.slug),r=T(s.public_path),n=vi(s.status),l=T(s.unit_id),x=T(s.expected_fingerprint),p=T(s.actual_fingerprint),v=T(s.actual_public_path);return!t||!o||!r||!n||!x?[]:t!==`unit:${o}`||r!==`/unidade-amplivox/${o}/`?[]:[{sourceKey:t,slug:o,publicPath:r,status:n,unitId:l,expectedFingerprint:x,actualFingerprint:p,actualPublicPath:v}]}):[]}function fi(a){const i=a.filter(r=>r.status==="missing").length,s=a.filter(r=>r.status==="matched").length,t=a.filter(r=>r.status==="drift").length,o=a.filter(r=>r.status==="conflict").length;return{total:a.length,missing:i,matched:s,drift:t,conflict:o,safeToImportMissing:a.length>0&&t===0&&o===0,fullyMatched:a.length>0&&s===a.length}}function O(a){return typeof a=="number"&&Number.isInteger(a)&&a>=0?a:null}function bi(a){const i=O(a.schema_version),s=O(a.entry_count),t=O(a.revision_count),o=O(a.draft_count),r=O(a.review_count),n=O(a.published_count),l=O(a.archived_count);if(i!==1||s===null||t===null||o===null||r===null||n===null||l===null)throw new Error("A saúde do shadow de Unidades não passou pelo contrato esperado.");return{schemaVersion:i,entryCount:s,revisionCount:t,draftCount:o,reviewCount:r,publishedCount:n,archivedCount:l}}async function ji(){const a=await I("amplivox_admin_units_shadow_health");return bi(a)}async function yi(){const a=await I("amplivox_admin_preview_unit_baseline",{requested_items:W.requests}),i=gi(a);if(i.length!==W.inventoryCount)throw new Error("O preview de Unidades não cobriu integralmente o baseline canônico.");return i}function Ai(a){return a==="matched"?"Em paridade":a==="missing"?"Ausente no shadow":a==="drift"?"Drift detectado":"Conflito de identidade"}function Ni(){const[a,i]=g.useState(null),[s,t]=g.useState(!1),[o,r]=g.useState(null);async function n(){t(!0),r(null),i(null);try{const[l,x]=await Promise.all([ji(),yi()]);i({health:l,rows:x,summary:fi(x)})}catch(l){const x=l instanceof Error?l.message:"Falha desconhecida ao consultar o backend.";r(`O backend shadow de Unidades não pôde ser verificado neste ambiente. ${x}`)}finally{t(!1)}}return e.jsxs("section",{className:"admin-panel admin-units-reconciliation","aria-labelledby":"admin-units-reconciliation-title",children:[e.jsxs("div",{className:"admin-units-reconciliation-heading",children:[e.jsxs("div",{children:[e.jsx("span",{children:"Reconciliação read-only"}),e.jsxs("h2",{id:"admin-units-reconciliation-title",children:[e.jsx(ze,{size:19,"aria-hidden":"true"})," Paridade da rede shadow"]}),e.jsx("p",{children:"A verificação compara o registry canônico das unidades com o Supabase. Ela não importa registros, criar revisões ou trocar a fonte das páginas públicas."})]}),e.jsxs("button",{className:"admin-secondary-button",type:"button",disabled:s,onClick:()=>void n(),children:[e.jsx(re,{size:15,"aria-hidden":"true"})," ",s?"Verificandoâ¦":"Verificar backend shadow"]})]}),e.jsxs("div",{className:"admin-units-reconciliation-plan",children:[e.jsxs("div",{children:[e.jsx("strong",{children:W.inventoryCount}),e.jsx("span",{children:"unidades no baseline"})]}),e.jsxs("div",{children:[e.jsx("strong",{children:W.cityCount}),e.jsx("span",{children:"cidades/classificações"})]})]}),o?e.jsxs("div",{className:"admin-units-reconciliation-error",role:"alert",children:[e.jsx(Ne,{size:17,"aria-hidden":"true"}),e.jsxs("div",{children:[e.jsx("strong",{children:"Deployment ainda não comprovado"}),e.jsx("p",{children:o})]})]}):null,a?e.jsxs("div",{className:"admin-units-reconciliation-result","aria-live":"polite",children:[e.jsxs("div",{className:"admin-units-reconciliation-result-heading",children:[e.jsxs("div",{children:[e.jsx(Q,{size:18,"aria-hidden":"true"}),e.jsxs("div",{children:[e.jsx("strong",{children:"RPCs de Unidades responderam"}),e.jsxs("span",{children:["Schema ",a.health.schemaVersion," · ",a.health.entryCount," entries · ",a.health.revisionCount," revisões"]})]})]}),e.jsx("span",{className:`admin-units-reconciliation-verdict ${a.summary.fullyMatched?"is-matched":a.summary.safeToImportMissing?"is-safe":"is-blocked"}`,children:a.summary.fullyMatched?"Paridade integral":a.summary.safeToImportMissing?"Sem drift/conflito":"Revisão necessária"})]}),e.jsxs("div",{className:"admin-units-reconciliation-counts",children:[e.jsxs("div",{children:[e.jsx("strong",{children:a.summary.matched}),e.jsx("span",{children:"matched"})]}),e.jsxs("div",{children:[e.jsx("strong",{children:a.summary.missing}),e.jsx("span",{children:"missing"})]}),e.jsxs("div",{children:[e.jsx("strong",{children:a.summary.drift}),e.jsx("span",{children:"drift"})]}),e.jsxs("div",{children:[e.jsx("strong",{children:a.summary.conflict}),e.jsx("span",{children:"conflito"})]})]}),e.jsx("p",{className:"admin-units-reconciliation-guidance",children:a.summary.fullyMatched?"A rede canônica está integralmente representada no shadow. Isso ainda não libera edição administrativa nem cutover público.":a.summary.safeToImportMissing?"Os registros existentes não apresentam drift nem conflito. Itens missing só devem ser reconciliados por uma o
1peração administrativa explÃcita e auditada.":"Há drift ou conflito de identidade. Nenhuma importação deve ocorrer antes da revisão desses registros."}),a.rows.some(l=>l.status==="drift"||l.status==="conflict")?e.jsx("div",{className:"admin-units-reconciliation-problems",children:a.rows.filter(l=>l.status==="drift"||l.status==="conflict").map(l=>e.jsxs("div",{children:[e.jsx("strong",{children:l.slug}),e.jsx("span",{children:Ai(l.status)}),e.jsx("small",{children:l.actualPublicPath||l.publicPath})]},l.sourceKey))}):null]}):null]})}const le=[{key:"title",label:"Item",render:a=>e.jsxs("div",{className:"admin-primary-cell",children:[e.jsx("strong",{children:a.title}),e.jsx("span",{children:a.detail})]})},{key:"type",label:"Tipo",render:a=>a.type},{key:"status",label:"Status",render:a=>e.jsx("span",{className:"admin-status-pill",children:a.status})}],Ci=[{id:"canonical-host",title:"Host canônico",type:"Canonical",status:"Protegido pelo build",detail:ke},{id:"seo-head",title:"Metadados públicos",type:"Head",status:"Centralizado",detail
1:"TÃtulo, description, Open Graph, Twitter, canonical, robots e geo usam createSeoHead()."},{id:"sitemap",title:"Sitemap alvo",type:"Indexação",status:"Versionado",detail:"docs/seo/sitemap-target.xml permanece protegido pelos validators de resolução e cobertura."},{id:"preview-hosts",title:"Host indexável",type:"Indexação",status:"Fail-closed",detail:"Somente amplivox.com.br é indexável. www.amplivox.com.br deve consolidar por redirect permanente antes de chegar ao app."},{id:"url-contract",title:"Contrato de URLs",type:"Rotas",status:"Protegido pelo build",detail:"Canonicals, aliases, redirects, rotas legadas e sitemap continuam sob gates especÃficos."}],wi=[{id:"partner-program",title:"Programa de Parceiros",type:"Página pública preservada",status:"Noindex",detail:"/conteudo/programa-de-parceiros/ preserva o histórico sem publicar condições comerciais não confirmadas."},{id:"partners",title:"Parceiros",type:"Recurso administrativo",status:"Registry pronto",detail:"Estrutura, campos, status e capability existem; persistência ainda não foi ativada."},{id:"partner-requests",title:"Solicitações",type:"Recurso administrativo",status:"Registry pronto",detail:"Fluxo de entrada está modelado, mas nenhuma fila persistente é anunciada antes do backend existir."}],Si=K.map(a=>({id:a.slug,title:a.name,type:a.city,status:"Versionado",detail:[a.address,a.phone,a.email,a.schedule].filter(Boolean).join(" · ")||"Dados públicos mÃnimos"}));function Ei(){return e.jsx(S,{capability:"seo.manage",children:e.jsxs("div",{className:"admin-page",children:[e.jsx(w,{}),e.jsx(A,{eyebrow:"Aquisição orgânica",title:"SEO",description:"Contratos de indexação, canonical e URLs que já governam o rebuild público."}),e.jsx(b,{tone:"info",title:"SEO operacional, edição ainda versionada",children:e.jsx("p",{children:"Esta superfÃcie mostra os contratos reais do site. Alterações continuam passando pelo código e pelos validators até existir persistência administrativa com histórico e publicação segura."})}),e.jsx(N,{rows:Ci,columns:le,searchText:a=>`${a.title} ${a.type} ${a.status} ${a.detail}`,emptyText:"Nenhum contrato SEO registrado."})]})})}function qi(){return e.jsx(S,{capability:"units.manage",children:e.jsxs("div",{className:"admin-page",children:[e.jsx(w,{}),e.jsx(A,{eyebrow:"Rede de atendimento",title:"Unidades",description:"Registry canônico da rede com backend shadow preparado para reconciliação segura antes de qualquer edição administrativa ou cutover público."}),e.jsx(b,{tone:"warning",title:"Rede pública continua versionada",children:e.jsxs("p",{children:["As ",K.length," unidades e pontos de atendimento abaixo continuam sendo a fonte efetiva das páginas públicas. O shadow de Unidades pode ser verificado em modo somente leitura, mas não importa registros nem habilita edição automaticamente."]})}),e.jsx(Ni,{}),e.jsxs("section",{className:"admin-panel",children:[e.jsxs("div",{className:"admin-panel-heading",children:[e.jsxs("div",{children:[e.jsx("span",{children:"Registry"}),e.jsx("h2",{children:"Rede publicada"})]}),e.jsx("span",{className:"admin-count-badge",children:K.length})]}),e.jsx(N,{rows:Si,columns:le,searchText:a=>`${a.title} ${a.type} ${a.status} ${a.detail}`,emptyText:"Nenhuma unidade registrada."})]})]})})}function Pi(){return e.jsx(S,{capability:"partners.view",children:e.jsxs("div",{className:"admin-page",children:[e.jsx(w,{}),e.jsx(A,{eyebrow:"Relacionamento",title:"Parceiros",description:"Estado do Programa de Parceiros e dos recursos administrativos já modelados no registry."}),e.jsx(b,{tone:"warning",title:"Programa preservado, operação persistente ainda não ativada",children:e.jsx("p",{children:"A página pública continua disponÃvel apenas como canal institucional e permanece noindex. Cadastros e solicitações não são simulados no Admin antes de existir backend autorizado e auditável."})}),e.jsx(N,{rows:wi,columns:le,searchText:a=>`${a.title} ${a.type} ${a.status} ${a.detail}`,emptyText:"Nenhum recurso de parceria registrado."})]})})}const Ti=[{key:"action",label:"Ação",render:a=>e.jsxs("div",{className:"admin-primary-cell",children:[e.jsx("strong",{children:a.action}),e.jsx("span",{children:a.resource})]})},{key:"actor",label:"Ator",render:a=>a.actor},{key:"date",label:"Data",render:a=>a.date}],xe=Re.map(a=>{const i=He[a.id];return{id:a.id,module:a.label,label:i.label,source:i.source,implementation:i.implementation,deployment:i.deployment,writeAdapter:i.writeAdapter,summary:i.summary}}),Oi=[{key:"module",label:"DomÃnio",render:a=>e.jsxs("div",{className:"admin-primary-cell",children:[e.jsx("strong",{children:a.module}),e.jsx("span",{children:a.label})]})},{key:"source",label:"Fonte",render:a=>a.source},{key:"implementation",label:"Implementação",render:a=>a.implementation},{key:"deployment",label:"Implantação",render:a=>e.jsx("span",{className:"admin-status-pill",children:a.deployment})},{key:"write-adapter",label:"Escrita",render:a=>a.writeAdapter}];function k(a){return typeof a=="number"&&Number.isFinite(a)?a:0}
1function ki(a){if(!a||typeof a!="object"||Array.isArray(a))return null;const i=a;return{roles:k(i.roles),capabilities:k(i.capabilities),activeProfiles:k(i.active_profiles),patients:k(i.patients),examResults:k(i.exam_results),releasedResults:k(i.released_results),auditEvents:k(i.audit_events),examBucketPrivate:i.exam_bucket_private===!0}}function Ri(a){return Array.isArray(a)?a.flatMap(i=>{if(!i||typeof i!="object"||Array.isArray(i))return[];const s=i,t=typeof s.id=="number"||typeof s.id=="string"?String(s.id):null;if(!t)return[];const o=typeof s.created_at=="string"?new Date(s.created_at):null;return[{id:t,actor:typeof s.actor_name=="string"&&s.actor_name.trim()?s.actor_name:"Sistema",action:typeof s.action=="string"?s.action:"evento",resource:[s.resource_type,s.resource_id].filter(r=>typeof r=="string"&&!!r).join(" · ")||"sistema",date:o&&!Number.isNaN(o.getTime())?new Intl.DateTimeFormat("pt-BR",{dateStyle:"short",timeStyle:"short"}).format(o):"â"}]}):[]}function _i(){const[a,i]=g.useState(null),[s,t]=g.useState([]),[o,r]=g.useState("loading");return g.useEffect(()=>{let n=!0;return Promise.all([I("amplivox_admin_system_health"),I("amplivox_admin_list_audit_events",{limit_rows:100})]).then(([l,x])=>{n&&(i(ki(l)),t(Ri(x)),r("ready"))}).catch(()=>{n&&r("error")}),()=>{n=!1}},[]),e.jsx(S,{capability:"system.manage",children:e.jsxs("div",{className:"admin-page",children:[e.jsx(w,{}),e.jsx(A,{eyebrow:"Operação",title:"Sistema",description:"Saúde do núcleo administrativo, segurança dos domÃnios e trilha de auditoria."}),e.jsxs("section",{className:"admin-panel admin-system-domains",children:[e.jsxs("div",{className:"admin-panel-heading",children:[e.jsxs("div",{children:[e.jsx("span",{children:"Contrato de implantação"}),e.jsx("h2",{children:"Estado dos domÃnios administrativos"})]}),e.jsx("span",{className:"admin-count-badge",children:xe.length})]}),e.jsx("div",{className:"admin-system-audit-note",children:"Esta matriz é declarativa e conservadora: `unverified` significa que o código existe, mas este build não possui evidência suficiente para afirmar que o backend correspondente foi aplicado no ambiente. Escrita exige também um adaptador real diferente de `none`."}),e.jsx(N,{rows:xe,columns:Oi,searchText:n=>`${n.module} ${n.label} ${n.source} ${n.implementation} ${n.deployment} ${n.writeAdapter} ${n.summary}`,emptyText:"Nenhum domÃnio administrativo registrado."})]}),o==="error"?e.jsx(b,{tone:"warning",title:"Diagnóstico persistente ainda não disponÃvel",children:e.jsx("p",{children:"As telas do Sistema estão prontas, mas as RPCs de diagnóstico precisam estar aplicadas no Supabase deste ambiente."})}):null,o==="loading"?e.jsx(b,{tone:"info",title:"Carregando saúde do sistema",children:e.jsx("p",{children:"Consultando contadores agregados e eventos administrativos protegidos."})}):null,o==="ready"&&a?e.jsxs(e.Fragment,{children:[e.jsxs("section",{className:"admin-system-health-grid","aria-label":"Saúde administrativa",children:[e.jsxs("article",{className:"admin-system-health-card",children:[e.jsx(R,{size:20,"aria-hidden":"true"}),e.jsx("strong",{children:"RBAC"}),e.jsxs("span",{children:[a.roles," papéis · ",a.capabilities," capabilities"]}),e.jsxs("small",{children:[a.activeProfiles," perfil(is) ativo(s)"]})]}),e.jsxs("article",{className:"admin-system-health-card",children:[e.jsx(la,{size:20,"aria-hidden":"true"}),e.jsx("strong",{children:"DomÃnio clÃnico"}),e.jsxs("span",{children:[a.patients," paciente(s) · ",a.examResults," resultado(s)"]}),e.jsxs("small",{children:[a.releasedResults," liberado(s) ao paciente"]})]}),e.jsxs("article",{className:"admin-system-health-card",children:[e.jsx(pa,{size:20,"aria-hidden":"true"}),e.jsx("strong",{children:"Auditoria"}),e.jsxs("span",{children:[a.auditEvents," evento(s) registrado(s)"]}),e.jsx("small",{children:"Trilha append-only para clientes comuns"})]}),e.jsxs("article",{className:"admin-system-health-card",children:[e.jsx(De,{size:20,"aria-hidden":"true"}),e.jsx("strong",{children:"Storage clÃnico"}),e.jsx("span",{children:a.examBucketPrivate?"Privado":"Atenção necessária"}),e.jsx("small",{children:"Bucket `amplivox-exams`"})]})]}),e.jsxs("section",{className:"admin-panel admin-system-audit",children:[e.jsxs("div",{className:"admin-panel-heading",children:[e.jsxs("div",{children:[e.jsx("span",{children:"Histórico"}),e.jsx("h2",{children:"Atividade administrativa"})]}),e.jsx("span",{className:"admin-count-badge",children:s.length})]}),e.jsx("div",{className:"admin-system-audit-note",children:"A listagem mostra ator, ação e recurso. O `context` JSON detalhado permanece fora desta superfÃcie para reduzir exposição desnecessária."}),e.jsx(N,{rows:s,columns:Ti,searchText:n=>`${n.actor} ${n.action} ${n.resource} ${n.date}`,emptyText:"Nenhum evento administrativo registrado."})]})]}):null]})})}const Ii=new Map(z.map(a=>[a.id,a.label]));function $i(a){return Array.isArray(a)?a.flatMap(i=>{if(!i||typeof i!="object"||Array.isArray(i))return[];const s=i;if(typeof s.user_id!="string")return[];const t=Array.isArray(s.roles)?s.roles.filter(x=>
1typeof x=="string"):[],o=typeof s.email=="string"?s.email:"",r=typeof s.display_name=="string"&&s.display_name.trim()?s.display_name.trim():o||"Usuário sem nome",n=s.is_active===!0,l=typeof s.created_at=="string"?new Intl.DateTimeFormat("pt-BR",{dateStyle:"short"}).format(new Date(s.created_at)):"â";return[{id:s.user_id,displayName:r,email:o,isActive:n,status:n?"Ativo":"Inativo",roles:t,createdAt:l}]}):[]}function zi(a){const i=a instanceof Error?a.message:"";return i.includes("AMPLIVOX_LAST_ADMIN_PROTECTED")?"Não é possÃvel remover ou desativar o último Administrador ativo.":i.includes("AMPLIVOX_SELF_DEACTIVATION_BLOCKED")?"Sua própria conta não pode ser desativada nesta operação.":i.includes("AMPLIVOX_UNKNOWN_ROLE")?"Um dos papéis selecionados não existe mais no registro administrativo.":i.includes("AMPLIVOX_FORBIDDEN")?"Sua sessão não possui users.manage para executar esta alteração.":"Não foi possÃvel atualizar o acesso. Nenhuma alteração parcial deve ser mantida."}function Di(){const[a,i]=g.useState([]),[s,t]=g.useState("loading"),[o,r]=g.useState(null),[n,l]=g.useState([]),[x,p]=g.useState(!0),[v,j]=g.useState(!1),[u,y]=g.useState(null),m=g.useCallback(async()=>{t("loading");try{const c=await I("amplivox_admin_list_users");i($i(c)),t("ready")}catch{t("error")}},[]);g.useEffect(()=>{m()},[m]);const d=g.useMemo(()=>new Set(z.flatMap(c=>c.capabilities)).size,[]),f=g.useMemo(()=>[{key:"user",label:"Usuário",render:c=>e.jsxs("div",{className:"admin-primary-cell",children:[e.jsx("strong",{children:c.displayName}),e.jsx("span",{children:c.email})]})},{key:"roles",label:"Papéis",render:c=>c.roles.length?c.roles.map($=>Ii.get($)??$).join(", "):"Sem papel"},{key:"status",label:"Status",render:c=>e.jsx("span",{className:"admin-status-pill",children:c.status})},{key:"created",label:"Criado em",render:c=>c.createdAt},{key:"actions",label:"Ações",render:c=>e.jsx("button",{className:"admin-table-action",type:"button",onClick:()=>{r(c),l([...c.roles]),p(c.isActive),y(null)},children:"Gerenciar"})}],[]);function M(c){l($=>$.includes(c)?$.filter(qe=>qe!==c):[...$,c])}async function Ee(){if(o){j(!0),y(null);try{await I("amplivox_admin_update_user_access",{target_user_id:o.id,role_ids:[...n],active:x}),y({tone:"success",message:`Acesso de ${o.displayName} atualizado e auditado.`}),r(null),await m()}catch(c){y({tone:"error",message:zi(c)})}finally{j(!1)}}}return e.jsx(S,{capability:"users.manage",children:e.jsxs("div",{className:"admin-page",children:[e.jsx(w,{}),e.jsx(A,{eyebrow:"Identidade e acesso",title:"Usuários",description:"Perfis, papéis e capabilities da plataforma Amplivox. Alterações de privilégio passam por RPCs transacionais e auditadas no banco.",action:e.jsx("button",{className:"admin-primary-button",type:"button",disabled:!0,children:"Adicionar usuário"})}),u?e.jsx(b,{tone:u.tone,title:u.tone==="success"?"Acesso atualizado":"Alteração recusada",children:e.jsx("p",{children:u.message})}
1):null,s==="error"?e.jsx(b,{tone:"warning",title:"Backend de usuários ainda não ativo neste ambiente",children:e.jsx("p",{children:"A interface está pronta, mas as migrations administrativas precisam estar aplicadas no projeto Supabase configurado para listar e alterar contas reais."})}):null,e.jsxs("div",{className:"admin-resource-schema-grid",children:[e.jsxs("section",{className:"admin-panel admin-resource-schema",children:[e.jsxs("div",{className:"admin-panel-heading",children:[e.jsxs("div",{children:[e.jsx("span",{children:"RBAC"}),e.jsx("h2",{children:"Papéis do sistema"})]}),e.jsx("span",{className:"admin-count-badge",children:z.length})]}),e.jsx("div",{className:"admin-role-grid",children:z.map(c=>e.jsxs("article",{className:"admin-role-card",children:[e.jsxs("div",{children:[e.jsx(xa,{size:18,"aria-hidden":"true"}),e.jsx("strong",{children:c.label})]}),e.jsx("p",{children:c.description}),e.jsxs("span",{children:[c.capabilities.length," capability(s)"]})]},c.id))})]}),e.jsxs("section",{className:"admin-panel admin-resource-schema",children:[e.jsxs("div",{className:"admin-panel-heading",children:[e.jsxs("div",{children:[e.jsx("span",{children:"Permissões"}),e.jsx("h2",{children:"Matriz de capabilities"})]}),e.jsx("span",{className:"admin-count-badge",children:d})]}),e.jsxs("div",{className:"admin-schema-block",children:[e.jsx("p",{children:"As capabilities controlam simultaneamente navegação, resources e operações no banco."}),e.jsx("div",{className:"admin-schema-tags",children:[...new Set(z.flatMap(c=>c.capabilities))].sort().map(c=>e.jsxs("span",{children:[e.jsx(R,{size:12,"aria-hidden":"true"})," ",c]},c))})]})]})]}),o?e.jsxs("section",{className:"admin-panel admin-user-access-editor","aria-labelledby":"admin-user-access-title",children:[e.jsxs("div",{className:"admin-panel-heading",children:[e.jsxs("div",{children:[e.jsx("span",{children:"Gerenciar acesso"}),e.jsx("h2",{id:"admin-user-access-title",children:o.displayName})]}),e.jsx("button",{className:"admin-table-action",type:"button",onClick:()=>r(null),children:"Fechar"})]}),e.jsxs("div",{className:"admin-user-access-body",children:[e.jsxs("label",{className:"admin-user-active-toggle",children:[e.jsx("input",{type:"checkbox",checked:x,onChange:c=>p(c.target.checked)}),e.jsx("span",{children:"Conta ativa"})]}),e.jsxs("fieldset",{children:[e.jsx("legend",{children:"Papéis"}),e.jsx("div",{className:"admin-user-role-options",children:z.map(c=>e.jsxs("label",{children:[e.jsx("input",{type:"checkbox",checked:n.includes(c.id),onChange:()=>M(c.id)}),e.jsxs("span",{children:[e.jsx("strong",{children:c.label}),e.jsx("small",{children:c.description})]})]},c.id))})]}),e.jsxs("div",{className:"admin-user-access-actions",children:[e.jsxs("button",{className:"admin-primary-button",type:"button",disabled:v,onClick:()=>void Ee(),children:[e.jsx(oa,{size:15,"aria-hidden":"true"})," ",v?"Salvando...":"Salvar acesso"]}),e.jsx("small",{children:"A operação é transacional. O último Administrador ativo não pode ser removido ou desativado."})]})]})]}):null,s==="loading"?e.jsx(b,{tone:"info",title:"Carregando usuários",children:e.jsx("p",{children:"Consultando o contexto administrativo protegido."})}):null,s==="ready"?e.jsx(N,{rows:a,columns:f,searchText:c=>`${c.displayName} ${c.email} ${c.roles.join(" ")} ${c.status}`,emptyText:"Nenhum usuário administrativo retornado pelo Supabase."}):null]})})}const Mi=[{key:"title",label:"TÃtulo",render:a=>e.jsxs("div",{className:"admin-primary-cell",children:[e.jsx("strong",{children:a.title}),e.jsx("span",{children:a.detail})]})},{key:"type",label:"Tipo",render:a=>a.type},{key:"status",label:"Status",render:a=>e.jsx("span",{className:"admin-status-pill",children:a.status})}];function Li(a){return a.map(i=>({id:i.id,title:i.plural,type:i.sensitive?"Recurso protegido":"Recurso",status:"Registrado",detail:`${i.fields.length} campos · ${i.taxonomies.length} taxonomias · ${i.statuses.length} status`}))}function Bi(a,i,s){return i.length?Li(i):s.map(t=>({id:`${a}-${t.toLocaleLowerCase("pt-BR").replaceAll(" ","-")}`,title:t,type:"Ferramenta do módulo",status:"Registrado",detail
1:"Estrutura preparada para persistência e permissões do módulo."}))}function Fi({section:a}){const i=_e(a),s=oe();if(!i||i.id==="dashboard")return e.jsx("div",{className:"admin-page",children:e.jsx(A,{title:"Módulo não encontrado",description:"O módulo solicitado não está registrado no núcleo administrativo."})});if(i.id==="usuarios")return e.jsx(Di,{});if(i.id==="sistema")return e.jsx(_i,{});if(i.id==="midia")return e.jsx(ui,{});if(i.id==="configuracoes")return e.jsx(mi,{});if(i.id==="integracoes")return e.jsx(pi,{});if(i.id==="seo")return e.jsx(Ei,{});if(i.id==="unidades")return e.jsx(qi,{});if(i.id==="parceiros")return e.jsx(Pi,{});if(i.id==="conteudo")return e.jsx(ri,{});if(i.id==="produtos")return e.jsx(di,{});if(i.id==="exames")return e.jsx(Je,{});const t=Ie(i.id).filter(n=>te(s.capabilities,Me(n))),o=Bi(i.id,t,i.resources),r=t.length?t.map(n=>({id:n.id,label:n.plural,href:`${i.href}${n.id}/`})):i.resources.map(n=>({id:n,label:n,href:`${i.href}#${encodeURIComponent(n)}`}));return e.jsx(S,{capability:i.capability,children:e.jsxs("div",{className:"admin-page",children:[e.jsx(w,{}),e.jsx(A,{eyebrow:"Módulo",title:i.label,description:i.description,action:e.jsxs("button",{className:"admin-primary-button",type:"button",disabled:!0,children:[e.jsx(na,{size:16,"aria-hidden":"true"})," Adicionar novo"]})}),e.jsx(b,{tone:"info",title:"Módulo registrado no núcleo",children:e.jsx("p",{children:"Navegação, permissões e padrão de administração já existem. O CRUD será ativado quando a camada persistente especÃfica deste domÃnio for conectada."})}),e.jsxs("div",{className:"admin-subnav","aria-label":`Recursos de ${i.label}`,children:[e.jsx("a",{href:i.href,className:"is-current",children:"Todos"}),r.map(n=>e.jsx("a",{href:n.href,children:n.label},n.id))]}),e.jsx(N,{rows:o,columns:Mi,searchText:n=>`${n.title} ${n.type} ${n.status} ${n.detail}`})]})})}function xs(){const{section:a}=$e.useParams();return e.jsx(Fi,{section:a})}export{xs as component};
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.