⚠️ Esta é apenas uma estimativa orientativa. As autoridades aduaneiras, operadores e agentes determinam a classificação final, direito, imposto, taxas e admissibilidade.
`; } async function init(){ const selCountry = $('pp-country-select'); const selOrigin = $('pp-origin-select'); if(selCountry){ selCountry.innerHTML = ''; const sorted = countryList.slice().sort((a,b)=>a[1].localeCompare(b[1])); sorted.forEach(([slug,name])=> selCountry.append(new Option(name, slug))); selCountry.value = countryParam; selCountry.addEventListener('change', e => renderCountry(e.target.value, true)); } if(selOrigin){ selOrigin.innerHTML = ''; selOrigin.append(new Option('Qualquer / NMF', '')); countryList.slice().sort((a,b)=>a[1].localeCompare(b[1])).forEach(([slug,name])=> selOrigin.append(new Option(name, slug))); selOrigin.value = originParam; selOrigin.addEventListener('change', e => renderOrigin(e.target.value, true)); } ['hs_origin','hs_dest'].forEach(id=>{ const el = $(id); if(el) el.addEventListener('input',()=>{el.dataset.touched='1';}); }); try{ DEMINIMIS_MAP = await loadDeminimisSheet(); }catch(e){ DEMINIMIS_MAP = {}; } try{ CUSTOMS_DATA = await loadCustomsFromSheet(); }catch(e){ CUSTOMS_DATA = {countries:{}}; } try{ TARIFF_RULES = await loadTariffsFromSheet(); }catch(e){ TARIFF_RULES = []; } await loadHS(); renderCountry(countryParam, false); renderOrigin(originParam, false); const hsInput = $('pp-hs-search'); if(hsInput) hsInput.addEventListener('input', computeHSRates); } const ddp = $('pp-ddp'); const ddu = $('pp-ddu'); const ddText = $('pp-dd-text'); function setMode(mode){ if(!ddp || !ddu || !ddText) return; if(mode==='ddp'){ ddp.classList.add('pp-btn-blue'); ddu.classList.remove('pp-btn-blue'); ddText.innerHTML = '
DDP: o remetente paga adiantado os direitos/impostos quando suportado. Isto pode reduzir recusas de entrega e cobranças surpresa para destinatários.
DAP/DDU: o destinatário paga direitos/impostos na entrega. O custo inicial é menor, mas há mais risco de atrasos, recusas ou contacto extra do operador.
A calcular estimativa…
'; const data = await loadAllData(); const t = tariffFor(origin, dest, hs6, data.tariffs); const adval = (t && t.adval!=null) ? Number(t.adval) : null; const specPerKg = parseSpecificPerKg(t && t.specific); const dm = deMinimis(dest, data.dm); const vatPct = vatPercent(dest, data.vat); const declared = Number(valStr||0); const shipping = 0, insurance = 0; const customsValue = (basis === 'CIF') ? (declared + shipping + insurance) : declared; let duty = 0; if(!(declared 0 ? specPerKg * Number(wtStr||0) : 0); let vat = 0; if(!(declared