Sobre a unidade
O Centro de Educação Profissional de Uberaba conta com laboratórios de ponta, biblioteca climatizada com um vasto acervo, salão de beleza pedagógico e elevadores em três andares. Tudo isso aliado a um corpo docente de primeira para atender os alunos de áreas como Beleza, Saúde, Gastronomia, Gestão, Hospitalidade, Comércio e Informática.
Além de cursos livres, técnicos e de MBA, há a opção dos cursos de Educação a Distância. Desde 1983, inúmeras pessoas já receberam qualificação profissional no Senac em Uberaba. O conhecimento chega a várias cidades que fazem parte da microrregião do Vale do Rio Grande, no Triângulo Mineiro, como Frutal, Sacramento, entre outras.

Programa de gratuidade Senac
Da formação inicial ao nível técnico, com custo zero, o Programa Senac de Gratuidade foi pensado como um instrumento de inclusão produtiva para brasileiros oriundos de família de baixa renda.
A estrutura
No Senac Uberaba, você encontra:
- Ambientes pedagógicos, climatizados e equipados com projetores e TV
- Cozinha didática completa
- Salão de beleza pedagógico
- Laboratórios de estética facial e corporal, informática e saúde
- Laboratório Maker e Sala de Inovação
- Rede de Carreiras - atendimento individual gratuito para aqueles que buscam obter informações e instruções sobre o mundo do trabalho
- Auditório com capacidade para 100 pessoas
Visite a unidade e conheça os cursos disponíveis para você!

