Caminho de Navegação

Bolsas de estudo gratuitas com material incluso e sem taxas

Escolha entre cursos livres, técnicos, de idiomas e ensino médio técnico.

Como funciona o programa de bolsas?

Acreditamos que a educação tem o poder de transformar vidas. Por isso, anualmente, o Programa Senac de Gratuidade garante o acesso  a milhares de bolsas de estudos. Até 2023, foram mais de 1,5 milhão de pessoas atendidas pelo programa.

Já são mais de 2 milhões de pessoas beneficiadas

Publicador de Conteúdos e Mídias

  • Cursos 100% gratuitos

    Sem taxas de matrícula. Cursos gratuitos para quem tem renda familiar mensal de até 2 salários mínimos federais.

  • Material incluso

    Nos cursos livres, técnicos, de idiomas e ensino médio técnico você ganha todos os materiais usados nas aulas.

  • Inscrições on-line

    Abrem 20 dias antes do início das aulas, sempre às 12hs. São preenchidas por ordem de chegada, sem provas e taxas

  • Vagas limitadas

    O envio da inscrição não garante a bolsa, pois as vagas são limitadas. Acompanhe o resultado pelo seu e-mail

Confira as regras para se inscrever

Publicador de Conteúdos e Mídias

  • Ter renda familiar de até 2 salários mínimos federais por pessoa

    O valor do salário mínimo é R$1.621,00. Descubra se com a sua renda familiar você poderá solicitar uma bolsa.

  • Conferir, na página do curso, a escolaridade e os documentos solicitados

    Você dever ler na página do curso os campos "Posso fazer este curso?" e "Como me matricular?" para saber detalhes sobre escolaridade e documentação.

  • Estar disponível nos dias e horários das aulas

    Para solicitar uma bolsa, você não pode fazer outro curso no Senac nos mesmos dias e horários.

  • Não comprar o curso

    Não é possível se matricular como bolsista em um curso que você já comprou.

  • Não ter abandonado um curso como bolsista nos últimos 6 meses

    Se esse foi o seu caso, você deve esperar 6 meses para solicitar uma nova bolsa.

  • Fazer até dois cursos por vez

    Você pode ser bolsista em até dois cursos ao mesmo tempo, desde que sejam cursos, dias e horários diferentes.

Me encaixo em todas as regras e gostaria de solicitar uma bolsa!

Conferir etapas
  • Passo 1
  • Passo 2
  • Passo 3
  • Passo 4

Conheça as etapas para se inscrever

Assista ao tutorial e saiba como se inscrever!

Publicador de Conteúdos e Mídias

1 Escolha o curso e a unidade para solicitar a bolsa

Lembre-se: para se inscrever é preciso atender todas as regras do programa.

Buscar cursos com bolsa

2 Confira se há vagas abertas para bolsas

As inscrições para bolsas em cursos livres, de idiomas e técnicos começam 20 dias antes do início do curso, sempre às 12 horas.

Para inscrições de bolsas para o ensino médio técnico, acompanhe a abertura da matrícula na página do ensino médio técnico.

Você também encontra mais detalhes sobre datas e horários das turmas nas páginas dos cursos.

3 Na página do curso, clique em "Inscrever para bolsa de estudo"

Após clicar no botão de inscrição, faça login em nosso site utilizando a conta da pessoa que irá se inscrever para a bolsa. Depois, você será direcionado ao sistema de solicitação de bolsas de estudo. Lá, você deve preencher o formulário até receber a mensagem "Inscrição enviada com sucesso".

As vagas são limitadas e por ordem de chegada!


Atualize seus dados cadastrais no site do Senac
Para não perder tempo no momento da solicitação, preencha ou atualize seus dados cadastrais no site do Senac São Paulo antes da abertura das vagas de bolsa. Se ainda não tem conta, faça agora seu cadastro.
Importante: tenha certeza que você fez o login em nosso site com a conta de quem irá estudar com a gente, pois os dados informados no cadastro serão utilizados para solicitar a bolsa.

As inscrições começam ao meio dia
Se atente ao dia e horário de abertura da inscrição, pois as vagas são preenchidas por ordem de chegada.

Procure uma boa conexão de internet
No dia de realizar sua inscrição, esteja em um local com boa conexão de internet.

4 Verifique seu e-mail ou acesse a área exclusiva

Após realizar a inscrição da bolsa de estudo, toda comunicação com você será por e-mail, Área Exclusiva e/ou SMS. Por isso, mantenha seus dados de e-mail e telefone atualizados no cadastro do site.

5 Entenda as próximas etapas após receber o resultado

Bolsa aprovada
Você receberá no seu e-mail um link para realizar sua matrícula.
Caso não faça a matrícula no prazo indicado, você perderá a bolsa.
Importante: confirme datas e horários da sua turma, pois se faltar no primeiro dia de aula sua bolsa será cancelada.

Bolsa em lista de espera
Você saberá o número que ocupa na lista de espera, recebendo no seu e-mail as atualizações dessa lista. Acompanhe para saber se conseguirá ou não uma vaga.

Bolsa não aprovada
Não desanime, escolha outro curso e faça uma nova inscrição!

Precisa de mais informações? Confira as dúvidas frequentes sobre o programa de bolsas.

Acessar dúvidas frequentes

Assista ao tutorial e saiba como se inscrever!

Quero buscar cursos com bolsas

As inscrições abrem 20 dias antes do início do curso, sempre às 12 horas, e as vagas são limitadas. 

