Transporte empresarial

Bom para os colaboradores, ótimo para a empresa

Já pensou em aumentar significativamente a produtividade da sua empresa?

E ainda oferecer conforto todos os dias aos seus colaboradores?

como funciona o transporte empresarial?

Rotas inteligentes pensadas para atender cada colaborador

O transporte empresarial é um tipo de fretamento contínuo. É o transporte de funcionários fornecido a empresas que desejam reduzir os custos com vale-transporte ou que precisam oferecer um meio de deslocamento aos colaboradores localizados em regiões afastadas ou de difícil acesso.

Embarque ponto a ponto ou em lugares estratégicos

Em vez de depender de serviços de transporte público, que são imprevisíveis e raramente cobrem todas as regiões, disponha de uma van ou de um ônibus particular que atue no horário que sua empresa demanda.

O motorista seguirá o itinerário programado para melhor atender a sua agenda, garantindo serviços de fretamento confiáveis do começo ao fim, além de redução de custos.

as comodidades que DESEJA No seu transporte

A Transleles é uma empresa de ônibus reconhecida pelo cuidado com a sua frota.
Todos os veículos que estão disponíveis para aluguel e transporte empresarial possuem poltronas acolchoadas e reclináveis.
Grande parte dos nossos veículos são equipados com banheiro, ar-condicionado, frigobar e aparelhos multimídia, como monitor LCD e som.
Veja qual a categoria de veículo que melhor irá atender às necessidades de transporte da sua viagem.
Ar-condicionado
poltronas acolchoadas
poltronas reclináveis
monitor LCD
sistema de som
banheiro
frigobar
e muito +

Por que confiar em nós para realizar o transporte de funcionários na sua empresa?

Dispomos de uma enorme variedade de ônibus, micro ônibus e vans que consistentemente se classificam no topo dos exames de segurança. Os veículos são preventivamente revisados e os motoristas semestralmente treinados.
Dessa forma, entregar um serviço seguro e assíduo é parte do nosso cotidiano.

Venha nos visitar e conheça a nossa infraestrutura  que vai de oficinas de lanternagem e pintura a posto de abastecimento, de escritório comercial a salas de treinamento. Temos prazer em receber nossos parceiros em uma de nossas garagens.

Clique e veja a localização de nossas unidades.

Já são mais de 21 anos de estrada​

Com vasta experiência no setor, a Transleles aprimorou seus conhecimentos e métodos utilizados na execução de seus serviços de transporte.
Já lidamos com os mais variados projetos e estamos prontos para atender demandas de grandes empresas.
Entre em contato e nós formularemos uma proposta com o melhor custo benefício.

Veja quem já confiou nos nossos serviços de transporte empresarial

cotação de serviços de transporte empresarial

agende uma visita, tire suas dúvidas ou simplesmente deixe suas informações para que retornemos o contato.

Seu caso é de itinerários especiais, regiões afastadas ou demandas específicas?

Estamos disponíveis  para atendimento por ligação 24h  todos os dias para responder às suas perguntas relacionadas ao fretamento e ajudá-lo a montar a frota ideal para o seu transporte.

Precisa de ajuda para decidir?

