1function v(r,t,a){const o=r/a,n=r*t,c=o*t,e=o+n,l=o+c,i=a*(n+c)/2,s=r+i;return{parcelaInicial:e,parcelaFinal:l,valorTotal:s,jurosTotal:i}}function b(r,t,a){const o=Math.pow(1+t,a),n=r*(t*o)/(o-1),c=n*a,e=c-r;return{parcela:n,valorTotal:c,jurosTotal:e}}function j(r,t,a,o){const n=_(),c=r*(n/100),e=r+c,l=x()/100,i=I()/100,s=P(),u=v(e,t,a),m=b(e,t,a),f=o*l,g=e*i,p=m.parcela+f+g+s,d=u.parcelaInicial+f+g+s,S=e/a*(1+t)+e/a*i+f+s;return{parcelaSac:{inicial:d,final:S},parcelaPrice:p,valorTotal:{sac:u.valorTotal,price:m.valorTotal},jurosTotal:{sac:u.jurosTotal,price:m.jurosTotal},taxaJurosEfetiva:t}}function h(){try{const r=localStorage.getItem("libra_simulation_config");if(r){const t=JSON.parse(r);return t.juros?t.juros/100:.0119}}catch(r){console.warn("Erro ao obter configuração de juros:",r)}return .0119}function _(){try{const r=localStorage.getItem("libra_simulation_config");if(r)return JSON.parse(r).custoOperacional||11}catch(r){console.warn("Erro ao obter configuração de custo operacional:",r)}return 11}function x(){try{const r=localStorage.getItem("libra_simulation_config");if(r)return JSON.parse(r).dfiPercentual||.014}catch(r){console.warn("Erro ao obter percentual DFI:",r)}return .014}function I(){try{const r=localStorage.getItem("libra_simulation_config");if(r)return JSON.parse(r).prestamistaPercentual||.035}catch(r){console.warn("Erro ao obter percentual prestamista:",r)}return .035}function P(){try{const r=localStorage.getItem("libra_simulation_config");if(r)return JSON.parse(r).taxaAdministrativa||40}catch(r){console.warn("Erro ao obter taxa administrativa:",r)}return 40}function T(){try{const r=localStorage.getItem("libra_simulation_config");if(r){const t=JSON.parse(r);return{min:t.valorMinimo||1e5,max:t.valorMaximo||5e6}}}catch(r){console.warn("Erro ao obter limites de valor:",r)}return{min:1e5,max:5e6}}function O(){try{const r=localStorage.getItem("libra_simulation_config");if(r){const t=JSON.parse(r);return{min:t.parcelasMin||36,max:t.parcelasMax||180}}}catch(r){console.warn("Erro ao obter limites de parcelas:",r)}return{min:36,max:180}}function w(r,t){if(r<=0)return{valid:!1,error:"Valor do empréstimo deve ser maior que zero"};const a=T();if(r<a.min||r>a.max)return{valid:!1,error:`Valor do empréstimo deve estar entre R$ ${a.min.toLocaleString()} e R$ ${a.max.toLocaleString()}`};const o=O();return t<o.min||t>o.max?{valid:!1,error:`Número de parcelas deve estar entre ${o.min} e ${o.max} meses`}:{valid:!0}}export{j as calculateLoan,_ as getCustoOperacional,x as getDfiPercentual,h as getInterestRate,O as getParcelasLimits,I as getPrestamistaPercentual,P as getTaxaAdministrativa,T as getValorLimits,w as validateLoanParameters};
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.