Notícias relacionadas
Avaliação de nossos alunos
Acompanhe avaliações dos nossos alunos sobre os cursos desta unidade.
Confira abaixo onde estamos localizados e como chegar até a unidade. Através do mapa interativo, você pode traçar rotas, visualizar os arredores e planejar sua visita com facilidade.
Denied access to method or field getAttribute of class org.apache.catalina.core.ApplicationHttpRequest
----
FTL stack trace ("~" means nesting-related):
- Failed at: #assign layoutDisplayPageObjectProvid... [in template "70687763866433#20120#33250" at line 21, column 1]
---- 1<#-- Extrai latitude e longitude dos dois formatos de URL do Google Maps --> 2<#function getCoords geolocationUrl> 3 <#if geolocationUrl?contains("!3d") && geolocationUrl?contains("!4d")> 4 <#return { 5 "lat": geolocationUrl?keep_after("!3d")?keep_before("!"), 6 "lng": geolocationUrl?keep_after("!4d")?keep_before("!") 7 } /> 8 <#elseif geolocationUrl?contains("@")> 9 <#local coordsPart = geolocationUrl?keep_after("@") /> 10 <#return { 11 "lat": coordsPart?keep_before(","), 12 "lng": coordsPart?keep_after(",")?keep_before(",") 13 } /> 14 </#if> 15 <#return {"lat": "", "lng": ""} /> 16</#function> 17 18<#-- Conteúdo exibido pela página de exibição (/w/...), quando houver --> 19<#assign currentUnit = {} /> 20<#assign displayArticle = "" /> 21<#assign layoutDisplayPageObjectProvider = (request.getAttribute("LAYOUT_DISPLAY_PAGE_OBJECT_PROVIDER"))! /> 22 23<#if layoutDisplayPageObjectProvider?has_content && layoutDisplayPageObjectProvider.getClassName() == "com.liferay.journal.model.JournalArticle"> 24 <#assign displayArticle = layoutDisplayPageObjectProvider.getDisplayObject() /> 25</#if> 26 27<#-- Alternativa: URL amigável do conteúdo, o trecho depois de /w/ --> 28<#assign currentURL = themeDisplay.getURLCurrent()?keep_before("?") /> 29<#if !displayArticle?has_content && currentURL?contains("/w/")> 30 <#assign urlTitle = currentURL?keep_after_last("/w/")?keep_before("/") /> 31 <#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 32 <#assign displayArticle = (JournalArticleLocalService.fetchArticleByUrlTitle(themeDisplay.getScopeGroupId(), urlTitle))!"" /> 33</#if> 34 35<#assign displayGeolocationUrl = "" /> 36<#assign displayCoords = {"lat": "", "lng": ""} /> 37 38<#if displayArticle?has_content> 39 <#assign displayDocXml = saxReaderUtil.read(displayArticle.getContent()) /> 40 <#assign displayGeolocationUrl = displayDocXml.valueOf("//dynamic-element[@field-reference='geolocation']/dynamic-content[@language-id='${locale}']")!"" /> 41 <#if !displayGeolocationUrl?has_content> 42 <#assign displayGeolocationUrl = displayDocXml.valueOf("(//dynamic-element[@field-reference='geolocation']/dynamic-content)[1]")!"" /> 43 </#if> 44 <#assign displayCoords = getCoords(displayGeolocationUrl?trim) /> 45 46 <#if displayCoords.lat?has_content && displayCoords.lng?has_content> 47 <#assign currentUnit = { 48 "id": displayArticle.getResourcePrimKey()?c, 49 "title": displayArticle.getTitle(locale), 50 "lat": displayCoords.lat, 51 "lng": displayCoords.lng, 52 "geolocationUrl": displayGeolocationUrl 53 } /> 54 </#if> 55</#if> 56 57<#if entries?has_content || currentUnit?has_content> 58 <script src="https://unpkg.com/leaflet/dist/leaflet.js"></script> 59 60 <div id="map" style="height: 480px;"></div> 61 62 <script> 63 const allUnitsData = []; 64 const currentUnit = <#if currentUnit?has_content>{ 65 id: "${currentUnit.id}", 66 title: "${currentUnit.title?js_string}", 67 lat: "${currentUnit.lat}", 68 lng: "${currentUnit.lng}", 69 viewURL: window.location.href.split('?')[0], 70 geolocationUrl: "${currentUnit.geolocationUrl?js_string}" 71 }<#else>null</#if>; 72 </script> 73 74 <#-- Collect all units data --> 75 <#list entries as curEntry> 76 <#assign assetRenderer = curEntry.getAssetRenderer() /> 77 <#assign journalArticle = assetRenderer.getArticle() /> 78 <#assign docXml = saxReaderUtil.read(journalArticle.getContent()) /> 79 <#assign viewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, assetRenderer, curEntry, !stringUtil.equals(assetLinkBehavior, "showFullContent")) /> 80 <#assign geolocationUrl = docXml.valueOf("//dynamic-element[@field-reference='geolocation']/dynamic-content[@language-id='${locale}']")!"" /> 81 82 <#-- Add unidadeId to viewURL --> 83 <#assign unidadeId = journalArticle.getResourcePrimKey() /> 84 <#assign viewURL = viewURL?keep_before_last("?") /> 85 <#if viewURL?contains("?")> 86 <#assign viewURL = viewURL + "&unidadeId=" + unidadeId /> 87 <#else> 88 <#assign viewURL = viewURL + "?unidadeId=" + unidadeId /> 89 </#if> 90 91 <#assign coords = getCoords(geolocationUrl) /> 92 <#assign lat = coords.lat /> 93 <#assign lng = coords.lng /> 94 95 <#if lat?has_content && lng?has_content> 96 <script> 97 allUnitsData.push({ 98 id: "${unidadeId}", 99 title: "${curEntry.getTitle(locale)?js_string}", 100 lat: "${lat}", 101 lng: "${lng}", 102 viewURL: "${viewURL?js_string}", 103 geolocationUrl: "${geolocationUrl?js_string}" 104 }); 105 </script> 106 </#if> 107 </#list> 108 109 <script> 110 // Function to initialize map with units 111 async function initMap(unitsToShow) { 112 if (unitsToShow.length === 0) return; 113 114 const map = L.map('map').setView([unitsToShow[0].lat, unitsToShow[0].lng], 13); 115 const customIcon = L.icon({ 116 iconUrl: '${themeDisplay.getPathThemeImages()}/marker-icon.png', 117 iconSize: [42, 64], 118 iconAnchor: [22, 94], 119 popupAnchor: [0, -90] 120 }); 121 122 L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { 123 attribution: '© OpenStreetMap contributors' 124 }).addTo(map); 125 126 const group = L.featureGroup(); 127 128 unitsToShow.forEach(unit => { 129 const showDetailsButton = unitsToShow.length > 1; 130 131 const popupContent = ` 132 <div class="d-flex justify-content-between align-items-center"> 133 <h4 class="font-weight-bold text-primary mb-0">` + unit.title + `</h4> 134 <a 135 class="btn btn-link text-primary-1-100 p-0" 136 href="` + unit.geolocationUrl + `" 137 target="_blank" 138 rel="noopener noreferrer" 139 > 140 Ver no mapa 141 </a> 142 </div> 143 ` + (showDetailsButton ? ` 144 <a 145 class="btn btn-primary text-white btn-block mt-3" 146 href="` + unit.viewURL + `" 147 target="_blank" 148 > 149 Ver detalhes da unidade 150 </a> 151 ` : '') + ` 152 `; 153 L.marker([unit.lat, unit.lng], { icon: customIcon }) 154 .bindPopup(popupContent) 155 .addTo(group); 156 }); 157 158 group.addTo(map); 159 map.fitBounds(group.getBounds()); 160 } 161 162 // Get unidadeId from URL 163 const urlParams = new URLSearchParams(window.location.search); 164 const unidadeIdFromUrl = urlParams.get('unidadeId'); 165 166 // Main initialization 167 async function init() { 168 // Página de exibição: usa a geolocalização do próprio conteúdo exibido 169 if (currentUnit) { 170 initMap([currentUnit]); 171 } else if (unidadeIdFromUrl) { 172 // Try to fetch specific unit from Headless API 173 try { 174 const response = await fetch( 175 window.location.origin + '/o/headless-delivery/v1.0/structured-contents/' + unidadeIdFromUrl, 176 { 177 method: 'GET', 178 headers: { 179 'Accept': 'application/json' 180 } 181 } 182 ); 183 184 if (response.ok) { 185 const unitData = await response.json(); 186 // Extract geolocation from contentFields 187 const geolocationField = unitData.contentFields?.find(f => f.name === 'geolocation'); 188 const geolocationUrl = geolocationField?.contentFieldValue?.data || ''; 189 190 if (geolocationUrl) { 191 // Parse lat/lng from Google Maps URL 192 let lat = '', lng = ''; 193 if (geolocationUrl.includes('!3d') && geolocationUrl.includes('!4d')) { 194 lat = geolocationUrl.split('!3d')[1]?.split('!')[0] || ''; 195 lng = geolocationUrl.split('!4d')[1]?.split('!')[0] || ''; 196 } else if (geolocationUrl.includes('@')) { 197 const coords = geolocationUrl.split('@')[1]?.split(',') || []; 198 lat = coords[0] || ''; 199 lng = coords[1] || ''; 200 } 201 202 if (lat && lng) { 203 const unit = { 204 id: unidadeIdFromUrl, 205 title: unitData.title || '', 206 lat: lat, 207 lng: lng, 208 viewURL: window.location.href.split('?')[0], 209 geolocationUrl: geolocationUrl 210 }; 211 initMap([unit]); 212 return; 213 } 214 } 215 } 216 } catch (error) { 217 console.warn('Error fetching unit from Headless API:', error); 218 } 219 220 // Fallback: filter from local data 221 const filteredUnits = allUnitsData.filter(unit => unit.id === unidadeIdFromUrl); 222 initMap(filteredUnits); 223 } else { 224 // Show all units 225 initMap(allUnitsData); 226 } 227 } 228 229 init(); 230 </script> 231</#if> 