clique e ligue agora.
atendimento 24h
Ir para o conteúdo var GOOGLE_ATTRIBUTION_URL = 'https://maps.gstatic.com/mapfiles/api-3/images/powered-by-google-on-white3.png'; var BASE_LOCATION = { latitude: -16.2535991668701, longitude: -47.9500007629395 }; var googlePlacesLibraryPromise = null; var QUALIFICATION_FIELD_NAME = 'form_fields[qualificacao_origem]'; var FIELD_CONFIGURATIONS = [ { name: 'form_fields[Origem]', key: 'origem', label: 'Origem' }, { name: 'form_fields[Destino]', key: 'destino', label: 'Destino' }, { name: 'form_fields[endereco]', key: 'endereco', label: 'Localização do atendimento' } ]; var REGIONS_BY_STATE = { AC: 'Norte', AL: 'Nordeste', AM: 'Norte', AP: 'Norte', BA: 'Nordeste', CE: 'Nordeste', DF: 'Centro-Oeste', ES: 'Sudeste', GO: 'Centro-Oeste', MA: 'Nordeste', MG: 'Sudeste', MS: 'Centro-Oeste', MT: 'Centro-Oeste', PA: 'Norte', PB: 'Nordeste', PE: 'Nordeste', PI: 'Nordeste', PR: 'Sul', RJ: 'Sudeste', RN: 'Nordeste', RO: 'Norte', RR: 'Norte', RS: 'Sul', SC: 'Sul', SE: 'Nordeste', SP: 'Sudeste', TO: 'Norte' };function normalizeText(value) { var text = String(value || '').toLowerCase().trim();if (typeof text.normalize === 'function') { text = text.normalize('NFD').replace(/[\u0300-\u036f]/g, ''); }return text.replace(/[–—-]/g, ' ').replace(/\s+/g, ' '); }var SEARCHABLE_MUNICIPALITIES = MUNICIPALITIES.map(function (municipality) { var name = municipality[0]; var state = municipality[1]; var id = municipality[2]; var distanceKm = Number(municipality[3]); var value = name + ' — ' + state;return { id: id, name: name, state: state, distanceKm: distanceKm, region: REGIONS_BY_STATE[state] || '', source: 'IBGE', value: value, normalizedName: normalizeText(name), searchKey: normalizeText(name + ' ' + state) }; }); var MUNICIPALITY_BY_VALUE = {};SEARCHABLE_MUNICIPALITIES.forEach(function (municipality) { MUNICIPALITY_BY_VALUE[normalizeText(municipality.value)] = municipality; });function findMatches(query) { var normalizedQuery = normalizeText(query);if (normalizedQuery.length < MIN_QUERY_LENGTH) { return []; }var tokens = normalizedQuery.split(' ');return SEARCHABLE_MUNICIPALITIES.filter(function (municipality) { return tokens.every(function (token) { return municipality.searchKey.indexOf(token) !== -1; }); }) .sort(function (left, right) { var leftScore = left.normalizedName.indexOf(normalizedQuery) === 0 ? 0 : 1; var rightScore = right.normalizedName.indexOf(normalizedQuery) === 0 ? 0 : 1;if (leftScore !== rightScore) { return leftScore - rightScore; }return left.value.localeCompare(right.value, 'pt-BR'); }) .slice(0, MAX_SUGGESTIONS); }function ensureDatalist() { var datalist = document.getElementById(DATALIST_ID);if (datalist) { return datalist; }datalist = document.createElement('datalist'); datalist.id = DATALIST_ID; document.body.appendChild(datalist); return datalist; }function replaceSuggestions(datalist, matches) { while (datalist.firstChild) { datalist.removeChild(datalist.firstChild); }matches.forEach(function (municipality) { var option = document.createElement('option'); option.value = municipality.value; option.label = municipality.name + ', ' + municipality.state; datalist.appendChild(option); }); }function ensureHiddenField(form, name) { var field = form.querySelector('[name="' + name + '"]');if (field) { return field; }field = document.createElement('input'); field.type = 'hidden'; field.name = name; form.appendChild(field); return field; }function writeMetadata(form, configuration, location) { var prefix = 'form_fields[' + configuration.key; var values = { '_ibge_id]': location && location.id ? String(location.id) : '', '_cidade]': location && location.name ? location.name : '', '_uf]': location && location.state ? location.state : '', '_regiao]': location && location.region ? location.region : '', '_google_place_id]': location && location.googlePlaceId ? location.googlePlaceId : '', '_latitude]': location && Number.isFinite(location.latitude) ? String(location.latitude) : '', '_longitude]': location && Number.isFinite(location.longitude) ? String(location.longitude) : '', '_endereco_formatado]': location && location.formattedAddress ? location.formattedAddress : '', '_distancia_base_km]': location && Number.isFinite(location.distanceKm) ? String(Math.round(location.distanceKm)) : '', '_fonte]': location && location.source ? location.source : '' };Object.keys(values).forEach(function (suffix) { ensureHiddenField(form, prefix + suffix).value = values[suffix]; }); }function calculateDistanceKm(latitude, longitude) { var earthRadiusKm = 6371; var toRadians = Math.PI / 180; var latitudeDelta = (latitude - BASE_LOCATION.latitude) * toRadians; var longitudeDelta = (longitude - BASE_LOCATION.longitude) * toRadians; var startLatitude = BASE_LOCATION.latitude * toRadians; var endLatitude = latitude * toRadians; var haversine = Math.sin(latitudeDelta / 2) * Math.sin(latitudeDelta / 2) + Math.cos(startLatitude) * Math.cos(endLatitude) * Math.sin(longitudeDelta / 2) * Math.sin(longitudeDelta / 2);return earthRadiusKm * 2 * Math.atan2(Math.sqrt(haversine), Math.sqrt(1 - haversine)); }function isGoogleApiKeyConfigured() { return ( GOOGLE_PLACES_API_KEY && GOOGLE_PLACES_API_KEY.indexOf('__TRANSLELES_') !== 0 ); }function loadGooglePlacesLibrary() { if (googlePlacesLibraryPromise) { return googlePlacesLibraryPromise; }googlePlacesLibraryPromise = new Promise(function (resolve, reject) { function importPlacesLibrary(attempt) { if ( !window.google || !window.google.maps || typeof window.google.maps.importLibrary !== 'function' ) { if (attempt < 100) { window.setTimeout(function () { importPlacesLibrary(attempt + 1); }, 50); return; }reject(new Error('Google Maps não foi carregado.')); return; }window.google.maps.importLibrary('places').then(resolve).catch(reject); }if ( window.google && window.google.maps && typeof window.google.maps.importLibrary === 'function' ) { importPlacesLibrary(0); return; }var existingScript = document.getElementById(GOOGLE_SCRIPT_ID);if (existingScript) { importPlacesLibrary(0); existingScript.addEventListener('error', reject, { once: true }); return; }var script = document.createElement('script'); script.id = GOOGLE_SCRIPT_ID; script.async = true; script.defer = true; script.src = 'https://maps.googleapis.com/maps/api/js?key=' + encodeURIComponent(GOOGLE_PLACES_API_KEY) + '&loading=async&libraries=places&v=weekly&language=pt-BR®ion=BR'; script.addEventListener('load', function () { importPlacesLibrary(0); }, { once: true }); script.addEventListener('error', function () { reject(new Error('Não foi possível carregar o Google Places.')); }, { once: true }); document.head.appendChild(script); });return googlePlacesLibraryPromise; }function getAddressComponent(addressComponents, types) { var component = (addressComponents || []).find(function (item) { return types.some(function (type) { return Array.isArray(item.types) && item.types.indexOf(type) !== -1; }); });return component || null; }function placeToLocation(place, predictionText, placeId) { var addressComponents = place.addressComponents || []; var cityComponent = getAddressComponent(addressComponents, [ 'locality', 'administrative_area_level_2', 'sublocality' ]); var stateComponent = getAddressComponent(addressComponents, [ 'administrative_area_level_1' ]); var latitude = place.location && typeof place.location.lat === 'function' ? Number(place.location.lat()) : Number(place.location && place.location.lat); var longitude = place.location && typeof place.location.lng === 'function' ? Number(place.location.lng()) : Number(place.location && place.location.lng); var state = stateComponent ? String(stateComponent.shortText || stateComponent.longText || '') : '';return { googlePlaceId: place.id || placeId || '', name: cityComponent ? String(cityComponent.longText || '') : '', state: state, region: REGIONS_BY_STATE[state] || '', latitude: latitude, longitude: longitude, distanceKm: Number.isFinite(latitude) && Number.isFinite(longitude) ? calculateDistanceKm(latitude, longitude) : NaN, formattedAddress: place.formattedAddress || predictionText || '', source: 'Google Places' }; }function classifyOrigin(municipality, rawValue) { if (!municipality) { return { kind: 'manual', value: String(rawValue || '').trim() ? 'Local específico informado — confirmar cidade e distância manualmente' : 'Origem não classificada — realizar análise manual' }; }if (!Number.isFinite(municipality.distanceKm)) { return { kind: 'manual', value: 'Origem selecionada — confirmar distância manualmente' }; }if (municipality.distanceKm > 300) { return { kind: 'partner', value: 'Origem superior a 300 km — avaliar atendimento por parceiro', title: 'Origem a mais de 300 km da Transleles', message: 'Esta origem fica a mais de 300 km da nossa base, em Luziânia. O deslocamento pode elevar o custo ou inviabilizar o atendimento com frota própria. Envie sua solicitação: nossa equipe avaliará a rota e poderá buscar uma empresa parceira na sua região.' }; }if (municipality.distanceKm >= 250) { return { kind: 'review', value: 'Origem próxima ao limite de 300 km — realizar análise manual', title: 'Origem próxima ao limite de atendimento', message: 'A origem está próxima do limite de 300 km. Nossa equipe confirmará a rota e os custos antes de indicar a melhor forma de atendimento.' }; }return { kind: 'priority', value: 'Origem dentro da área prioritária de atendimento' }; }function ensureOriginNotice(form, input, formIndex) { var fieldGroup = input.closest('.elementor-field-group') || input.parentElement; var destinationInput; var destinationGroup; var wrapper; var row; var notice; var title; var message;if (!fieldGroup) { return null; }notice = form.querySelector('.transleles-origin-notice');if (notice) { return notice; }wrapper = fieldGroup.parentElement;if (!wrapper) { return null; }destinationInput = form.querySelector('[name="form_fields[Destino]"]'); destinationGroup = destinationInput ? destinationInput.closest('.elementor-field-group') : null; row = document.createElement('div'); notice = document.createElement('div'); title = document.createElement('strong'); message = document.createElement('span'); row.className = 'elementor-field-group elementor-column elementor-col-100 transleles-origin-notice-row'; row.hidden = true; notice.id = 'transleles-origin-notice-' + String(formIndex); notice.className = 'transleles-origin-notice'; notice.setAttribute('role', 'status'); notice.setAttribute('aria-live', 'polite'); notice.appendChild(title); notice.appendChild(message); notice.__translelesTitle = title; notice.__translelesMessage = message; notice.__translelesRow = row; row.appendChild(notice); wrapper.insertBefore( row, destinationGroup ? destinationGroup.nextElementSibling : fieldGroup.nextElementSibling ); return notice; }function writeOriginQualification(form, input, municipality, formIndex) { var qualification = classifyOrigin(municipality, input.value); var notice = ensureOriginNotice(form, input, formIndex); var noticeRow = notice ? notice.__translelesRow : null;ensureHiddenField(form, QUALIFICATION_FIELD_NAME).value = qualification.value;if (!notice || !noticeRow) { return; }if (qualification.kind !== 'partner' && qualification.kind !== 'review') { noticeRow.hidden = true; notice.removeAttribute('data-status'); return; }noticeRow.hidden = false; notice.setAttribute('data-status', qualification.kind); notice.__translelesTitle.textContent = qualification.title; notice.__translelesMessage.textContent = qualification.message; }function addHelperText(input, configuration, formIndex) { var fieldGroup = input.closest('.elementor-field-group') || input.parentElement;if (!fieldGroup || fieldGroup.querySelector('.transleles-region-help')) { return; }var helper = document.createElement('small'); var helperId = 'transleles-region-help-' + configuration.key + '-' + String(formIndex); var describedBy = input.getAttribute('aria-describedby') || '';helper.id = helperId; helper.className = 'transleles-region-help'; helper.textContent = 'Comece a digitar e selecione uma cidade, endereço ou local. Também aceitamos texto livre.'; fieldGroup.appendChild(helper); input.setAttribute( 'aria-describedby', (describedBy + ' ' + helperId).trim() ); }function createPlacesInterface(input, configuration, formIndex) { var fieldGroup = input.closest('.elementor-field-group') || input.parentElement; var shell = document.createElement('div'); var dropdown = document.createElement('div'); var results = document.createElement('div'); var attribution = document.createElement('div'); var attributionImage = document.createElement('img'); var listboxId = 'transleles-places-listbox-' + configuration.key + '-' + String(formIndex);shell.className = 'transleles-places-shell'; dropdown.id = listboxId; dropdown.className = 'transleles-places-dropdown'; dropdown.setAttribute('role', 'listbox'); dropdown.hidden = true; results.className = 'transleles-places-results'; attribution.className = 'transleles-places-attribution'; attributionImage.src = GOOGLE_ATTRIBUTION_URL; attributionImage.alt = 'Powered by Google'; attributionImage.width = 120; attributionImage.height = 15; attribution.appendChild(attributionImage); dropdown.appendChild(results); dropdown.appendChild(attribution);if (fieldGroup && input.parentElement) { input.parentElement.insertBefore(shell, input); shell.appendChild(input); shell.appendChild(dropdown); }input.removeAttribute('list'); input.setAttribute('autocomplete', 'off'); input.setAttribute('aria-autocomplete', 'list'); input.setAttribute('aria-controls', listboxId); input.setAttribute('aria-expanded', 'false');return { dropdown: dropdown, results: results, shell: shell, listboxId: listboxId }; }function enableGooglePlaces( form, input, configuration, formIndex, placesLibrary ) { if (input.__translelesGooglePlacesV1) { return; }input.__translelesGooglePlacesV1 = true;var autocompleteSuggestion = placesLibrary.AutocompleteSuggestion; var autocompleteSessionToken = placesLibrary.AutocompleteSessionToken;if (!autocompleteSuggestion || !autocompleteSessionToken) { return; }var interfaceElements = createPlacesInterface( input, configuration, formIndex ); var dropdown = interfaceElements.dropdown; var results = interfaceElements.results; var debounceTimer = null; var requestSequence = 0; var activeIndex = -1; var renderedPredictions = []; var sessionToken = null; var selectedValue = '';function closeDropdown() { dropdown.hidden = true; input.setAttribute('aria-expanded', 'false'); input.removeAttribute('aria-activedescendant'); activeIndex = -1; }function setActiveOption(nextIndex) { var options = results.querySelectorAll('[role="option"]');if (!options.length) { return; }activeIndex = Math.max(0, Math.min(nextIndex, options.length - 1));Array.prototype.forEach.call(options, function (option, optionIndex) { var isActive = optionIndex === activeIndex; option.setAttribute('aria-selected', isActive ? 'true' : 'false'); option.classList.toggle('is-active', isActive); });input.setAttribute('aria-activedescendant', options[activeIndex].id); options[activeIndex].scrollIntoView({ block: 'nearest' }); }function clearResults() { while (results.firstChild) { results.removeChild(results.firstChild); }renderedPredictions = []; closeDropdown(); }function applyGoogleLocation(location) { writeMetadata(form, configuration, location); input.removeAttribute('data-ibge-id'); input.setAttribute('data-location-source', 'google-places');if (location.googlePlaceId) { input.setAttribute('data-google-place-id', location.googlePlaceId); } else { input.removeAttribute('data-google-place-id'); }if (configuration.key === 'origem') { writeOriginQualification(form, input, location, formIndex); } }function selectPrediction(placePrediction) { var predictionText = placePrediction.text ? placePrediction.text.toString() : ''; var placeId = placePrediction.placeId || ''; var place = placePrediction.toPlace(); var selectionRequest = ++requestSequence;input.value = predictionText; selectedValue = predictionText; closeDropdown(); input.setAttribute('aria-busy', 'true');place .fetchFields({ fields: ['formattedAddress', 'location', 'addressComponents'] }) .then(function () { if (selectionRequest !== requestSequence) { return; }applyGoogleLocation( placeToLocation(place, predictionText, placeId) ); }) .catch(function () { if (selectionRequest !== requestSequence) { return; }applyGoogleLocation({ googlePlaceId: placeId, formattedAddress: predictionText, distanceKm: NaN, source: 'Google Places' }); }) .finally(function () { input.removeAttribute('aria-busy'); });sessionToken = null; }function renderPredictions(predictions) { clearResults(); renderedPredictions = predictions.slice(0, GOOGLE_MAX_SUGGESTIONS);renderedPredictions.forEach(function (placePrediction, predictionIndex) { var option = document.createElement('div'); var primary = document.createElement('span'); var secondary = document.createElement('span'); var primaryText = placePrediction.mainText ? placePrediction.mainText.toString() : placePrediction.text.toString(); var secondaryText = placePrediction.secondaryText ? placePrediction.secondaryText.toString() : '';option.id = interfaceElements.listboxId + '-option-' + String(predictionIndex); option.className = 'transleles-places-option'; option.setAttribute('role', 'option'); option.setAttribute('aria-selected', 'false'); primary.className = 'transleles-places-primary'; primary.textContent = primaryText; option.appendChild(primary);if (secondaryText && secondaryText !== primaryText) { secondary.className = 'transleles-places-secondary'; secondary.textContent = secondaryText; option.appendChild(secondary); }option.addEventListener('mousedown', function (event) { event.preventDefault(); selectPrediction(placePrediction); }); option.addEventListener('mouseenter', function () { setActiveOption(predictionIndex); }); results.appendChild(option); });if (!renderedPredictions.length) { return; }dropdown.hidden = false; input.setAttribute('aria-expanded', 'true'); }function requestPredictions() { var query = String(input.value || '').trim(); var normalizedValue = normalizeText(query); var municipality = MUNICIPALITY_BY_VALUE[normalizedValue] || null; var currentRequest = ++requestSequence;if (municipality || query.length < GOOGLE_MIN_QUERY_LENGTH) { clearResults(); return; }if (!sessionToken) { sessionToken = new autocompleteSessionToken(); }input.setAttribute('aria-busy', 'true'); autocompleteSuggestion .fetchAutocompleteSuggestions({ input: query, includedRegionCodes: ['br'], language: 'pt-BR', region: 'br', locationBias: { center: { lat: BASE_LOCATION.latitude, lng: BASE_LOCATION.longitude }, radius: 50000 }, sessionToken: sessionToken }) .then(function (response) { if (currentRequest !== requestSequence) { return; }renderPredictions( (response.suggestions || []) .map(function (suggestion) { return suggestion.placePrediction; }) .filter(Boolean) ); }) .catch(function () { if (currentRequest === requestSequence) { clearResults(); } }) .finally(function () { if (currentRequest === requestSequence) { input.removeAttribute('aria-busy'); } }); }input.addEventListener('input', function () { selectedValue = ''; input.removeAttribute('data-google-place-id'); window.clearTimeout(debounceTimer);if (String(input.value || '').trim().length < GOOGLE_MIN_QUERY_LENGTH) { requestSequence += 1; clearResults(); return; }debounceTimer = window.setTimeout(requestPredictions, GOOGLE_DEBOUNCE_MS); });input.addEventListener('keydown', function (event) { if (dropdown.hidden || !renderedPredictions.length) { return; }if (event.key === 'ArrowDown') { event.preventDefault(); setActiveOption(activeIndex + 1); } else if (event.key === 'ArrowUp') { event.preventDefault(); setActiveOption(activeIndex <= 0 ? renderedPredictions.length - 1 : activeIndex - 1); } else if (event.key === 'Enter' && activeIndex >= 0) { event.preventDefault(); selectPrediction(renderedPredictions[activeIndex]); } else if (event.key === 'Escape') { closeDropdown(); } });input.addEventListener('change', function () { if (selectedValue && input.value === selectedValue) { return; }closeDropdown(); });input.addEventListener('blur', function () { window.setTimeout(closeDropdown, 120); }); }function initializeField(form, input, configuration, formIndex) { if (!input || input.__translelesRegionSearchV1) { return; }input.__translelesRegionSearchV1 = true; input.setAttribute('list', DATALIST_ID); input.setAttribute('autocomplete', 'address-level2'); input.setAttribute('aria-autocomplete', 'list'); input.setAttribute('data-transleles-region-field', configuration.key); input.classList.add('transleles-region-field'); addHelperText(input, configuration, formIndex);function refreshSuggestions() { replaceSuggestions(ensureDatalist(), findMatches(input.value)); }function refreshMetadata() { var municipality = MUNICIPALITY_BY_VALUE[normalizeText(input.value)] || null; writeMetadata(form, configuration, municipality);if (configuration.key === 'origem') { writeOriginQualification(form, input, municipality, formIndex); }if (municipality) { input.setAttribute('data-ibge-id', String(municipality.id)); input.setAttribute('data-location-source', 'ibge'); } else { input.removeAttribute('data-ibge-id'); input.removeAttribute('data-location-source'); } }input.addEventListener('focus', refreshSuggestions); input.addEventListener('input', function () { refreshSuggestions(); refreshMetadata(); }); input.addEventListener('change', refreshMetadata);if (isGoogleApiKeyConfigured()) { loadGooglePlacesLibrary() .then(function (placesLibrary) { enableGooglePlaces( form, input, configuration, formIndex, placesLibrary ); }) .catch(function (error) { input.setAttribute('data-location-search-fallback', 'ibge'); input.setAttribute( 'data-location-search-error', String((error && error.message) || error || 'Erro desconhecido') .replace(GOOGLE_PLACES_API_KEY, '') .slice(0, 180) ); }); } }function initializeForms() { var forms = document.querySelectorAll(FORM_SELECTOR);Array.prototype.forEach.call(forms, function (form, formIndex) { FIELD_CONFIGURATIONS.forEach(function (configuration) { var input = form.querySelector('[name="' + configuration.name + '"]'); initializeField(form, input, configuration, formIndex); }); }); }function start() { if (!MUNICIPALITIES.length || !document.body) { return; }ensureDatalist(); initializeForms();new MutationObserver(initializeForms).observe(document.body, { childList: true, subtree: true }); }if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', start, { once: true }); } else { start(); } })(); latitude: -16.2535991668701, longitude: -47.9500007629395 }; var googlePlacesLibraryPromise = null; var QUALIFICATION_FIELD_NAME = 'form_fields[qualificacao_origem]'; var FIELD_CONFIGURATIONS = [ { name: 'form_fields[Origem]', key: 'origem', label: 'Origem' }, { name: 'form_fields[Destino]', key: 'destino', label: 'Destino' }, { name: 'form_fields[endereco]', key: 'endereco', label: 'Localização do atendimento' } ]; var REGIONS_BY_STATE = { AC: 'Norte', AL: 'Nordeste', AM: 'Norte', AP: 'Norte', BA: 'Nordeste', CE: 'Nordeste', DF: 'Centro-Oeste', ES: 'Sudeste', GO: 'Centro-Oeste', MA: 'Nordeste', MG: 'Sudeste', MS: 'Centro-Oeste', MT: 'Centro-Oeste', PA: 'Norte', PB: 'Nordeste', PE: 'Nordeste', PI: 'Nordeste', PR: 'Sul', RJ: 'Sudeste', RN: 'Nordeste', RO: 'Norte', RR: 'Norte', RS: 'Sul', SC: 'Sul', SE: 'Nordeste', SP: 'Sudeste', TO: 'Norte' };function normalizeText(value) { var text = String(value || '').toLowerCase().trim();if (typeof text.normalize === 'function') { text = text.normalize('NFD').replace(/[\u0300-\u036f]/g, ''); }return text.replace(/[–—-]/g, ' ').replace(/\s+/g, ' '); }var SEARCHABLE_MUNICIPALITIES = MUNICIPALITIES.map(function (municipality) { var name = municipality[0]; var state = municipality[1]; var id = municipality[2]; var distanceKm = Number(municipality[3]); var value = name + ' — ' + state;return { id: id, name: name, state: state, distanceKm: distanceKm, region: REGIONS_BY_STATE[state] || '', source: 'IBGE', value: value, normalizedName: normalizeText(name), searchKey: normalizeText(name + ' ' + state) }; }); var MUNICIPALITY_BY_VALUE = {};SEARCHABLE_MUNICIPALITIES.forEach(function (municipality) { MUNICIPALITY_BY_VALUE[normalizeText(municipality.value)] = municipality; });function findMatches(query) { var normalizedQuery = normalizeText(query);if (normalizedQuery.length < MIN_QUERY_LENGTH) { return []; }var tokens = normalizedQuery.split(' ');return SEARCHABLE_MUNICIPALITIES.filter(function (municipality) { return tokens.every(function (token) { return municipality.searchKey.indexOf(token) !== -1; }); }) .sort(function (left, right) { var leftScore = left.normalizedName.indexOf(normalizedQuery) === 0 ? 0 : 1; var rightScore = right.normalizedName.indexOf(normalizedQuery) === 0 ? 0 : 1;if (leftScore !== rightScore) { return leftScore - rightScore; }return left.value.localeCompare(right.value, 'pt-BR'); }) .slice(0, MAX_SUGGESTIONS); }function ensureDatalist() { var datalist = document.getElementById(DATALIST_ID);if (datalist) { return datalist; }datalist = document.createElement('datalist'); datalist.id = DATALIST_ID; document.body.appendChild(datalist); return datalist; }function replaceSuggestions(datalist, matches) { while (datalist.firstChild) { datalist.removeChild(datalist.firstChild); }matches.forEach(function (municipality) { var option = document.createElement('option'); option.value = municipality.value; option.label = municipality.name + ', ' + municipality.state; datalist.appendChild(option); }); }function ensureHiddenField(form, name) { var field = form.querySelector('[name="' + name + '"]');if (field) { return field; }field = document.createElement('input'); field.type = 'hidden'; field.name = name; form.appendChild(field); return field; }function writeMetadata(form, configuration, location) { var prefix = 'form_fields[' + configuration.key; var values = { '_ibge_id]': location && location.id ? String(location.id) : '', '_cidade]': location && location.name ? location.name : '', '_uf]': location && location.state ? location.state : '', '_regiao]': location && location.region ? location.region : '', '_google_place_id]': location && location.googlePlaceId ? location.googlePlaceId : '', '_latitude]': location && Number.isFinite(location.latitude) ? String(location.latitude) : '', '_longitude]': location && Number.isFinite(location.longitude) ? String(location.longitude) : '', '_endereco_formatado]': location && location.formattedAddress ? location.formattedAddress : '', '_distancia_base_km]': location && Number.isFinite(location.distanceKm) ? String(Math.round(location.distanceKm)) : '', '_fonte]': location && location.source ? location.source : '' };Object.keys(values).forEach(function (suffix) { ensureHiddenField(form, prefix + suffix).value = values[suffix]; }); }function calculateDistanceKm(latitude, longitude) { var earthRadiusKm = 6371; var toRadians = Math.PI / 180; var latitudeDelta = (latitude - BASE_LOCATION.latitude) * toRadians; var longitudeDelta = (longitude - BASE_LOCATION.longitude) * toRadians; var startLatitude = BASE_LOCATION.latitude * toRadians; var endLatitude = latitude * toRadians; var haversine = Math.sin(latitudeDelta / 2) * Math.sin(latitudeDelta / 2) + Math.cos(startLatitude) * Math.cos(endLatitude) * Math.sin(longitudeDelta / 2) * Math.sin(longitudeDelta / 2);return earthRadiusKm * 2 * Math.atan2(Math.sqrt(haversine), Math.sqrt(1 - haversine)); }function isGoogleApiKeyConfigured() { return ( GOOGLE_PLACES_API_KEY && GOOGLE_PLACES_API_KEY.indexOf('__TRANSLELES_') !== 0 ); }function loadGooglePlacesLibrary() { if (googlePlacesLibraryPromise) { return googlePlacesLibraryPromise; }googlePlacesLibraryPromise = new Promise(function (resolve, reject) { function importPlacesLibrary(attempt) { if ( !window.google || !window.google.maps || typeof window.google.maps.importLibrary !== 'function' ) { if (attempt < 100) { window.setTimeout(function () { importPlacesLibrary(attempt + 1); }, 50); return; }reject(new Error('Google Maps não foi carregado.')); return; }window.google.maps.importLibrary('places').then(resolve).catch(reject); }if ( window.google && window.google.maps && typeof window.google.maps.importLibrary === 'function' ) { importPlacesLibrary(0); return; }var existingScript = document.getElementById(GOOGLE_SCRIPT_ID);if (existingScript) { importPlacesLibrary(0); existingScript.addEventListener('error', reject, { once: true }); return; }var script = document.createElement('script'); script.id = GOOGLE_SCRIPT_ID; script.async = true; script.defer = true; script.src = 'https://maps.googleapis.com/maps/api/js?key=' + encodeURIComponent(GOOGLE_PLACES_API_KEY) + '&loading=async&libraries=places&v=weekly&language=pt-BR®ion=BR'; script.addEventListener('load', function () { importPlacesLibrary(0); }, { once: true }); script.addEventListener('error', function () { reject(new Error('Não foi possível carregar o Google Places.')); }, { once: true }); document.head.appendChild(script); });return googlePlacesLibraryPromise; }function getAddressComponent(addressComponents, types) { var component = (addressComponents || []).find(function (item) { return types.some(function (type) { return Array.isArray(item.types) && item.types.indexOf(type) !== -1; }); });return component || null; }function placeToLocation(place, predictionText, placeId) { var addressComponents = place.addressComponents || []; var cityComponent = getAddressComponent(addressComponents, [ 'locality', 'administrative_area_level_2', 'sublocality' ]); var stateComponent = getAddressComponent(addressComponents, [ 'administrative_area_level_1' ]); var latitude = place.location && typeof place.location.lat === 'function' ? Number(place.location.lat()) : Number(place.location && place.location.lat); var longitude = place.location && typeof place.location.lng === 'function' ? Number(place.location.lng()) : Number(place.location && place.location.lng); var state = stateComponent ? String(stateComponent.shortText || stateComponent.longText || '') : '';return { googlePlaceId: place.id || placeId || '', name: cityComponent ? String(cityComponent.longText || '') : '', state: state, region: REGIONS_BY_STATE[state] || '', latitude: latitude, longitude: longitude, distanceKm: Number.isFinite(latitude) && Number.isFinite(longitude) ? calculateDistanceKm(latitude, longitude) : NaN, formattedAddress: place.formattedAddress || predictionText || '', source: 'Google Places' }; }function classifyOrigin(municipality, rawValue) { if (!municipality) { return { kind: 'manual', value: String(rawValue || '').trim() ? 'Local específico informado — confirmar cidade e distância manualmente' : 'Origem não classificada — realizar análise manual' }; }if (!Number.isFinite(municipality.distanceKm)) { return { kind: 'manual', value: 'Origem selecionada — confirmar distância manualmente' }; }if (municipality.distanceKm > 300) { return { kind: 'partner', value: 'Origem superior a 300 km — avaliar atendimento por parceiro', title: 'Origem a mais de 300 km da Transleles', message: 'Esta origem fica a mais de 300 km da nossa base, em Luziânia. O deslocamento pode elevar o custo ou inviabilizar o atendimento com frota própria. Envie sua solicitação: nossa equipe avaliará a rota e poderá buscar uma empresa parceira na sua região.' }; }if (municipality.distanceKm >= 250) { return { kind: 'review', value: 'Origem próxima ao limite de 300 km — realizar análise manual', title: 'Origem próxima ao limite de atendimento', message: 'A origem está próxima do limite de 300 km. Nossa equipe confirmará a rota e os custos antes de indicar a melhor forma de atendimento.' }; }return { kind: 'priority', value: 'Origem dentro da área prioritária de atendimento' }; }function ensureOriginNotice(form, input, formIndex) { var fieldGroup = input.closest('.elementor-field-group') || input.parentElement; var destinationInput; var destinationGroup; var wrapper; var row; var notice; var title; var message;if (!fieldGroup) { return null; }notice = form.querySelector('.transleles-origin-notice');if (notice) { return notice; }wrapper = fieldGroup.parentElement;if (!wrapper) { return null; }destinationInput = form.querySelector('[name="form_fields[Destino]"]'); destinationGroup = destinationInput ? destinationInput.closest('.elementor-field-group') : null; row = document.createElement('div'); notice = document.createElement('div'); title = document.createElement('strong'); message = document.createElement('span'); row.className = 'elementor-field-group elementor-column elementor-col-100 transleles-origin-notice-row'; row.hidden = true; notice.id = 'transleles-origin-notice-' + String(formIndex); notice.className = 'transleles-origin-notice'; notice.setAttribute('role', 'status'); notice.setAttribute('aria-live', 'polite'); notice.appendChild(title); notice.appendChild(message); notice.__translelesTitle = title; notice.__translelesMessage = message; notice.__translelesRow = row; row.appendChild(notice); wrapper.insertBefore( row, destinationGroup ? destinationGroup.nextElementSibling : fieldGroup.nextElementSibling ); return notice; }function writeOriginQualification(form, input, municipality, formIndex) { var qualification = classifyOrigin(municipality, input.value); var notice = ensureOriginNotice(form, input, formIndex); var noticeRow = notice ? notice.__translelesRow : null;ensureHiddenField(form, QUALIFICATION_FIELD_NAME).value = qualification.value;if (!notice || !noticeRow) { return; }if (qualification.kind !== 'partner' && qualification.kind !== 'review') { noticeRow.hidden = true; notice.removeAttribute('data-status'); return; }noticeRow.hidden = false; notice.setAttribute('data-status', qualification.kind); notice.__translelesTitle.textContent = qualification.title; notice.__translelesMessage.textContent = qualification.message; }function addHelperText(input, configuration, formIndex) { var fieldGroup = input.closest('.elementor-field-group') || input.parentElement;if (!fieldGroup || fieldGroup.querySelector('.transleles-region-help')) { return; }var helper = document.createElement('small'); var helperId = 'transleles-region-help-' + configuration.key + '-' + String(formIndex); var describedBy = input.getAttribute('aria-describedby') || '';helper.id = helperId; helper.className = 'transleles-region-help'; helper.textContent = 'Comece a digitar e selecione uma cidade, endereço ou local. Também aceitamos texto livre.'; fieldGroup.appendChild(helper); input.setAttribute( 'aria-describedby', (describedBy + ' ' + helperId).trim() ); }function createPlacesInterface(input, configuration, formIndex) { var fieldGroup = input.closest('.elementor-field-group') || input.parentElement; var shell = document.createElement('div'); var dropdown = document.createElement('div'); var results = document.createElement('div'); var attribution = document.createElement('div'); var attributionImage = document.createElement('img'); var listboxId = 'transleles-places-listbox-' + configuration.key + '-' + String(formIndex);shell.className = 'transleles-places-shell'; dropdown.id = listboxId; dropdown.className = 'transleles-places-dropdown'; dropdown.setAttribute('role', 'listbox'); dropdown.hidden = true; results.className = 'transleles-places-results'; attribution.className = 'transleles-places-attribution'; attributionImage.src = GOOGLE_ATTRIBUTION_URL; attributionImage.alt = 'Powered by Google'; attributionImage.width = 120; attributionImage.height = 15; attribution.appendChild(attributionImage); dropdown.appendChild(results); dropdown.appendChild(attribution);if (fieldGroup && input.parentElement) { input.parentElement.insertBefore(shell, input); shell.appendChild(input); shell.appendChild(dropdown); }input.removeAttribute('list'); input.setAttribute('autocomplete', 'off'); input.setAttribute('aria-autocomplete', 'list'); input.setAttribute('aria-controls', listboxId); input.setAttribute('aria-expanded', 'false');return { dropdown: dropdown, results: results, shell: shell, listboxId: listboxId }; }function enableGooglePlaces( form, input, configuration, formIndex, placesLibrary ) { if (input.__translelesGooglePlacesV1) { return; }input.__translelesGooglePlacesV1 = true;var autocompleteSuggestion = placesLibrary.AutocompleteSuggestion; var autocompleteSessionToken = placesLibrary.AutocompleteSessionToken;if (!autocompleteSuggestion || !autocompleteSessionToken) { return; }var interfaceElements = createPlacesInterface( input, configuration, formIndex ); var dropdown = interfaceElements.dropdown; var results = interfaceElements.results; var debounceTimer = null; var requestSequence = 0; var activeIndex = -1; var renderedPredictions = []; var sessionToken = null; var selectedValue = '';function closeDropdown() { dropdown.hidden = true; input.setAttribute('aria-expanded', 'false'); input.removeAttribute('aria-activedescendant'); activeIndex = -1; }function setActiveOption(nextIndex) { var options = results.querySelectorAll('[role="option"]');if (!options.length) { return; }activeIndex = Math.max(0, Math.min(nextIndex, options.length - 1));Array.prototype.forEach.call(options, function (option, optionIndex) { var isActive = optionIndex === activeIndex; option.setAttribute('aria-selected', isActive ? 'true' : 'false'); option.classList.toggle('is-active', isActive); });input.setAttribute('aria-activedescendant', options[activeIndex].id); options[activeIndex].scrollIntoView({ block: 'nearest' }); }function clearResults() { while (results.firstChild) { results.removeChild(results.firstChild); }renderedPredictions = []; closeDropdown(); }function applyGoogleLocation(location) { writeMetadata(form, configuration, location); input.removeAttribute('data-ibge-id'); input.setAttribute('data-location-source', 'google-places');if (location.googlePlaceId) { input.setAttribute('data-google-place-id', location.googlePlaceId); } else { input.removeAttribute('data-google-place-id'); }if (configuration.key === 'origem') { writeOriginQualification(form, input, location, formIndex); } }function selectPrediction(placePrediction) { var predictionText = placePrediction.text ? placePrediction.text.toString() : ''; var placeId = placePrediction.placeId || ''; var place = placePrediction.toPlace(); var selectionRequest = ++requestSequence;input.value = predictionText; selectedValue = predictionText; closeDropdown(); input.setAttribute('aria-busy', 'true');place .fetchFields({ fields: ['formattedAddress', 'location', 'addressComponents'] }) .then(function () { if (selectionRequest !== requestSequence) { return; }applyGoogleLocation( placeToLocation(place, predictionText, placeId) ); }) .catch(function () { if (selectionRequest !== requestSequence) { return; }applyGoogleLocation({ googlePlaceId: placeId, formattedAddress: predictionText, distanceKm: NaN, source: 'Google Places' }); }) .finally(function () { input.removeAttribute('aria-busy'); });sessionToken = null; }function renderPredictions(predictions) { clearResults(); renderedPredictions = predictions.slice(0, GOOGLE_MAX_SUGGESTIONS);renderedPredictions.forEach(function (placePrediction, predictionIndex) { var option = document.createElement('div'); var primary = document.createElement('span'); var secondary = document.createElement('span'); var primaryText = placePrediction.mainText ? placePrediction.mainText.toString() : placePrediction.text.toString(); var secondaryText = placePrediction.secondaryText ? placePrediction.secondaryText.toString() : '';option.id = interfaceElements.listboxId + '-option-' + String(predictionIndex); option.className = 'transleles-places-option'; option.setAttribute('role', 'option'); option.setAttribute('aria-selected', 'false'); primary.className = 'transleles-places-primary'; primary.textContent = primaryText; option.appendChild(primary);if (secondaryText && secondaryText !== primaryText) { secondary.className = 'transleles-places-secondary'; secondary.textContent = secondaryText; option.appendChild(secondary); }option.addEventListener('mousedown', function (event) { event.preventDefault(); selectPrediction(placePrediction); }); option.addEventListener('mouseenter', function () { setActiveOption(predictionIndex); }); results.appendChild(option); });if (!renderedPredictions.length) { return; }dropdown.hidden = false; input.setAttribute('aria-expanded', 'true'); }function requestPredictions() { var query = String(input.value || '').trim(); var normalizedValue = normalizeText(query); var municipality = MUNICIPALITY_BY_VALUE[normalizedValue] || null; var currentRequest = ++requestSequence;if (municipality || query.length < GOOGLE_MIN_QUERY_LENGTH) { clearResults(); return; }if (!sessionToken) { sessionToken = new autocompleteSessionToken(); }input.setAttribute('aria-busy', 'true'); autocompleteSuggestion .fetchAutocompleteSuggestions({ input: query, includedRegionCodes: ['br'], language: 'pt-BR', region: 'br', locationBias: { center: { lat: BASE_LOCATION.latitude, lng: BASE_LOCATION.longitude }, radius: 50000 }, sessionToken: sessionToken }) .then(function (response) { if (currentRequest !== requestSequence) { return; }renderPredictions( (response.suggestions || []) .map(function (suggestion) { return suggestion.placePrediction; }) .filter(Boolean) ); }) .catch(function () { if (currentRequest === requestSequence) { clearResults(); } }) .finally(function () { if (currentRequest === requestSequence) { input.removeAttribute('aria-busy'); } }); }input.addEventListener('input', function () { selectedValue = ''; input.removeAttribute('data-google-place-id'); window.clearTimeout(debounceTimer);if (String(input.value || '').trim().length < GOOGLE_MIN_QUERY_LENGTH) { requestSequence += 1; clearResults(); return; }debounceTimer = window.setTimeout(requestPredictions, GOOGLE_DEBOUNCE_MS); });input.addEventListener('keydown', function (event) { if (dropdown.hidden || !renderedPredictions.length) { return; }if (event.key === 'ArrowDown') { event.preventDefault(); setActiveOption(activeIndex + 1); } else if (event.key === 'ArrowUp') { event.preventDefault(); setActiveOption(activeIndex <= 0 ? renderedPredictions.length - 1 : activeIndex - 1); } else if (event.key === 'Enter' && activeIndex >= 0) { event.preventDefault(); selectPrediction(renderedPredictions[activeIndex]); } else if (event.key === 'Escape') { closeDropdown(); } });input.addEventListener('change', function () { if (selectedValue && input.value === selectedValue) { return; }closeDropdown(); });input.addEventListener('blur', function () { window.setTimeout(closeDropdown, 120); }); }function initializeField(form, input, configuration, formIndex) { if (!input || input.__translelesRegionSearchV1) { return; }input.__translelesRegionSearchV1 = true; input.setAttribute('list', DATALIST_ID); input.setAttribute('autocomplete', 'address-level2'); input.setAttribute('aria-autocomplete', 'list'); input.setAttribute('data-transleles-region-field', configuration.key); input.classList.add('transleles-region-field'); addHelperText(input, configuration, formIndex);function refreshSuggestions() { replaceSuggestions(ensureDatalist(), findMatches(input.value)); }function refreshMetadata() { var municipality = MUNICIPALITY_BY_VALUE[normalizeText(input.value)] || null; writeMetadata(form, configuration, municipality);if (configuration.key === 'origem') { writeOriginQualification(form, input, municipality, formIndex); }if (municipality) { input.setAttribute('data-ibge-id', String(municipality.id)); input.setAttribute('data-location-source', 'ibge'); } else { input.removeAttribute('data-ibge-id'); input.removeAttribute('data-location-source'); } }input.addEventListener('focus', refreshSuggestions); input.addEventListener('input', function () { refreshSuggestions(); refreshMetadata(); }); input.addEventListener('change', refreshMetadata);if (isGoogleApiKeyConfigured()) { loadGooglePlacesLibrary() .then(function (placesLibrary) { enableGooglePlaces( form, input, configuration, formIndex, placesLibrary ); }) .catch(function (error) { input.setAttribute('data-location-search-fallback', 'ibge'); input.setAttribute( 'data-location-search-error', String((error && error.message) || error || 'Erro desconhecido') .replace(GOOGLE_PLACES_API_KEY, '') .slice(0, 180) ); }); } }function initializeForms() { var forms = document.querySelectorAll(FORM_SELECTOR);Array.prototype.forEach.call(forms, function (form, formIndex) { FIELD_CONFIGURATIONS.forEach(function (configuration) { var input = form.querySelector('[name="' + configuration.name + '"]'); initializeField(form, input, configuration, formIndex); }); }); }function start() { if (!MUNICIPALITIES.length || !document.body) { return; }ensureDatalist(); initializeForms();new MutationObserver(initializeForms).observe(document.body, { childList: true, subtree: true }); }if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', start, { once: true }); } else { start(); } })();