Publicador de Conteúdos e Mídias

Um erro ocorreu enquanto processava o modelo.
The following has evaluated to null or missing:
==> unidade  [in template "20102#20129#91047004" at line 424, column 74]

----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: ${unidade.nomeUsual?trim}  [in template "20102#20129#91047004" at line 424, column 72]
----
1<style> 
2  #btn-search:disabled{ 
3    opacity:0.5; 
4
5 
6  .ssp-new-bolsa__filtro-select-content .select-dropdown button { 
7    gap: 8px; 
8
9 
10  a.btn-clean-element, a.btn-clean-element:hover { 
11    text-decoration: none !important; 
12    color: var(--marca-azulsenac-400) !important; 
13    font-size: 14px; 
14    font-weight: 600; 
15
16 
17  input.filter-search, input.filter-search:focus,input.filter-search::placeholder{ 
18    font-size: 16px; 
19    border:none; 
20    outline: none;  
21    padding: 0; 
22    width: 100%; 
23
24 
25 
26</style> 
27 
28<#assign unidadesAPI = serviceLocator.findService("br.senac.unidades.api.Unidades") /> 
29<#assign searchAPI = serviceLocator.findService("br.senac.search.api.Search")> 
30<#assign contentAPI = serviceLocator.findService("br.senac.services.api.WebContent") /> 
31<#assign companyId = themeDisplay.getCompanyId() /> 
32<#assign groupId = themeDisplay.getScopeGroupId() /> 
33 
34<#assign tiposRequeridos = { 
35    "Ensino Médio Técnico" : "Ensino Médio Técnico", 
36    "Livre" : "Cursos Livres e Idiomas", 
37    "Técnico" : "Cursos Técnicos" 
38} /> 
39<#assign tipos = contentAPI.categoriesByVocabularyName(groupId, "Tipo de curso", 0) /> 
40<#assign tipos = tipos?filter(t -> tiposRequeridos?keys?seq_contains(t.name)) /> 
41 
42<#assign areas = contentAPI.categoriesByVocabularyName(groupId, "Tema(Mercadológico)", 0) /> 
43 
44<#assign unidades = unidadesAPI.getUnidades(companyId, null, null, 100, 0) /> 
45 
46<#function getUrlSubPath > 
47    <#attempt> 
48    <#assign url = themeDisplay.getURLCurrent()?replace("//", "/") /> 
49    <#assign friendly = url?split("/")[1]?split("?")?first /> 
50      <#if !friendly?contains("web") > 
51        <#if url?split("/")?size gt 2 > 
52        <#assign friendly = url?split("/")[2]?split("?")?first /> 
53      <#else> 
54        <#assign friendly = "" /> 
55      </#if>	 
56         
57    <#else> 
58      <#if url?split("/")?size gt 4 > 
59        <#assign friendly = url?split("/")[4]?split("?")?first> 
60      <#else> 
61        <#assign friendly = "" /> 
62      </#if> 
63    </#if> 
64             
65    <#return friendly /> 
66    <#recover> 
67      <#return ''> 
68    </#attempt> 
69     
70</#function> 
71<#assign hasSubPath = (getUrlSubPath() == "cursos-com-bolsa") />  
72 
73<div class="ssp-new-bolsa__buscar-cursos-form-filtro-content"> 
74  <form id="filter"> 
75 
76    <fieldset class="ssp-new-bolsa__filtro-select-content"> 
77        <legend class="label-legenda">Em qual unidade quer estudar?</legend> 
78        <div class="select-dropdown" id="filter-unidade"> 
79          <button type="button" role="combobox" aria-autocomplete="list" aria-owns="filter-unidade-content" 
80            aria-label="Filtrar por unidade" class=""> 
81              <i aria-hidden="true" class="fa-regular fa-chevron-down"></i> 
82          </button> 
83          <ul class="dropdown-content" role="listbox" aria-expanded="false" 
84              aria-multiselectable="true" aria-orientation="vertical" tabindex="0" 
85              id="filter-unidade-content"> 
86          </ul> 
87        </div> 
88    </fieldset> 
89 
90    <fieldset class="ssp-new-bolsa__filtro-select-content"> 
91        <legend class="label-legenda">Qual tipo de curso?</legend> 
92        <div class="select-dropdown" id="filter-tipo-curso"> 
93            <button type="button" id="btn-combolist" role="combobox" aria-autocomplete="list" 
94                aria-owns="filter-tipo-curso-content" aria-label="Filtrar por tipo de curso" class=""> 
95                <i aria-hidden="true" class="fa-regular fa-chevron-down"></i> 
96            </button> 
97            <ul class="dropdown-content" role="listbox" aria-expanded="false" 
98                aria-multiselectable="true" aria-orientation="vertical" tabindex="0" 
99                id="filter-tipo-curso-content"> 
100            </ul> 
101        </div> 
102    </fieldset> 
103 
104    <fieldset class="ssp-new-bolsa__filtro-select-content"> 
105        <legend class="label-legenda">Qual a sua área de interesse?</legend> 
106        <div class="select-dropdown" id="filter-area"> 
107          <button type="button" role="combobox" aria-autocomplete="list" aria-owns="filter-area-content" 
108            aria-label="Filtrar por área de interesse" class=""> 
109            <i aria-hidden="true" class="fa-regular fa-chevron-down"></i> 
110          </button> 
111          <ul class="dropdown-content" role="listbox" aria-expanded="false" aria-multiselectable="true" 
112            aria-orientation="vertical" tabindex="0" id="filter-area-content"> 
113          </ul> 
114        </div> 
115 
116    </fieldset> 
117 
118    <fieldset id="filter-qual-periodo-group" class="ssp-new-bolsa__filtro-select-content"> 
119      <legend class="label-legenda">Para qual período?</legend> 
120      <div class="checkbox-content" id="filter-periodo"> 
121        <label for="manha" class="checkbox-button"> 
122          <input type="checkbox" id="manha" name="periodo" value="MA"> 
123          Manhã 
124        </label> 
125        <label for="tarde" class="checkbox-button"> 
126          <input type="checkbox" id="tarde" name="periodo" value="TA"> 
127          Tarde 
128        </label> 
129        <label for="noite" class="checkbox-button"> 
130          <input type="checkbox" id="noite" name="periodo" value="NO"> 
131          Noite 
132        </label> 
133      </div> 
134    </fieldset> 
135 
136    <fieldset id="inicio-bolsa-group" class="ssp-new-bolsa__filtro-select-content"> 
137        <legend class="label-legenda">Quando você quer solicitar uma bolsa?</legend> 
138        <div class="select-dropdown" id="filter-inicio-bolsa"> 
139          <button type="button" role="combobox" aria-autocomplete="list" aria-owns="filter-inicio-bolsa-content" 
140            aria-label="Quando você quer solicitar uma bolsa?" class=""> 
141            <i aria-hidden="true" class="fa-regular fa-chevron-down"></i> 
142          </button> 
143          <ul class="dropdown-content" role="listbox" aria-expanded="false" aria-multiselectable="true" 
144            aria-orientation="vertical" tabindex="0" id="filter-inicio-bolsa-content"> 
145          </ul> 
146        </div> 
147 
148    </fieldset> 
149 
150    <button id="btn-search" type="button" class="btn-buscar-cursos" disabled> 
151      <span>Buscar cursos com bolsas </span> 
152    </button> 
153 
154  </form> 
155</div> 
156 
157<#if hasSubPath> 
158  <div id="loading-container"></div> 
159 
160  <div id="result-container" class="ssp-new-bolsa__page-cursos-content-cards-cursos d-none" > 
161    <p class="resultados-text"></p> 
162    <div id="results" class="grid-cards-cursos-bolsa"> 
163 
164    </div> 
165 
166    <#-- Mensagem caso não encontre cursos --> 
167    <div id="no-result-msg" class="grid-sem-cursos d-none"> 
168        <h3>Opa! Não encontramos resultados para a sua busca</h3> 
169        <p>Altere ou limpe os filtros para fazer uma nova busca.</p> 
170        <button type="button" id="btn-clean-all" style="cursor:pointer">Limpar todos os filtros</button> 
171    </div> 
172 
173    <a href="#filter" class="btn-float-refazer-busca"> 
174      <span>Refazer busca</span> 
175      <i class="fa-solid fa-arrow-up"></i> 
176    </a> 
177 
178  </div> 
179</#if> 
180   
181<script> 
182   
183      const ajaxGetCall = url =>{ 
184          return $.ajax({ 
185              url: url, 
186              method: 'GET', 
187              dataType:'json' 
188          }); 
189
190 
191      const filter = { 
192        unidades : [], 
193        tipos : [], 
194        areas : [], 
195        periodo : [], 
196        dataBolsa : [] 
197
198 
199      const search = { 
200          unidades : [], 
201          areas : [], 
202          tipos : [], 
203          mapUnidadesCategories : new Map(), 
204          isSearchPage : ("${hasSubPath?c}" === "true"), 
205          redirectParams : new URLSearchParams(window.location.search) 
206
207 
208      const regioes = { 
209        'C':'Capital', 
210        'I':'Interior', 
211        'GS':'Grande São Paulo', 
212        'N':'Outras Regiões' 
213
214 
215      const unidadeCategorySearch = async (codUnidade) => { 
216 
217        let category = search.mapUnidadesCategories.get(codUnidade); 
218        if(!category){ 
219          const url = '/o/senac-content-services/categoriaPorCodUnidade/${groupId}/{codUnidade}' 
220          .replace('\{codUnidade\}', codUnidade); 
221 
222          category = await ajaxGetCall(url);  
223          search.mapUnidadesCategories.set(codUnidade, category); 
224
225 
226        return category; 
227 
228
229 
230      const getFilterUrlParams = async (includeCategoryIdsUnidade = false) => { 
231         
232        const getCategoryIdsUnidades = async (urls) => { 
233          let categories = []; 
234          if(urls.length){ 
235            for(let urlUnidade of urls){ 
236              let categoryByURL = search.unidades.filter(un => un.friendlyURL == urlUnidade); 
237              if(categoryByURL.length){ 
238                let category = await unidadeCategorySearch(categoryByURL[0].codigoUnidade); 
239                categories.push(category); 
240
241
242
243          return categories; 
244
245 
246        const isRedirect = (search.isSearchPage && search.redirectParams.size > 0); 
247        let paramsUnidade = isRedirect ? search.redirectParams.getAll('unidade') : filter.unidades; 
248        let categoryIdsUnidade = null; 
249        let searchParams = isRedirect ? search.redirectParams : new URLSearchParams(); 
250 
251        if(includeCategoryIdsUnidade && paramsUnidade && paramsUnidade.length){ 
252          categoryIdsUnidade = await getCategoryIdsUnidades(paramsUnidade); 
253          categoryIdsUnidade.forEach(id => searchParams.append('categoryIdsUnidade', id)); 
254          searchParams.set('considerarUnidade', (categoryIdsUnidade && categoryIdsUnidade.length) ? 1 : 0); 
255
256 
257        if(isRedirect) return searchParams; 
258 
259        // change filter selection object to queryparams 
260 
261        if(filter.unidades) filter.unidades.forEach(u => searchParams.append('unidade', u)); 
262        if(filter.tipos) filter.tipos.forEach(t => searchParams.append('categoryIdsTipoCurso', t)); 
263        if(filter.areas) filter.areas.forEach(a => searchParams.append('categoryIdsTema', a)); 
264        if(filter.periodo) filter.periodo.forEach(p => searchParams.append('periodosOferta', p)); 
265        if(filter.dataBolsa) filter.dataBolsa.forEach(d => { 
266          let [inicio, fim] = d.split("|"); 
267          searchParams.append('datasInicioBolsa', inicio); 
268          searchParams.append('datasFimBolsa', fim); 
269        }); 
270 
271        return searchParams; 
272
273   
274      const cursosearch = async () => { 
275   
276          let url = "/o/senac-content-services/cursosComBolsa/${groupId}/-1/-1?ordenarPelaOferta=1&"; 
277          let filterParams = await getFilterUrlParams(true); 
278          filterParams.delete('unidade'); 
279          if(!filterParams.getAll('categoryIdsTipoCurso').length){ 
280            // evitar trazer tipos que nao estao na lista 
281            search.tipos.map(t => t.categoryId).forEach(id => filterParams.append('categoryIdsTipoCurso', id)); 
282
283          url += filterParams.toString(); 
284          return ajaxGetCall(url); 
285 
286
287   
288      const resetResults = () => { 
289        if(!$('#no-result-msg').hasClass('d-none')) $('#no-result-msg').addClass('d-none'); 
290        $('#results').empty(); 
291
292   
293      const getResults = async () => { 
294            loading('#loading-container'); 
295            resetResults(); 
296            const $results = $('#results, .resultados-text'); 
297            if(!$results.hasClass('d-none')) $results.addClass('d-none'); 
298            try{ 
299              let cursosSearch = await cursosearch(); 
300              let total = cursosSearch.total; 
301              cursosSearch = cursosSearch.cursos; 
302               
303              $('#result-container').removeClass('d-none'); 
304              $('#loading-container').empty(); 
305 
306              if(total == 0){ 
307                $('#no-result-msg').removeClass('d-none'); 
308                return; 
309
310 
311              $results.removeClass('d-none'); 
312              $('.resultados-text').html('<strong>'+total+'</strong> ' + (total>1 ? 'resultados' : 'resultado')); 
313   
314              $.each(cursosSearch,function(k, curso) { 
315                  let infoBotoes = []; 
316                  infoBotoes[curso.articleId] = {'botaoBolsas':'true'}; 
317                  let itemCurso = buildCardCurso(curso, infoBotoes, ($(window).width() <=1024)); 
318                  itemCurso.addClass('card-curso-nivel-2'); 
319                  let hrefCard = itemCurso.find('.ck-curso').attr('href') + '?bolsa=true'; 
320                  itemCurso.find('.ck-curso').attr('href', hrefCard); 
321                  $('#results').append(itemCurso); 
322              }); 
323 
324          }catch(err){ 
325              console.error(err); 
326              $('#loading-container').empty(); 
327              $('#no-result-msg').removeClass('d-none'); 
328              if(!$results.hasClass('d-none')) $results.addClass('d-none'); 
329
330
331 
332      const resetFilter = () => { 
333        const filterSection = document.getElementById('filter'); 
334         
335        $(`#filter-unidade-content input:checked,  
336        #filter-tipo-curso-content input:checked, 
337        #filter-area-content input:checked, 
338        #filter-inicio-bolsa-content input:checked, 
339        input[name=periodo]:checked`).prop('checked', false); 
340 
341        $.each($(`#filter-unidade-content,  
342        #filter-tipo-curso-content, 
343        #filter-area-content, 
344        #filter-inicio-bolsa-content`), 
345        (i, el) => refreshLabelSelector($(el).parents('.select-dropdown').first())); 
346 
347        $('#btn-search').attr('disabled',''); 
348 
349        filterSection.scrollIntoView({ behavior: 'smooth' }); 
350 
351
352   
353      const applyFilter = async () => { 
354 
355          filter.unidades = getSelection($('#filter-unidade-content')).filter(u => !Object.keys(regioes).includes(u)) || []; 
356          filter.tipos = getSelection($('#filter-tipo-curso-content')) || []; 
357          filter.areas = getSelection($('#filter-area-content')) || []; 
358          filter.periodo = getSelection($('#filter-periodo')) || []; 
359          filter.dataBolsa = $('.this-month:checked:last, .next-month:checked').map(function(){return $(this).val()}).get() || []; 
360           
361          if(!search.isSearchPage){ 
362            const current = window.location; 
363            const hash = ($(window).width() <= 768) ? '#inicio-bolsa-group' : '#filter'; 
364            const filterParams = await getFilterUrlParams(false); 
365            window.location.href = current.origin + current.pathname + "/cursos-com-bolsa?" + filterParams.toString() + hash; 
366          } else{ 
367            if(search.redirectParams.size > 0){ 
368              // remove redirect data 
369              search.redirectParams = new URLSearchParams();  
370              window.history.pushState({}, '', window.location.origin + window.location.pathname); 
371
372            getResults(); 
373          }  
374           
375
376 
377      const getSelection = ($element) => { 
378        return $element.find('input:checked').map( 
379          function(){if($(this).val() > '0') return $(this).val();} 
380        ).get(); 
381
382 
383      const createOption = (value, text, selected=false, cssClass='') => { 
384          let $input = ''; 
385           
386          $input = $('<input type="checkbox">'); 
387          $input.attr('value', value); 
388          if(selected) $input.prop('checked',true); 
389          if(cssClass.length > 0){ 
390            $input.addClass(cssClass); 
391            if(cssClass.indexOf('d-none') >= 0) $input.attr('disabled',''); 
392
393           
394          const $label = $('<label></label>'); 
395          $label.html(text); 
396          $label.prepend($input); 
397          const $option = $('<li role="option"></li>'); 
398          $option.append($label); 
399          return $option; 
400
401 
402      const initSelector = ($element) => { 
403 
404        $element.empty(); 
405        let $txtSearch = $('<label><input type="text" class="filter-search"></label>'); 
406        let $btnClean = $('<a class="btn-clean-element d-none">limpar</a>'); 
407        $element.siblings('button').first().prepend($txtSearch, $btnClean); 
408 
409        $txtSearch.keyup(searchSelect); 
410        $txtSearch.focusout(()=>$('.filter-search').val('')); 
411 
412        $btnClean.click((ev) => { 
413          let $select = $(ev.target).parents('.select-dropdown').first(); 
414          $select.find('input').prop('checked', false); 
415          $select.find('li').removeClass('d-none'); 
416          refreshLabelSelector($select); 
417          checkSearchBtn(); 
418        }); 
419 
420
421   
422      const initSelectorUnidade = async () => { 
423         
424        search.unidades = [<#list unidades as unidade>{ "nomeUsual" : "${unidade.nomeUsual?trim}", "codigoUnidade" : "${unidade.codigoUnidade}", "codRegiaoUnidade" : "${unidade.codRegiaoUnidade}", "friendlyURL" : "${unidade.friendlyURL}"}, </#list>]; 
425 
426        const $element = $('#filter-unidade-content'); 
427        initSelector($element); 
428 
429        let unidParams = search.redirectParams.getAll('unidade'); 
430 
431        let $selectAllOption = createOption(-1, '<b>Selecionar todos</b>', false, 'multiple-selection all-selection'); 
432        $element.append($selectAllOption); 
433        let allSelected = unidParams.length > 0; 
434 
435        for(r of Object.keys(regioes)){ 
436          let unidadesRegiao = search.unidades.filter(ur => ur.codRegiaoUnidade == r).sort((a, b) => a["nomeUsual"].localeCompare(b["nomeUsual"])); 
437          if(unidadesRegiao.length > 0){ 
438            let $rOption = createOption(r, '<b>'+regioes[r]+'</b>', false, 'multiple-selection'); 
439            $element.append($rOption); 
440            let allRegSelected = unidParams.length > 0; 
441            for(u of unidadesRegiao){ 
442              let selected = false; 
443              if(unidParams.length > 0) selected = unidParams.includes(u.friendlyURL); 
444               
445              $element.append(createOption(u.friendlyURL, u.nomeUsual, selected)); 
446              allRegSelected = allRegSelected && selected; 
447              allSelected = allSelected && selected; 
448
449            if(allRegSelected) $rOption.find('input').prop('checked', true); 
450
451
452        if(allSelected) $selectAllOption.find('input').prop('checked', true); 
453 
454        refreshLabelSelector($element.parents('.select-dropdown').first()); 
455        $element.find('input').change(changeUnidade); 
456
457 
458      const initSelectorTipos = ()=>{ 
459         
460        search.tipos = [<#list tipos as t>{ "displayName" : "${tiposRequeridos[t.name]}", "categoryId" : "${t.categoryId}"}, </#list>]; 
461        const $element = $('#filter-tipo-curso-content'); 
462        initSelector($element); 
463 
464        let tiposParams = search.redirectParams.getAll('categoryIdsTipoCurso'); 
465 
466        let $selectAllOption = createOption(-1, '<b>Selecionar todos</b>', false, 'multiple-selection all-selection'); 
467        $element.append($selectAllOption); 
468        let allSelected = tiposParams.length > 0; 
469 
470        search.tipos.sort((a, b) => a["displayName"].localeCompare(b["displayName"])).forEach(tipo => { 
471          let selected = tiposParams.includes(tipo.categoryId); 
472          $element.append(createOption(tipo.categoryId, tipo.displayName, selected)); 
473          allSelected = allSelected && selected; 
474        }); 
475        if(allSelected) $selectAllOption.find('input').prop('checked', true); 
476 
477        refreshLabelSelector($element.parents('.select-dropdown').first()); 
478        $element.find('input').change(changeSelect); 
479 
480
481 
482      const initSelectorAreas = ()=>{ 
483 
484        search.areas = [<#list areas as a>{ "name" : "${a.name?trim}", "categoryId" : "${a.categoryId}"}, </#list>]; 
485        const $element = $('#filter-area-content'); 
486        initSelector($element); 
487 
488        let areasParams = search.redirectParams.getAll('categoryIdsTema'); 
489 
490        let $selectAllOption = createOption(-1, '<b>Selecionar todos</b>', false, 'multiple-selection all-selection') 
491        $element.append($selectAllOption); 
492        let allSelected = areasParams.length > 0; 
493 
494        search.areas.sort((a, b) => a["name"].localeCompare(b["name"])).forEach(area => { 
495            let selected = areasParams.includes(area.categoryId); 
496            $element.append(createOption(area.categoryId, area.name, selected)); 
497            allSelected = allSelected && selected; 
498        }); 
499        if(allSelected) $selectAllOption.find('input').prop('checked', true); 
500 
501        refreshLabelSelector($element.parents('.select-dropdown').first()); 
502        $element.find('input').change(changeSelect); 
503 
504
505 
506      const initSelectorData = ()=>{ 
507         
508        const formatDate = (date) => { 
509          let format = Array.of(date.getFullYear(), (date.getMonth()<9 ?'0':'') + (date.getMonth()+1), (date.getDate()<=9 ?'0':'') + date.getDate()); 
510          return format.join('-'); 
511
512 
513        const calcDate = (startDate, daysDiff)=>{ 
514          const dayMillis = 60 * 60 * 24 * 1000; 
515          daysDiff*=dayMillis; 
516          return new Date(startDate.getTime() + daysDiff); 
517
518 
519        const getDateRange = (startDate, endDate) => formatDate(startDate) + '|' + formatDate(endDate); 
520 
521        const today = new Date(); 
522        const minRange = calcDate(today, -365); 
523        const maxRange = calcDate(today, 365); 
524        const dateOptions = { 
525          "Hoje" : {'dates': getDateRange(minRange, calcDate(today,0)), 'class':'this-month'}, 
526          "Esta Semana" : {'dates': getDateRange(minRange, calcDate(today,7)), 'class':'this-month'}, 
527          "Este mês" : {'dates': getDateRange(minRange, new Date(today.getFullYear(), today.getMonth() + 1, 0)), 'class':'this-month'}, 
528          "Próximos meses" : {'dates': getDateRange(new Date(today.getFullYear(), today.getMonth() + 1), maxRange), 'class':'next-month'} 
529
530 
531        const $element = $('#filter-inicio-bolsa-content'); 
532        initSelector($element); 
533 
534        let dataInicioParams = search.redirectParams.getAll('datasInicioBolsa'); 
535        let dataFimParams = search.redirectParams.getAll('datasFimBolsa'); 
536 
537        $element.append(createOption('', '<b>Bolsas abertas em:</b>', false, 'd-none')); 
538        Object.keys(dateOptions).forEach(option => { 
539          let selected = false; 
540          if(dataInicioParams.length > 0 && dataFimParams.length > 0){ 
541            const [inicio, fim] = dateOptions[option].dates.split('|'); 
542            selected = dataInicioParams.includes(inicio) && dataFimParams.includes(fim); 
543
544          $element.append(createOption(dateOptions[option].dates, option, selected, dateOptions[option].class)); 
545        }); 
546 
547        refreshLabelSelector($element.parents('.select-dropdown').first()); 
548        $element.find('input').change(changeSelect); 
549 
550
551 
552      const initSelectorPeriodo = ()=>{ 
553        const paramPeriodo = search.redirectParams.get('periodosOferta'); 
554        if(paramPeriodo) $('input[name=periodo][value='+paramPeriodo+']').prop('checked', true); 
555
556       
557      const refreshLabelSelector = ($element) => { 
558        let checked = $element.find('input:checked').not('.multiple-selection'); 
559        let $filterSearch = $element.find('.filter-search').first(); 
560        let $btnClean = $element.find('.btn-clean-element').first(); 
561        if(checked.length == 0){ 
562          $filterSearch.attr('placeholder', 'Selecionar'); 
563          if(!$btnClean.hasClass('d-none')) $btnClean.addClass('d-none'); 
564
565        else{ 
566          $filterSearch.attr('placeholder', checked.length == 1 ? checked.parent().text() : (checked.length + ' Selecionados')); 
567          $btnClean.removeClass('d-none'); 
568
569
570 
571      const changeSelect = (ev) => { 
572        const $select = $(ev.target).parents('.select-dropdown').first();     
573        if($(ev.target).attr('value') == -1) $select.find('input').prop('checked', $(ev.target).is(':checked')); 
574        else $select.find('input[value=-1]').prop('checked', false); 
575        refreshLabelSelector($select); 
576
577 
578      const changeUnidade = (ev) => { 
579        const $select = $(ev.target).parents('.select-dropdown');    
580        const siglasRegioes = Object.keys(regioes); 
581        if(siglasRegioes.includes($(ev.target).attr('value'))){ 
582          let unidadesRegiao = search.unidades.filter(u => u.codRegiaoUnidade == $(ev.target).attr('value')).map(u => u.friendlyURL); 
583          $.each($select.find('input'), (i, item) => { 
584            if(unidadesRegiao.includes($(item).val())) $(item).prop('checked', $(ev.target).is(':checked')); 
585          }); 
586        }else if($(ev.target).attr('value') != -1){ 
587          $.each($select.find('input'), (i, item) => { 
588            if(siglasRegioes.includes($(item).val())) $(item).prop('checked', false); 
589          }); 
590
591        changeSelect(ev); 
592 
593
594 
595      const searchSelect = (ev) => { 
596         
597        const normalize = word => { 
598          return word 
599            .toLowerCase() 
600            .trim() 
601            .normalize("NFD") 
602            .replace(/[\u0300-\u036f]/g, ""); 
603
604         
605        let txt = $(ev.target).val(); 
606        let $list = $(ev.target).parents('.select-dropdown').find('ul').first(); 
607        if(txt.trim().length == 0) $list.find('li').removeClass('d-none'); 
608        else{ 
609          txt = normalize(txt); 
610          $.each($list.find('input[type="checkbox"]').not('.multiple-selection').parents("li"), (_,$item) => { 
611            let itemVal = $($item).find('label').text(); 
612            if(normalize(itemVal).indexOf(txt) >=0 ) $($item).removeClass('d-none'); 
613            else if(!$($item).hasClass('d-none')) $($item).addClass('d-none'); 
614          }); 
615          let $multiples = $list.find('input.multiple-selection').parents("li"); 
616          if($multiples.length > 0 && !$multiples.hasClass('d-none')) $multiples.addClass('d-none'); 
617
618 
619
620 
621      const checkSearchBtn = () =>{ 
622         
623        if($('#filter input:checked').length > 0) $('#btn-search').removeAttr('disabled'); 
624        else $('#btn-search').attr('disabled',''); 
625 
626
627   
628      $(async ()=>{ 
629        loading('#loading-container'); 
630         
631        initSelectorAreas(); 
632        initSelectorTipos(); 
633        initSelectorData(); 
634        initSelectorPeriodo(); 
635        await initSelectorUnidade(); 
636         
637        if(search.redirectParams.size > 0){ 
638          $('#btn-search').removeAttr('disabled'); 
639          getResults(); 
640
641        else $('#loading-container').empty(); 
642   
643        $('#btn-search').click(() => applyFilter()); 
644 
645        $('#btn-clean-all').click(() => resetFilter()); 
646 
647        $('#filter input').change(()=> checkSearchBtn()); 
648   
649      }); 
650 
651      const toggleDropdown = (dropdownContent)=>{ 
652          var isExpanded = dropdownContent.getAttribute('aria-expanded') === 'true'; 
653          dropdownContent.setAttribute('aria-expanded', !isExpanded); 
654 
655          if (!isExpanded) { 
656              dropdownContent.classList.add('dropdown-active'); // Ensure class is added before focusing 
657              dropdownContent.querySelectorAll('li.d-none').forEach(item => item.classList.remove('d-none')); 
658          } else { 
659              dropdownContent.classList.remove('dropdown-active'); 
660
661
662 
663      const btnComboList = document.querySelectorAll('.ssp-new-bolsa__filtro-select-content .select-dropdown button'); 
664 
665      btnComboList.forEach((comboList) => { 
666          comboList.addEventListener('click', (e) => { 
667              if(!e.target.classList.contains('btn-active')){ 
668                  let active = document.querySelector('.btn-active'); 
669                  if(active) active.click(); 
670
671              let parentDropdownContent = comboList.parentElement; 
672              let dropdownContent = parentDropdownContent.querySelector('.dropdown-content'); 
673              comboList.classList.toggle('btn-active'); 
674              toggleDropdown(dropdownContent); 
675          }); 
676      }) 
677 
678      window.onclick = function(ev){ 
679 
680          let $target = $(ev.target); 
681          if( $target.parents('.select-dropdown').length == 0){ 
682       
683            let activeCombos = document.querySelectorAll('.select-dropdown .btn-active'); 
684            activeCombos.forEach((combo) => { 
685                let parentDropdownContent = combo.parentElement; 
686                let dropdownContent = parentDropdownContent.querySelector('.dropdown-content'); 
687                combo.classList.toggle('btn-active'); 
688                toggleDropdown(dropdownContent); 
689            }); 
690       
691
692      }  
693   
694</script> 

Educação inclusiva e inovadora que transforma vidas

É com esse propósito que nosso programa de bolsas de estudo, o Senac de Gratuidade, cria oportunidade para pessoas transformarem suas vidas.

Desde 2008, o programa é referência em educação inclusiva e inovadora e já ofereceu mais de 2 milhões de bolsas.

Confira no vídeo ao lado como o programa muda a vida das pessoas na prática!

Publicador de Conteúdos e Mídias

Artur Pettorossi

Técnico em Hotelaria

Senac Piracicaba

Fiz quatro cursos livres e um curso técnico como bolsista. Foi a realização de um sonho, sem falar que o mercado reconhece o diferencial de quem estuda no Senac. Hoje, moro em Portugal e trabalho numa conceituada rede hoteleira.

Suelen Silva

Técnico em Podologia

Senac Santo André

O Senac foi a melhor experiência de aprendizado que já tive. Além da qualidade do ensino, da estrutura e dos laboratórios, o material didático também está incluso. Se não fosse por tudo que o Senac me possibilitou, talvez não alcançaria meus objetivos.

Vitor Ponciano

Ensino Médio Técnico em Administração

Senac Campinas

O jeito Senac de educar é diferente de tudo o que eu conhecia. Durante um dos projetos pedagógicos, criei uma ideia de negócio que deu certo de verdade. Hoje tenho a minha empresa e uma perspectiva de futuro.

Maria de Carvalho

Técnico em Guia de Turismo

Senac Pindamonhangaba

Queria fazer transição de carreira, mas não sabia por onde começar. As aulas, a estrutura e os professores fizeram a diferença. Aprendi o que precisava para tirar meus planos do papel e abrir minha agência de ecoturismo.

Dúvidas frequentes

Clique no assunto e conheça as dúvidas mais frequentes.

Publicador de Conteúdos e Mídias

Como saber o resultado da minha inscrição para bolsa de estudo?

Após finalizar a inscrição, você receberá as informações sobre as próximas etapas no seu e-mail. Se atente à caixa de spam ou acompanhe os detalhes na Área Exclusiva. Todo o processo de solicitação de bolsa acontece de forma on-line. Se a sua bolsa for aprovada, você receberá um link para realizar a sua matrícula no e-mail cadastrado. Caso não faça a matrícula no prazo indicado, você perderá a vaga.

Minha bolsa de estudo foi aprovada. O que preciso fazer para começar meu curso?

Basta seguir todas as orientações que receber do Senac São Paulo por e-mail, como entregar as documentações dentro do prazo, realizar sua matrícula no curso e comparecer às aulas.

Se você tiver menos de 18 anos, também precisará apresentar RG e CPF da pessoa que é sua responsável legal.

Após me matricular, o que acontece se eu não frequentar o curso?

Se você abandonar o curso, sua matrícula será cancelada e você vai precisar esperar seis meses para solicitar uma nova vaga no Programa Senac de Gratuidade. Essa regra existe para estimular a escolha pela bolsa com responsabilidade já que as vagas são limitadas, dando preferência a quem realmente busca essa oportunidade.

Lembramos que, no momento da matrícula, você - ou seu responsável legal - precisa aceitar o termo de compromisso, que apresenta as regras do programa e explica o que acontece em caso de desistência sem justificativa.

Minha bolsa de estudo não foi aprovada. E agora?

Não desanime! Sempre estamos com vagas de bolsas abertas em diversos cursos. Acompanhe as opções em nosso site e tente novamente

A inscrição para bolsa de estudo garante minha vaga gratuita no curso?

Não. A inscrição é apenas a primeira etapa do processo para você solicitar uma bolsa de estudo.

Em até 30 minutos após a realização da sua inscrição, você receberá um e-mail indicando o status do seu pedido de bolsa de estudo e possíveis orientações sobre as próximas etapas.

Realizei minha inscrição para bolsa de estudo, mas fiquei em lista de espera. O que isso significa?

As inscrições para bolsas de estudo acontecem por ordem de chegada. Se você ficou em lista de espera, significa que outras pessoas se inscreveram antes de você e preencheram as vagas disponíveis para aquela turma.

Caso alguém desista ou não avance nas próximas etapas, você receberá nosso e-mail para seguir no processo de inscrição de bolsa.

Posso solicitar mais de uma bolsa de estudos ao mesmo tempo?

Sim, mas existem regras. Para quem é estudante bolsista, as novas solicitações devem ser feitas depois de terminado o curso atual. Além disso, só vai ser possível entrar com novo pedido em outros cursos e em dias e horários diferentes daquele onde já esteja matriculado.

Já estudantes pagantes só podem pedir uma bolsa de estudos em outros dias e horários do curso onde esteja matriculado.

Como faço minha inscrição para bolsa de estudo?

A inscrição para bolsas de estudo no Senac São Paulo é 100% online

Se você não tiver computador, não se preocupe! Você pode fazer a inscrição pelo seu celular e, se precisar, também pode ir até uma de nossas unidades, pois todas oferecem computadores com internet para que possa se inscrever.

Confira nessa página as regras e as etapas para realizar a sua inscrição de bolsa de estudo em cursos livres, técnicos e ensino médio técnico.

Se você quer bolsa para cursos de graduação, confira aqui os programas disponíveis.

Quais cursos fazem parte do Programa Senac de Gratuidade?

O Programa Senac de Gratuidade oferece cursos livres, técnicos, de idiomas, ensino médio técnico e aprendizagem profissional. É uma excelente oportunidade para quem busca qualificação gratuita e de qualidade.

É possível se inscrever para bolsas de estudo em cursos de graduação no Senac?

Não é possível solicitar bolsas de estudo via Programa Senac de Gratuidade para a graduação. Mas, caso você já esteja cursando a
graduação no Senac São Paulo poderá se inscrever em programas específicos como bolsas de extensão universitária, bolsa social, monitoria, iniciação científica, entre outras ações. Conheça os detalhes desses programas.

Como cancelo a inscrição para uma bolsa de estudo?

Você pode cancelar a inscrição para a bolsa de estudo acessando a sua Área Exclusiva em nosso site. É só fazer o seu login e cancelar.

Como o Senac escolhe quem vai receber a bolsa de estudo?

As vagas para bolsas de estudo são preenchidas por ordem de chegada no processo de inscrição, que começa em nosso site sempre 20 dias antes do início do curso, às 12 horas. Caso o início do curso seja prorrogado, é possível que o prazo de inscrição para bolsa seja mais longo do que o normal. 

Recebe a bolsa de estudo quem concluir a inscrição no site enquanto houver vagas disponíveis e tiver aprovação nas etapas seguintes, como entrega de todos os documentos dentro dos prazos indicados.

O Senac poderá pedir documentos que comprovam as informações declaradas na inscrição?

Sim. O Senac poderá solicitar documentos que comprovem a renda, caso haja indícios de irregularidades no preenchimento da inscrição ou da Autodeclaração ou em casos de denúncias de fraude nas informações declaradas na inscrição. Se ainda houver dúvidas sobre o que está registrado na Autodeclaração de Renda, a unidade pode pedir outros documentos que comprovem a renda de cada morador da mesma residência.

Qual é o valor da renda familiar permitida para se inscrever em uma bolsa de estudos?

Você deve ter renda familiar de até 2 salários mínimos federais por pessoa. 

Como descubro o valor da minha renda familiar?

Utilize nossa calculadora de renda familiar e descubra se você poderá solicitar ou não uma bolsa.