Senac em Juiz de Fora

Segunda a sexta - 8h às 20h
Avenida Barão do Rio Branco, 3.330 - Centro
(32) 3690-4700
Imagem do cabeçalho
Cursos desta Unidade

Cursos Simplificados

Sobre a unidade

​O Centro de Educação Profissional do Senac em Juiz de Fora tem ampla oferta de cursos livres. Lá, os alunos podem optar entre as áreas de Artes, Beleza, Comércio, Comunicação, Design, Gestão, Hospitalidade, Idiomas, Informática, Turismo e Saúde. Para as pessoas que buscam o ensino técnico, há cursos em Estética, Segurança do Trabalho e Administração. 

Outras opções na unidade são as especializações em MBA​ e as turmas do Programa Jovem Aprendiz - iniciativa que oferece formação profissional a jovens. Vale destacar, ainda, que a unidade Juiz de Fora é polo de Educação a Distância​ do Senac.

Desde 1960, essa unidade atende a mais de 50 municípios, entre eles, Além Paraíba, Muriaé, Cataguases, Leopoldina, Guarani, São João Nepomuceno e Ubá. 

Ver todos os cursos

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.

Saiba mais

A estrutura

No Senac Juiz de Fora você encontra:


• 18 salas convencionais

• acessibilidade na infraestrutura

• 4 laboratórios de informática

• 1 salão de beleza pedagógico com atendimento ao público. Informações: (32) 3690-4700 

• 3 laboratórios de estética

• 1 auditório com capacidade para 80 pessoas

• 1 biblioteca pedagógica

• SenacMóvel (carreta-escola)

• Senac na Escola - palestras gratuitas para escolas da rede pública e particular sobre temas variados

• Participação em eventos e ações globais com atendimentos gratuitos realizados pelos alunos em escolas, empresas e outras entidades, oferecendo cortes de cabelos, maquiagem, manicure e pedicure, massagens, entre outros serviços

• Rede de Carreiras

Visite a unidade e conheça os cursos disponíveis para você!

Publicador de Conteúdos e Mídias

Como chegar até a 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.

Publicador de Conteúdos e Mídias

Um erro ocorreu enquanto processava o modelo.
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> 

Navegação de Categorias