Sobre a unidade
Presente em Pouso Alegre desde 2007, o Senac oferece excelentes oportunidades para formação profissional na região. Com um amplo portfólio de cursos livres e técnicos em diversas áreas, é possível se capacitar gratuitamente através do Programa Senac de Gratuidade (PSG) e do Senac+.
Além disso, a unidade oferece opções de Especialização Técnica e MBA para as pessoas que desejam investir no aperfeiçoamento profissional. O Senac em Pouso Alegre também é polo da rede EAD da instituição e possui parcerias profissionais para acesso ao mercado de trabalho como o Programa Jovem Aprendiz e o Rede de Carreiras.

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
A estrutura da unidade é outro diferencial, com ambientes de aprendizagem prontos para atender às necessidades dos alunos e alunas. Confira o que você encontra no Senac Pouso Alegre:
- 1 laboratório de saúde
- 1 laboratório de estética
- 3 laboratórios de informática
- 13 salas de aula convencionais
- Auditório
- Biblioteca
A unidade atende à população das cidades de Bom Repouso, Borda da Mata, Bueno Brandão, Cachoeira de Minas, Camanducaia, Cambuí, Careaçu, Congonhal, Consolação, Córrego do Bom Jesus, Espírito Santo do Dourado, Estiva, Extrema, Heliodora, Inconfidentes, Itapeva, Jacutinga, Monte Sião, Munhoz, Natércia, Ouro Fino, Pouso Alegre, Santa Rita do Sapucaí, São Sebastião da Bela Vista, Senador Amaral, Senador José Bento, Silvianópolis, Tocos do Moji e Toledo.
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> 