(function(){
function classify(F,C){const X=C,Y=F;if(X>=50&&Y>=50)return Y>=X?'Propósito':'Acolhimento';if(X<50&&Y>=50)return(Y+X)<=100?'Aprendizado':'Prazer';if(X<50&&Y<50)return Y<=X?'Autoridade':'Resultado';return(Y+X)>=100?'Ordem':'Segurança';}
function extractFECA(line){const part=line.split('>')[0];const nums=part.match(/\d+(?:\.\d+)?/g);if(!nums||nums.length<4)return null;for(let i=0;i<=nums.length-4;i++){const[F,E,C,A]=nums.slice(i,i+4).map(Number);if(Math.abs(F+E-100)<=2&&Math.abs(C+A-100)<=2&&F>=0&&F<=100&&E>=0&&E<=100&&C>=0&&C<=100&&A>=0&&A<=100)return{F:Math.round(F*100)/100,C:Math.round(C*100)/100};}return null;}
function same(a,b){if(!a||!b)return false;return Math.abs(a.F-b.F)<=0.1&&Math.abs(a.C-b.C)<=0.1;}
var lastR=null,riskData={critico:[],relevante:[],latente:[]};
const SC=window.QSC,QD=window.QQD,AXIS=window.QAXIS,QP=window.QQP,EL=window.QEL,COMB=window.QCOMB,SIGNAL=window.QSIGNAL,DISP=window.QDISP,QINSIGHTS=window.QINSIGHTS;
const ELEM_LABELS={comportamentos:'Comportamentos comuns',crencas:'Crenças comuns',valores:'Recompensa e punição',estrutura:'Estrutura e cargos',lideranca:'Liderança e comunicação'};
function run(){
const raw=document.getElementById('qInp').value.trim();
const errEl=document.getElementById('qErr'),out=document.getElementById('qOut');
document.getElementById('qAna').innerHTML='';errEl.textContent='';out.innerHTML='';
document.getElementById('qBtnA').disabled=true;lastR=null;
if(!raw)return;
const lines=raw.split('\n').map(l=>l.trim()).filter(Boolean);
const sCounts={};Object.keys(SC).forEach(s=>sCounts[s]=0);
let prev=null,total=0,skip=0,sF=0,sC=0;
lines.forEach(line=>{const feca=extractFECA(line);if(!feca){skip++;return;}if(same(feca,prev)){skip++;return;}sCounts[classify(feca.F,feca.C)]++;sF+=feca.F;sC+=feca.C;total++;prev=feca;});
if(total===0){out.innerHTML='
Nenhuma coordenada válida.
';return;}
const ss=Object.entries(sCounts).sort((a,b)=>b[1]-a[1]);
const maxS=ss[0][1]||1;
const sRows=ss.map(([n,c],i)=>{const p=((c/total)*100).toFixed(1);const col=SC[n];return``;}).join('');
const qd=QD.map(q=>({...q,count:q.styles.reduce((s,st)=>s+sCounts[st],0)})).sort((a,b)=>b.count-a.count);
const maxQ=qd[0].count||1;
const qRows=qd.map((q,i)=>{const p=((q.count/total)*100).toFixed(1);return`${i+1}${q.name}${q.count}×${p}% `;}).join('');
const aF=sF/total,aE=100-aF,aC=sC/total,aA=100-aC;
const axHTML=`FlexívelEstável
${aF.toFixed(1)}%${aE.toFixed(1)}%
ColaborativoAutônomo
${aC.toFixed(1)}%${aA.toFixed(1)}%
`;
out.innerHTML=`Estilos
${sRows}
Quadrantes
${qRows}
Eixos
${axHTML}${total} ponto${total!==1?'s':''} classificado${total!==1?'s':''}${skip?' · '+skip+' ignorada'+(skip!==1?'s':''):''}
`;
lastR={sCounts,ss,qd,aF,aE,aC,aA,total};
document.getElementById('qBtnA').disabled=false;
}
function buildHeadline(ss,qd,aF,aE,aC,aA,total){
const s1pct=(ss[0][1]/total)*100,s2pct=(ss[1][1]/total)*100;
const base=ss[0][0];
const traco=s2pct>=20&&Math.abs(s1pct-s2pct)<20?ss[1][0]:null;
const q1p=(qd[0].count/total)*100,q2p=(qd[1].count/total)*100;
const quadStr=q2p>=30?`${qd[0].name} e ${qd[1].name}`:`${qd[0].name}`;
const feGap=Math.abs(aF-aE),caGap=Math.abs(aC-aA);
let feStr,caStr;
if(feGap<10)feStr=`${aF.toFixed(0)}% flexível e ${aE.toFixed(0)}% estável (equilíbrio)`;
else if(aF>aE)feStr=`${aF.toFixed(0)}% flexível`;
else feStr=`${aE.toFixed(0)}% estável`;
if(caGap<10)caStr=`${aC.toFixed(0)}% colaborativa e ${aA.toFixed(0)}% autônoma (equilíbrio)`;
else if(aC>aA)caStr=`${aC.toFixed(0)}% colaborativa`;
else caStr=`${aA.toFixed(0)}% autônoma`;
const tracoStr=traco?`, com traços de ${traco}`:'';
return`Uma cultura baseada em ${base}${tracoStr}, com características marcantes no quadrante ${quadStr} — ${feStr} e ${caStr}.
`;
}
function buildElements(ss,total){
const pcts=ss.map(([n,c])=>({n,p:(c/total)*100}));
const primary=pcts[0];
const secondary=pcts[1].p>=20?pcts[1]:null;
const tertiary=pcts[2].p>=20?pcts[2]:null;
const noneAbove20=pcts[0].p<20;
let html='';
Object.keys(ELEM_LABELS).forEach(key=>{
html+=`${ELEM_LABELS[key]}
`;
if(noneAbove20){
html+=`
`;
} else {
const colP=SC[primary.n];
html+=`
▶ ${primary.n} ${primary.p.toFixed(0)}%
${EL[key][primary.n]||''}
`;
if(secondary){const colS=SC[secondary.n];html+=`
▶ ${secondary.n} ${secondary.p.toFixed(0)}%
${EL[key][secondary.n]||''}
`;}
}
html+='
';
});
if(!noneAbove20&&secondary){
const ck=[primary.n,secondary.n].sort().join('+');
const combText=COMB[ck];
if(combText)html+=`A combinação ${primary.n} + ${secondary.n}
${combText}
`;
if(tertiary)html+=`↳ Sinal adicional: ${tertiary.n} (${tertiary.p.toFixed(0)}%)
${SIGNAL[tertiary.n]||''}
`;
}
return html;
}
function buildAnalysis(){
if(!lastR)return;
const{sCounts,ss,qd,aF,aE,aC,aA,total}=lastR;
const fe=Math.abs(aF-aE)<10?'B':(aF>aE?'F':'E');
const ca=Math.abs(aC-aA)<10?'B':(aC>aA?'C':'A');
const axisText=AXIS[`${fe}_${ca}`]||'';
const q1=qd[0],q2=qd[1];
const q2p=(q2.count/total)*100;
let quadKey=q1.name;
if(q2p>=30){const k=[q1.name,q2.name].sort().join('+');if(QP[k])quadKey=k;}
const quadText=QP[quadKey]||QP[q1.name];
const headline=buildHeadline(ss,qd,aF,aE,aC,aA,total);
const perfil=`${axisText} ${quadText}`.trim();
const elemsHTML=buildElements(ss,total);
const riskHTML=buildRiskHTML();
document.getElementById('qAna').innerHTML=`Análise de cultura
${headline}
${perfil}
${elemsHTML}${riskHTML}
`;
}
function buildRiskHTML(){
if(!lastR)return'';
const{sCounts,total}=lastR;
const pcts={};Object.keys(sCounts).forEach(s=>{pcts[s]=(sCounts[s]/total)*100;});
const scored=[];
QINSIGHTS.forEach(ins=>{const w=ins.w||{};let sc=0,ws=0;Object.keys(pcts).forEach(s=>{const wt=w[s]||0;sc+=wt*pcts[s];if(wt>0)ws+=wt;});if(sc>0)scored.push({...ins,score:sc,wsum:ws});});
scored.sort((a,b)=>b.score!==a.score?b.score-a.score:b.wsum-a.wsum);
const critAll=scored.slice(0,5),relAll=scored.slice(5,10),latAll=scored.slice(10,20);
function norm(sc,arr,lo,hi){if(!arr.length)return lo;const top=arr[0].score,bot=arr[arr.length-1].score;if(top===bot)return Math.round((lo+hi)/2);return Math.round(lo+(sc-bot)/(top-bot)*(hi-lo));}
critAll.forEach(i=>{i.risk='critico';i.norm=norm(i.score,critAll,88,100);});
relAll.forEach(i=>{i.risk='relevante';i.norm=norm(i.score,relAll,52,72);});
latAll.forEach(i=>{i.risk='latente';i.norm=norm(i.score,latAll,10,38);});
riskData={critico:critAll,relevante:relAll,latente:latAll};
return`Riscos Culturais Identificados
${critAll.length} riscos identificados
${renderCards(critAll)}
`;
}
function renderCards(items){
if(!items.length)return'Nenhum resultado nesta categoria.
';
return items.map(ins=>{
const color=ins.risk==='critico'?'#f91069':ins.risk==='relevante'?'#f97316':'#6b7280';
const label=ins.risk==='critico'?'Risco Crítico':ins.risk==='relevante'?'Risco Relevante':'Risco Latente';
return`${buildGauge(ins.norm,color)}
${ins.desc}
`;
}).join('');
}
function buildGauge(score,color){
const pct=Math.min(score,100)/100,r=22,cx=32,cy=28;
const circ=2*Math.PI*r,arc=Math.PI*r,fill=pct*arc,gap=circ-fill;
const angle=Math.PI*(1+pct),nr=r-5;
const nx=(cx+nr*Math.cos(angle)).toFixed(2),ny=(cy+nr*Math.sin(angle)).toFixed(2);
const rot=`rotate(180 ${cx} ${cy})`;
return``;
}
window.qRun=run;
window.qBuildAnalysis=buildAnalysis;
window.qFilterRisk=function(tier,btn){
document.querySelectorAll('.q-ftab').forEach(t=>t.classList.remove('active'));
btn.classList.add('active');
const items=riskData[tier]||[];
document.getElementById('qRiskCount').textContent=items.length+' riscos identificados';
document.getElementById('qRiskCards').innerHTML=renderCards(items);
};
window.qClear=function(){
document.getElementById('qInp').value='';document.getElementById('qErr').textContent='';
document.getElementById('qOut').innerHTML='';document.getElementById('qAna').innerHTML='';
document.getElementById('qBtnA').disabled=true;lastR=null;
};
document.addEventListener('DOMContentLoaded',function(){
const inp=document.getElementById('qInp');
if(inp)inp.addEventListener('keydown',function(e){if(e.key==='Enter'&&e.ctrlKey)run();});
});
})();