diff --git a/app/controllers/admin/features/education/programs_controller.rb b/app/controllers/admin/features/education/programs_controller.rb index 11673833223f05f869e9d9ca4427c7d3b001c540..e2a30b7ba97dc451294896ddb6acbea3595650da 100644 --- a/app/controllers/admin/features/education/programs_controller.rb +++ b/app/controllers/admin/features/education/programs_controller.rb @@ -21,35 +21,24 @@ class Admin::Features::Education::ProgramsController < Admin::Features::Educatio def create @program.university = current_university - respond_to do |format| - if @program.save - format.html { redirect_to [:admin, @program], notice: "Program was successfully created." } - format.json { render :show, status: :created, location: @program } - else - format.html { render :new, status: :unprocessable_entity } - format.json { render json: @program.errors, status: :unprocessable_entity } - end + if @program.save + redirect_to [:admin, @program], notice: "Program was successfully created." + else + render :new, status: :unprocessable_entity end end def update - respond_to do |format| - if @program.update(program_params) - format.html { redirect_to [:admin, @program], notice: "Program was successfully updated." } - format.json { render :show, status: :ok, location: @program } - else - format.html { render :edit, status: :unprocessable_entity } - format.json { render json: @program.errors, status: :unprocessable_entity } - end + if @program.update(program_params) + redirect_to [:admin, @program], notice: "Program was successfully updated." + else + render :edit, status: :unprocessable_entity end end def destroy @program.destroy - respond_to do |format| - format.html { redirect_to admin_features_education_programs_url, notice: "Program was successfully destroyed." } - format.json { head :no_content } - end + redirect_to admin_features_education_programs_url, notice: "Program was successfully destroyed." end protected @@ -58,11 +47,8 @@ class Admin::Features::Education::ProgramsController < Admin::Features::Educatio super add_breadcrumb Features::Education::Program.model_name.human(count: 2), admin_features_education_programs_path if @program - if @program.persisted? - add_breadcrumb @program, [:admin, @program] - else - add_breadcrumb 'Créer' - end + @program.persisted? ? add_breadcrumb(@program, [:admin, @program]) + : add_breadcrumb('Créer') end end diff --git a/app/controllers/admin/features/education/qualiopi/criterions_controller.rb b/app/controllers/admin/features/education/qualiopi/criterions_controller.rb index 5cbf7e19ac7fcc3dfa1a46df05f4e01c29e1e6f0..36d3ce93d96b8d57ca23aca231ff43d2e48e1cb8 100644 --- a/app/controllers/admin/features/education/qualiopi/criterions_controller.rb +++ b/app/controllers/admin/features/education/qualiopi/criterions_controller.rb @@ -9,58 +9,13 @@ class Admin::Features::Education::Qualiopi::CriterionsController < Admin::Featur breadcrumb end - def new - breadcrumb - end - - def edit - breadcrumb - add_breadcrumb 'Modifier' - end - - def create - respond_to do |format| - if @criterion.save - format.html { redirect_to [:admin, @criterion], notice: "Criterion was successfully created." } - format.json { render :show, status: :created, location: [:admin, @criterion] } - else - format.html { render :new, status: :unprocessable_entity } - format.json { render json: @criterion.errors, status: :unprocessable_entity } - end - end - end - - def update - respond_to do |format| - if @criterion.update(criterion_params) - format.html { redirect_to [:admin, @criterion], notice: "Criterion was successfully updated." } - format.json { render :show, status: :ok, location: [:admin, @criterion] } - else - format.html { render :edit, status: :unprocessable_entity } - format.json { render json: @criterion.errors, status: :unprocessable_entity } - end - end - end - - def destroy - @criterion.destroy - respond_to do |format| - format.html { redirect_to admin_qualiopi_criterions_url, notice: "Criterion was successfully destroyed." } - format.json { head :no_content } - end - end - protected def breadcrumb super add_breadcrumb Features::Education::Qualiopi.model_name.human, admin_features_education_qualiopi_criterions_path if @criterion - if @criterion.persisted? - add_breadcrumb @criterion, [:admin, @criterion] - else - add_breadcrumb 'Créer' - end + add_breadcrumb @criterion, [:admin, @criterion] end end diff --git a/app/controllers/admin/features/education/qualiopi/indicators_controller.rb b/app/controllers/admin/features/education/qualiopi/indicators_controller.rb index d21e60aacd34520843b878c4b5b0c25b38abee60..3a023d5623a49e30bfcf91b816161134991ea139 100644 --- a/app/controllers/admin/features/education/qualiopi/indicators_controller.rb +++ b/app/controllers/admin/features/education/qualiopi/indicators_controller.rb @@ -6,73 +6,17 @@ class Admin::Features::Education::Qualiopi::IndicatorsController < Admin::Featur end def show - @programs = current_university.features_education_programs - @checks = [ - :prerequisites, - :objectives, - :duration, - :pricing, - :registration, - :pedagogy, - :evaluation, - :accessibility - ] breadcrumb end - def new - breadcrumb - end - - def edit - breadcrumb - add_breadcrumb 'Modifier' - end - - def create - respond_to do |format| - if @indicator.save - format.html { redirect_to [:admin, @indicator], notice: "Indicator was successfully created." } - format.json { render :show, status: :created, location: [:admin, @indicator] } - else - format.html { render :new, status: :unprocessable_entity } - format.json { render json: @indicator.errors, status: :unprocessable_entity } - end - end - end - - def update - respond_to do |format| - if @indicator.update(indicator_params) - format.html { redirect_to [:admin, @indicator], notice: "Indicator was successfully updated." } - format.json { render :show, status: :ok, location: [:admin, @indicator] } - else - format.html { render :edit, status: :unprocessable_entity } - format.json { render json: [:admin, @indicator].errors, status: :unprocessable_entity } - end - end - end - - def destroy - @indicator.destroy - respond_to do |format| - format.html { redirect_to admin_qualiopi_indicators_url, notice: "Indicator was successfully destroyed." } - format.json { head :no_content } - end - end - protected def breadcrumb super add_breadcrumb Features::Education::Qualiopi.model_name.human(count: 2), admin_features_education_qualiopi_criterions_path if @indicator - if @indicator.persisted? - add_breadcrumb @indicator.criterion, [:admin, @indicator.criterion] - add_breadcrumb @indicator, [:admin, @indicator] - else - add_breadcrumb 'Créer' - end + add_breadcrumb @indicator.criterion, [:admin, @indicator.criterion] + add_breadcrumb @indicator, [:admin, @indicator] end end diff --git a/app/controllers/admin/features/websites/sites_controller.rb b/app/controllers/admin/features/websites/sites_controller.rb index d1d25e62bea013445182273c725cc7a8dde2048b..8f7b03572cf6177fc115411ff2db11e856ea5560 100644 --- a/app/controllers/admin/features/websites/sites_controller.rb +++ b/app/controllers/admin/features/websites/sites_controller.rb @@ -20,37 +20,26 @@ class Admin::Features::Websites::SitesController < Admin::Features::Websites::Ap def create @site.university = current_university - respond_to do |format| - if @site.save - format.html { redirect_to [:admin, @site], notice: "Site was successfully created." } - format.json { render :show, status: :created, location: [:admin, @site] } - else - breadcrumb - format.html { render :new, status: :unprocessable_entity } - format.json { render json: @site.errors, status: :unprocessable_entity } - end + if @site.save + redirect_to [:admin, @site], notice: "Site was successfully created." + else + breadcrumb + render :new, status: :unprocessable_entity end end def update - respond_to do |format| - if @site.update(site_params) - format.html { redirect_to [:admin, @site], notice: "Site was successfully updated." } - format.json { render :show, status: :ok, location: [:admin, @site] } - else - breadcrumb - format.html { render :edit, status: :unprocessable_entity } - format.json { render json: @site.errors, status: :unprocessable_entity } - end + if @site.update(site_params) + redirect_to [:admin, @site], notice: "Site was successfully updated." + else + breadcrumb + render :edit, status: :unprocessable_entity end end def destroy @site.destroy - respond_to do |format| - format.html { redirect_to admin_features_websites_sites_url, notice: "Site was successfully destroyed." } - format.json { head :no_content } - end + redirect_to admin_features_websites_sites_url, notice: "Site was successfully destroyed." end protected @@ -59,11 +48,8 @@ class Admin::Features::Websites::SitesController < Admin::Features::Websites::Ap super add_breadcrumb Features::Websites::Site.model_name.human(count: 2), admin_features_websites_sites_path if @site - if @site.persisted? - add_breadcrumb @site, [:admin, @site] - else - add_breadcrumb 'Créer' - end + @site.persisted? ? add_breadcrumb(@site, [:admin, @site]) + : add_breadcrumb('Créer') end end diff --git a/app/models/features/education/qualiopi/criterion.rb b/app/models/features/education/qualiopi/criterion.rb index 165c442108b1d231f643893d1f559719fae2ae75..d4d2c8307103003f2259d1cae0e9e2030032c0ed 100644 --- a/app/models/features/education/qualiopi/criterion.rb +++ b/app/models/features/education/qualiopi/criterion.rb @@ -10,7 +10,9 @@ # updated_at :datetime not null # class Features::Education::Qualiopi::Criterion < ApplicationRecord - has_many :indicators + has_many :indicators, dependent: :destroy + + validates :number, uniqueness: true def to_s "Critère #{number}" diff --git a/app/models/features/education/qualiopi/indicator.rb b/app/models/features/education/qualiopi/indicator.rb index fdd33a22e1d497295a78f3aab54a3079032bcbb3..ec78f46eda38c0115f2a5727001ddb731c19f37d 100644 --- a/app/models/features/education/qualiopi/indicator.rb +++ b/app/models/features/education/qualiopi/indicator.rb @@ -3,6 +3,7 @@ # Table name: features_education_qualiopi_indicators # # id :uuid not null, primary key +# glossary :text # level_expected :text # name :text # non_conformity :text @@ -24,6 +25,8 @@ class Features::Education::Qualiopi::Indicator < ApplicationRecord belongs_to :criterion + validates :number, uniqueness: true + def to_s "Indicateur #{number}" end diff --git a/app/views/admin/features/education/qualiopi/criterions/_form.html.erb b/app/views/admin/features/education/qualiopi/criterions/_form.html.erb deleted file mode 100644 index fcfea39339334d3e35b11607eb3f4d66cb7ac731..0000000000000000000000000000000000000000 --- a/app/views/admin/features/education/qualiopi/criterions/_form.html.erb +++ /dev/null @@ -1,13 +0,0 @@ -<%= simple_form_for [:admin, criterion] do |f| %> - <div class="row"> - <div class="col-md-2"> - <%= f.input :number %> - </div> - <div class="col-md-10"> - <%= f.input :name %> - </div> - </div> - <% content_for :buttons do %> - <%= submit f %> - <% end %> -<% end %> diff --git a/app/views/admin/features/education/qualiopi/criterions/_qualiopi_criterion.json.jbuilder b/app/views/admin/features/education/qualiopi/criterions/_qualiopi_criterion.json.jbuilder deleted file mode 100644 index 03a3305deb52a8298f51bb9a2579af8e3df8df5d..0000000000000000000000000000000000000000 --- a/app/views/admin/features/education/qualiopi/criterions/_qualiopi_criterion.json.jbuilder +++ /dev/null @@ -1,2 +0,0 @@ -json.extract! qualiopi_criterion, :id, :number, :name, :description, :created_at, :updated_at -json.url qualiopi_criterion_url(qualiopi_criterion, format: :json) diff --git a/app/views/admin/features/education/qualiopi/criterions/edit.html.erb b/app/views/admin/features/education/qualiopi/criterions/edit.html.erb deleted file mode 100644 index 861cd981f3da91f6b39ba32d759d9940768810b6..0000000000000000000000000000000000000000 --- a/app/views/admin/features/education/qualiopi/criterions/edit.html.erb +++ /dev/null @@ -1,3 +0,0 @@ -<% content_for :title, @criterion %> - -<%= render 'form', criterion: @criterion %> diff --git a/app/views/admin/features/education/qualiopi/criterions/index.html.erb b/app/views/admin/features/education/qualiopi/criterions/index.html.erb index f8c3744a6512cb372be1a2198f2e9570f76374e3..fba3e644954b556a2317ab731bfdb496d4fb50ff 100644 --- a/app/views/admin/features/education/qualiopi/criterions/index.html.erb +++ b/app/views/admin/features/education/qualiopi/criterions/index.html.erb @@ -1,14 +1,17 @@ <% content_for :title, Features::Education::Qualiopi.model_name.human %> -<div class="row"> - <% @criterions.each do |criterion| %> - <div class="col-md-6"> - <h2 class="mt-5"><%= link_to criterion, [:admin, criterion] %></h2> - <p><%= criterion.name %></p> +<% @criterions.each do |criterion| %> + <div class="row"> + <div class="col-md-5"> + <h2><%= link_to criterion, [:admin, criterion] %></h2> + <p class="lead"><%= criterion.name %></p> + </div> + <div class="offset-md-1 col-md-6"> <% criterion.indicators.each do |indicator| %> <h3 class="h4"><%= link_to indicator, [:admin, indicator] %></h3> <p><%= indicator.name %></p> <% end %> </div> - <% end %> -</div> + </div> + <hr class="my-5"> +<% end %> diff --git a/app/views/admin/features/education/qualiopi/criterions/index.json.jbuilder b/app/views/admin/features/education/qualiopi/criterions/index.json.jbuilder deleted file mode 100644 index 77519e0c3421e1ed7fff0a7b7bb0e9d78e92efd7..0000000000000000000000000000000000000000 --- a/app/views/admin/features/education/qualiopi/criterions/index.json.jbuilder +++ /dev/null @@ -1 +0,0 @@ -json.array! @qualiopi_criterions, partial: "qualiopi_criterions/qualiopi_criterion", as: :qualiopi_criterion diff --git a/app/views/admin/features/education/qualiopi/criterions/new.html.erb b/app/views/admin/features/education/qualiopi/criterions/new.html.erb deleted file mode 100644 index d268b86181385f2789826069f05ab9b69685c4e1..0000000000000000000000000000000000000000 --- a/app/views/admin/features/education/qualiopi/criterions/new.html.erb +++ /dev/null @@ -1,3 +0,0 @@ -<% content_for :title, Features::Education::Qualiopi::Criterion.model_name.human %> - -<%= render 'form', criterion: @criterion %> diff --git a/app/views/admin/features/education/qualiopi/criterions/show.json.jbuilder b/app/views/admin/features/education/qualiopi/criterions/show.json.jbuilder deleted file mode 100644 index 7cccf9ad5c76fbbf7c4a01241cdb17aa98995f3d..0000000000000000000000000000000000000000 --- a/app/views/admin/features/education/qualiopi/criterions/show.json.jbuilder +++ /dev/null @@ -1 +0,0 @@ -json.partial! "qualiopi_criterions/qualiopi_criterion", qualiopi_criterion: @qualiopi_criterion diff --git a/app/views/admin/features/education/qualiopi/evaluations/_criterion_1.html.erb b/app/views/admin/features/education/qualiopi/evaluations/_criterion_1.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..f211ae47a7622d65727a85bed96d769a89caf17e --- /dev/null +++ b/app/views/admin/features/education/qualiopi/evaluations/_criterion_1.html.erb @@ -0,0 +1,40 @@ +<% +@programs = current_university.features_education_programs +@checks = [ + :prerequisites, + :objectives, + :duration, + :pricing, + :registration, + :pedagogy, + :evaluation, + :accessibility +] +%> +<table class="table mt-5"> + <thead> + <tr> + <th><%= Features::Education::Program.model_name.human %></th> + <% @checks.each do |check| %> + <th><%= Features::Education::Program.human_attribute_name(check) %></th> + <% end %> + </tr> + </thead> + <tbody> + <% @programs.each do |program| %> + <tr> + <td><%= link_to program, [:admin, program] %></td> + <% @checks.each do |check| %> + <% valid = !program.send(check).blank? %> + <th> + <% if valid %> + <span class="fas fa-check text-success"></span> + <% else %> + <span class="fas fa-times text-danger"></span> + <% end %> + </th> + <% end %> + </tr> + <% end %> + </tbody> +</table> diff --git a/app/views/admin/features/education/qualiopi/indicators/_form.html.erb b/app/views/admin/features/education/qualiopi/indicators/_form.html.erb deleted file mode 100644 index 03b4ca9fbf28c92a94f5b0c0b582bc5d8a75e183..0000000000000000000000000000000000000000 --- a/app/views/admin/features/education/qualiopi/indicators/_form.html.erb +++ /dev/null @@ -1,20 +0,0 @@ -<%= simple_form_for [:admin, indicator] do |f| %> - <%= f.association :criterion, include_blank: false %> - <div class="row"> - <div class="col-md-2"> - <%= f.input :number %> - </div> - <div class="col-md-5"> - <%= f.input :name, input_html: { rows: 5 } %> - <%= f.input :level_expected, input_html: { rows: 5 } %> - </div> - <div class="col-md-5"> - <%= f.input :proof, input_html: { rows: 5 } %> - <%= f.input :requirement, input_html: { rows: 5 } %> - <%= f.input :non_conformity, input_html: { rows: 5 } %> - </div> - </div> - <% content_for :buttons do %> - <%= submit f %> - <% end %> -<% end %> diff --git a/app/views/admin/features/education/qualiopi/indicators/_qualiopi_indicator.json.jbuilder b/app/views/admin/features/education/qualiopi/indicators/_qualiopi_indicator.json.jbuilder deleted file mode 100644 index e9a595ae6a4511297ec40998397910582dbdf11c..0000000000000000000000000000000000000000 --- a/app/views/admin/features/education/qualiopi/indicators/_qualiopi_indicator.json.jbuilder +++ /dev/null @@ -1,2 +0,0 @@ -json.extract! qualiopi_indicator, :id, :criterion_id, :number, :name, :level_expected, :proof, :requirement, :non_conformity, :created_at, :updated_at -json.url qualiopi_indicator_url(qualiopi_indicator, format: :json) diff --git a/app/views/admin/features/education/qualiopi/indicators/edit.html.erb b/app/views/admin/features/education/qualiopi/indicators/edit.html.erb deleted file mode 100644 index 11bc32d701ac7dfdd1b2794b3167dd2be0d98c9a..0000000000000000000000000000000000000000 --- a/app/views/admin/features/education/qualiopi/indicators/edit.html.erb +++ /dev/null @@ -1,3 +0,0 @@ -<% content_for :title, @indicator %> - -<%= render 'form', indicator: @indicator %> diff --git a/app/views/admin/features/education/qualiopi/indicators/index.json.jbuilder b/app/views/admin/features/education/qualiopi/indicators/index.json.jbuilder deleted file mode 100644 index e44b0de717e85b79f1071176c724a61f6d285f2f..0000000000000000000000000000000000000000 --- a/app/views/admin/features/education/qualiopi/indicators/index.json.jbuilder +++ /dev/null @@ -1 +0,0 @@ -json.array! @qualiopi_indicators, partial: "qualiopi_indicators/qualiopi_indicator", as: :qualiopi_indicator diff --git a/app/views/admin/features/education/qualiopi/indicators/new.html.erb b/app/views/admin/features/education/qualiopi/indicators/new.html.erb deleted file mode 100644 index 73009c588a7ef47db4d0e4d79a9f6e269052fd90..0000000000000000000000000000000000000000 --- a/app/views/admin/features/education/qualiopi/indicators/new.html.erb +++ /dev/null @@ -1,3 +0,0 @@ -<% content_for :title, Features::Education::Qualiopi::Indicator.model_name.human %> - -<%= render 'form', indicator: @indicator %> diff --git a/app/views/admin/features/education/qualiopi/indicators/show.html.erb b/app/views/admin/features/education/qualiopi/indicators/show.html.erb index a935cc4bac37171a849ee044e81eaa9e0d24f694..e6bd0979ff4fc80a9ef821e96f65cbd21b3f3ca1 100644 --- a/app/views/admin/features/education/qualiopi/indicators/show.html.erb +++ b/app/views/admin/features/education/qualiopi/indicators/show.html.erb @@ -3,38 +3,20 @@ <p class="lead"><%= @indicator.name %></p> <div class="row"> - <% [:level_expected, :proof, :requirement, :non_conformity].each do |attribute| %> - <div class="col-md-3"> - <h2 class="h4 mt-4"><%= Features::Education::Qualiopi::Indicator.human_attribute_name(attribute) %></h2> - <p><%= @indicator.send attribute %></p> + <% [:level_expected, :proof, :requirement, :non_conformity, :glossary].each do |attribute| %> + <% + name = Features::Education::Qualiopi::Indicator.human_attribute_name(attribute) + value = @indicator.send attribute + next if value.blank? + %> + <div class="col-md-4"> + <h2 class="h4 mt-4"><%= name %></h2> + <%= simple_format value %> </div> <% end %> </div> -<table class="table mt-5"> - <thead> - <tr> - <th><%= Features::Education::Program.model_name.human %></th> - <% @checks.each do |check| %> - <th><%= Features::Education::Program.human_attribute_name(check) %></th> - <% end %> - </tr> - </thead> - <tbody> - <% @programs.each do |program| %> - <tr> - <td><%= link_to program, [:admin, program] %></td> - <% @checks.each do |check| %> - <% valid = !program.send(check).blank? %> - <th> - <% if valid %> - <span class="fas fa-check text-success"></span> - <% else %> - <span class="fas fa-times text-danger"></span> - <% end %> - </th> - <% end %> - </tr> - <% end %> - </tbody> -</table> +<% begin %> +<%= render "admin/features/education/qualiopi/evaluations/criterion_#{@indicator.number}" %> +<% rescue %> +<% end %> diff --git a/app/views/admin/features/education/qualiopi/indicators/show.json.jbuilder b/app/views/admin/features/education/qualiopi/indicators/show.json.jbuilder deleted file mode 100644 index 4f4121acea05a3e628f72c965c42d44c780f3420..0000000000000000000000000000000000000000 --- a/app/views/admin/features/education/qualiopi/indicators/show.json.jbuilder +++ /dev/null @@ -1 +0,0 @@ -json.partial! "qualiopi_indicators/qualiopi_indicator", qualiopi_indicator: @qualiopi_indicator diff --git a/config/locales/features/education/fr.yml b/config/locales/features/education/fr.yml index b04bf2defead62e596860635b873f7d5498b1c04..cbdd5773654fbb41b2dd846ae02a0feb71cd9463 100644 --- a/config/locales/features/education/fr.yml +++ b/config/locales/features/education/fr.yml @@ -43,6 +43,7 @@ fr: proof: Éléments de preuve requirement: Obligations spécifiques non_conformity: Non-conformité + glossary: Glossaire enums: features/education/program: level: diff --git a/config/routes/admin/features/education.rb b/config/routes/admin/features/education.rb index eac3359ce6f2181bec8e1582992534c019951c15..5d3c859b4037fe6c2531538f0ee702641b82cb22 100644 --- a/config/routes/admin/features/education.rb +++ b/config/routes/admin/features/education.rb @@ -1,8 +1,8 @@ namespace :education do resources :programs namespace :qualiopi do - resources :criterions - resources :indicators + resources :criterions, only: [:index, :show] + resources :indicators, only: [:index, :show] end get 'dashboard' => 'dashboard#index', as: :dashboard end diff --git a/db/migrate/20210811171021_add_glossary_to_features_education_qualiopi_indicator.rb b/db/migrate/20210811171021_add_glossary_to_features_education_qualiopi_indicator.rb new file mode 100644 index 0000000000000000000000000000000000000000..e5c3e2c24cbfecb6c54c9eecd9e5b78fff4b9dd0 --- /dev/null +++ b/db/migrate/20210811171021_add_glossary_to_features_education_qualiopi_indicator.rb @@ -0,0 +1,5 @@ +class AddGlossaryToFeaturesEducationQualiopiIndicator < ActiveRecord::Migration[6.1] + def change + add_column :features_education_qualiopi_indicators, :glossary, :text + end +end diff --git a/db/schema.rb b/db/schema.rb index 99bb8102e04def062a9912d88d1c32c7e5423499..153042639f3ab3468190d2af0e8226c42c6b431f 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2021_08_11_102819) do +ActiveRecord::Schema.define(version: 2021_08_11_171021) do # These are extensions that must be enabled in order to support this database enable_extension "pgcrypto" @@ -55,6 +55,7 @@ ActiveRecord::Schema.define(version: 2021_08_11_102819) do t.text "non_conformity" t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false + t.text "glossary" t.index ["criterion_id"], name: "index_features_education_qualiopi_indicators_on_criterion_id" end diff --git a/db/seeds.rb b/db/seeds.rb index 2c7336dfae3b18ff8775035251e1786664993ad4..a5b468c51b8b3723c7861477f4891b3652a9f008 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -1 +1,280 @@ University.create name: 'Osuny', identifier: 'osuny' + +Features::Education::Qualiopi::Criterion.destroy_all +Features::Education::Qualiopi::Criterion.create [ + { + id: '0285619c-cfc8-4858-bef6-74adc0aac055', + number: 1, + name: 'Les conditions d’information du public sur les prestations proposées, les délais pour y accéder et les résultats obtenus' + }, + { + id: 'd0127e8f-d121-4a02-a280-275e1e060573', + number: 2, + name: 'L’identification précise des objectifs des prestations proposées et l’adaptation de ces prestations aux publics bénéficiaires lors de la conception des prestations' + }, + { + id: '50168ad5-ef10-43cd-a76e-050278e99705', + number: 3, + name: 'L’adaptation aux publics bénéficiaires des prestations et des modalités d’accueil, d’accompagnement, de suivi et d’évaluation mises en œuvre' + }, + { + id: '4207cf14-b32f-4ee3-a0e9-5a472801e4d3', + number: 4, + name: 'L’adéquation des moyens pédagogiques, techniques et d’encadrement aux prestations mises en œuvre' + }, + { + id: '79185ec5-4249-48ce-994f-6ca3750139e6', + number: 5, + name: 'La qualification et le développement des connaissances et compétences des personnels chargés de mettre en œuvre les prestations' + }, + { + id: 'b87aa3c2-37d6-4576-ae2c-e5ea2a74e7e4', + number: 6, + name: 'L’inscription et l’investissement du prestataire dans son environnement professionnel' + }, + { + id: 'fcd31ee6-a512-4e1a-9ff2-6f67b5c3d61d', + number: 7, + name: 'Le recueil et la prise en compte des appréciations et des réclamations formulées par les parties prenantes aux prestations délivrées' + } +] + +Features::Education::Qualiopi::Indicator.destroy_all +Features::Education::Qualiopi::Indicator.create [ + { + id: 'f5632d1a-09f1-4cd1-98d1-c6de4b7728d6', + criterion_id: '0285619c-cfc8-4858-bef6-74adc0aac055', + number: 1, + name: 'Le prestataire diffuse une information accessible au public, détaillée et vérifiable sur les prestations proposées : prérequis, objectifs, durée, modalités et délais d’accès, tarifs, contacts, méthodes mobilisées et modalités d’évaluation, accessibilité aux personnes handicapées.' + }, + { + id: '239a7a91-f7ae-4e6c-a5c5-d0895ec2d7f6', + criterion_id: '0285619c-cfc8-4858-bef6-74adc0aac055', + number: 2, + name: 'Le prestataire diffuse des indicateurs de résultats adaptés à la nature des prestations mises en œuvre et des publics accueillis.' + }, + { + id: '65781e6b-275b-4720-a2a8-cf8088067b7b', + criterion_id: '0285619c-cfc8-4858-bef6-74adc0aac055', + number: 3, + name: 'Lorsque le prestataire met en œuvre des prestations conduisant à une certification professionnelle, il informe sur les taux d’obtention des certifications préparées, les possibilités de valider un/ou des blocs de compétences, ainsi que sur les équivalences, passerelles, suites de parcours et les débouchés.' + }, + { + id: 'aa49d079-5997-4da1-8f09-830d1d7f79ab', + criterion_id: 'd0127e8f-d121-4a02-a280-275e1e060573', + number: 4, + name: 'Le prestataire analyse le besoin du bénéficiaire en lien avec l’entreprise et/ou le financeur concerné(s).' + }, + { + id: '2bcf2adc-deb9-412f-9c10-0a11592ca643', + criterion_id: 'd0127e8f-d121-4a02-a280-275e1e060573', + number: 5, + name: 'Le prestataire définit les objectifs opérationnels et évaluables de la prestation.' + }, + { + id: 'fb752ef0-36d3-487d-865f-3633f5378a66', + criterion_id: 'd0127e8f-d121-4a02-a280-275e1e060573', + number: 6, + name: 'Le prestataire établit les contenus et les modalités de mise en œuvre de la prestation, adaptés aux objectifs définis et aux publics bénéficiaires.' + }, + { + id: '56370de4-fd54-407a-a3c5-a7fce07a0463', + criterion_id: 'd0127e8f-d121-4a02-a280-275e1e060573', + number: 7, + name: 'Lorsque le prestataire met en œuvre des prestations conduisant à une certification professionnelle, il s’assure de l’adéquation du ou des contenus de la prestation aux exigences de la certification visée.' + }, + { + id: '11d73ed4-ecf1-403b-9ea2-b8145cbf941a', + criterion_id: 'd0127e8f-d121-4a02-a280-275e1e060573', + number: 8, + name: 'Le prestataire détermine les procédures de positionnement et d’évaluation des acquis à l’entrée de la prestation.' + }, + { + id: 'c0616f05-3dda-4a47-b0db-d716c9b19105', + criterion_id: '50168ad5-ef10-43cd-a76e-050278e99705', + number: 9, + name: 'Le prestataire informe les publics bénéficiaires des conditions de déroulement de la prestation.' + }, + { + id: 'c728314d-2426-4d69-b4d6-dad1c2a3a47f', + criterion_id: '50168ad5-ef10-43cd-a76e-050278e99705', + number: 10, + name: 'Le prestataire met en œuvre et adapte la prestation, l’accompagnement et le suivi aux publics bénéficiaires.' + }, + { + id: '67f2a17b-51ad-4fd0-b157-29f16badf6f1', + criterion_id: '50168ad5-ef10-43cd-a76e-050278e99705', + number: 11, + name: 'Le prestataire évalue l’atteinte par les publics bénéficiaires des objectifs de la prestation.' + }, + { + id: '60ff9d8e-8b26-4ad2-82d6-1428f07e2312', + criterion_id: '50168ad5-ef10-43cd-a76e-050278e99705', + number: 12, + name: 'Le prestataire décrit et met en œuvre les mesures pour favoriser l’engagement des bénéficiaires et prévenir les ruptures de parcours.' + }, + { + id: '3034fdc7-cc65-422c-bb64-5f881390f49e', + criterion_id: '50168ad5-ef10-43cd-a76e-050278e99705', + number: 13, + name: 'Pour les formations en alternance, le prestataire, en lien avec l’entreprise, anticipe avec l’apprenant les missions confiées, à court, moyen et long terme, et assure la coordination et la progressivité des apprentissages réalisés en centre de formation et en entreprise.' + }, + { + id: '472e0c7c-55e0-49af-a6ae-bdb606640042', + criterion_id: '50168ad5-ef10-43cd-a76e-050278e99705', + number: 14, + name: 'Le prestataire met en œuvre un accompagnement socio-professionnel, éducatif et relatif à l’exercice de la citoyenneté.' + }, + { + id: '5d7954b8-79f7-4ff0-a2bc-efe10dba729b', + criterion_id: '50168ad5-ef10-43cd-a76e-050278e99705', + number: 15, + name: 'Le prestataire informe les apprentis de leurs droits et devoirs en tant qu’apprentis et salariés ainsi que des règles applicables en matière de santé et de sécurité en milieu professionnel.' + }, + { + id: '6a0eb50b-725d-44c7-8e05-57eb8cf2c8aa', + criterion_id: '50168ad5-ef10-43cd-a76e-050278e99705', + number: 16, + name: 'Lorsque le prestataire met en œuvre des formations conduisant à une certification professionnelle, il s’assure que les conditions de présentation des bénéficiaires à la certification respectent les exigences formelles de l’autorité de certification.' + }, + { + id: 'ad070df9-fb5e-48c7-85a6-f17a7d357e25', + criterion_id: '4207cf14-b32f-4ee3-a0e9-5a472801e4d3', + number: 17, + name: 'Le prestataire met à disposition ou s’assure de la mise à disposition des moyens humains et techniques adaptés et d’un environnement approprié (conditions, locaux, équipements, plateaux techniques...).' + }, + { + id: '4599987c-d653-44ad-8de9-636b72b6440c', + criterion_id: '4207cf14-b32f-4ee3-a0e9-5a472801e4d3', + number: 18, + name: 'Le prestataire mobilise et coordonne les différents intervenants internes et/ou externes (pédagogiques, administratifs, logistiques, commerciaux...).' + }, + { + id: 'd69cef52-4e75-409c-8d8b-7766ac90321c', + criterion_id: '4207cf14-b32f-4ee3-a0e9-5a472801e4d3', + number: 19, + name: 'Le prestataire met à disposition du bénéficiaire des ressources pédagogiques et permet à celui-ci de se les approprier.' + }, + { + id: '961639a6-4049-45ad-b1e0-f51017926458', + criterion_id: '4207cf14-b32f-4ee3-a0e9-5a472801e4d3', + number: 20, + name: 'Le prestataire dispose d’un personnel dédié à l’appui à la mobilité nationale et internationale, d’un référent handicap et d’un conseil de perfectionnement.' + }, + { + id: '5f4cbf53-d044-4783-a7a7-ccaadb6cadb1', + criterion_id: '79185ec5-4249-48ce-994f-6ca3750139e6', + number: 21, + name: 'Le prestataire détermine, mobilise et évalue les compétences des différents intervenants internes et/ou externes, adaptées aux prestations.' + }, + { + id: 'd4844442-7492-4417-b172-ea661e069dfc', + criterion_id: '79185ec5-4249-48ce-994f-6ca3750139e6', + number: 22, + name: 'Le prestataire entretient et développe les compétences de ses salariés, adaptées aux prestations qu’il délivre.' + }, + { + id: 'cf646004-4064-4907-8859-daf73c9196bf', + criterion_id: 'b87aa3c2-37d6-4576-ae2c-e5ea2a74e7e4', + number: 23, + name: 'Le prestataire réalise une veille légale et réglementaire sur le champ de la formation professionnelle et en exploite les enseignements.', + level_expected: 'Démontrer la mise en place d’une veille légale et réglementaire et son exploitation.', + proof: 'Abonnements, adhésions, participation aux salons professionnels, conférences, groupes normatifs, actualisation des supports d’information (publicité) ou de contractualisation, des dispositifs mobilisés (règles CPF) en fonction des évolutions juridiques, veille réglementaire en matière de handicap. + + Pour la VAE : documentation à jour sur le cadre légal du droit individuel à la VAE et de ses modalités de financement.', + non_conformity: 'Dans l’échantillon audité, une non-conformité mineure est caractérisée par une exploitation partielle de la veille mise en place.' + }, + { + id: '94c4bf4c-ca0a-4676-a9bf-22a4f743a4d7', + criterion_id: 'b87aa3c2-37d6-4576-ae2c-e5ea2a74e7e4', + number: 24, + name: 'Le prestataire réalise une veille sur les évolutions des compétences, des métiers et des emplois dans ses secteurs d’intervention et en exploite les enseignements.', + level_expected: 'Démontrer la mise en place d’une veille sur les thèmes de l’indicateur et son impact éventuel sur les prestations.', + proof: 'Veille économique et documents y afférents, participations à des conférences, colloques, salon, adhésion à un réseau professionnel (syndicat, fédération, forums), abonnements à des revues professionnelles. Diffusion des éléments issus de la veille au personnel du prestataire, évolutions apportées au contenu des prestations proposées.', + requirement: 'Nouveaux entrants : Démontrer la mise en place d’une veille économique. L’impact éventuel sera audité lors de l’audit de surveillance.', + non_conformity: 'Dans l’échantillon audité, une non-conformité mineure est caractérisée par une exploitation partielle de la veille mise en place.' + }, + { + id: '05413135-8136-47a5-88f9-16f13167ff2d', + criterion_id: 'b87aa3c2-37d6-4576-ae2c-e5ea2a74e7e4', + number: 25, + name: 'Le prestataire réalise une veille sur les innovations pédagogiques et technologiques permettant une évolution de ses prestations et en exploite les enseignements.', + level_expected: 'Démontrer la mise en place d’une veille sur les thèmes de l’indicateur et son impact éventuel sur les prestations.', + proof: 'Veille économique et documents y afférents, participations à des conférences, colloques, salons, groupes de réflexions et d’analyse de pratiques, adhésion à un réseau professionnel (syndicat, fédération, forums), abonnements à des revues professionnelles. Diffusion des éléments issus de la veille au personnel du prestataire, évolutions apportées au contenu des prestations proposées. Pour les organismes qui accueillent des personnes en situation de handicap, participation à des conférences thématiques, colloques, salons, groupes de réflexions et d’analyse de pratiques en matière d’innovations pédagogiques et technologiques pour le public visé.', + requirement: 'Nouveaux entrants : démontrer la mise en place d’une veille pédagogique et technologique. L’indicateur sera audité lors de l’audit de surveillance.', + non_conformity: 'Dans l’échantillon audité, une non-conformité mineure est caractérisée par une exploitation partielle de la veille mise en place.' + }, + { + id: '3a5e11e4-d82d-4331-aa51-7666d80604df', + criterion_id: 'b87aa3c2-37d6-4576-ae2c-e5ea2a74e7e4', + number: 26, + name: 'Le prestataire mobilise les expertises, outils et réseaux nécessaires pour accueillir, accompagner/former ou orienter les publics en situation de handicap.', + level_expected: 'Démontrer la mise en place d’un réseau de partenaires/experts/acteurs du champ du handicap, mobilisable par les personnels et dans le cas d’accueil de personnes en situation de handicap, préciser les mesures spécifiques mises en œuvre.', + proof: 'Liste des partenaires du territoire susceptibles d’aider le prestataire dans la prise en compte des PSH, dont les partenaires spécialisés intervenants pour le compte de l’Agefiph et du Fiphfp. + + Participation aux instances et manifestation des partenaires, compte-rendu de rencontres. Compétences et connaissances du référent handicap.', + non_conformity: 'Dans l’échantillon audité, le non-respect (même partiel) de cet indicateur entraîne une non-conformité majeure.', + requirement: 'Nouveaux entrants : démontrer la mise en place d’un réseau de partenaires/experts/acteurs du champ du handicap.', + glossary: 'Agefiph : Association de gestion du fonds pour l’insertion des personnes handicapées (www.agefiph.fr). + + Fiphfp : Fonds pour l’insertion des PSH dans la fonction publique.' + }, + { + id: '5cbf65ab-1ad0-44c2-bf6f-e3098d734b77', + criterion_id: 'b87aa3c2-37d6-4576-ae2c-e5ea2a74e7e4', + number: 27, + name: 'Lorsque le prestataire fait appel à la sous-traitance ou au portage salarial, il s’assure du respect de la conformité au présent référentiel.', + level_expected: 'Démontrer les dispositions mises en place pour vérifier le respect de la conformité au présent référentiel par le sous-traitant ou le salarié porté.', + proof: 'Contrats de prestations de service, tous les éléments qui permettent de démontrer les modalités de sélection et de pilotage des sous-traitants (process de sélection, justificatifs présentés par les sous-traitants et les salariés portés, animation qualité dédiée, charte). NB : Cela ne signifie pas une obligation de certification des sous-traitants : la responsabilité de la qualité appartient au donneur d’ordre, charge à ce dernier de mettre en place les modalités qui assurent la chaîne de la qualité y compris avec les sous-traitants.', + non_conformity: 'Dans l’échantillon audité, le non-respect (même partiel) de cet indicateur entraîne une non-conformité majeure.' + }, + { + id: '2fa64872-89d3-47c9-841c-630fc10f2d77', + criterion_id: 'b87aa3c2-37d6-4576-ae2c-e5ea2a74e7e4', + number: 28, + name: 'Lorsque les prestations dispensées au bénéficiaire comprennent des périodes de formation en situation de travail, le prestataire mobilise son réseau de partenaires socio-économiques pour coconstruire l’ingénierie de formation et favoriser l’accueil en entreprise.', + level_expected: 'Démontrer l’existence d’un réseau de partenaires socio-économiques mobilisé tout au long de la prestation.', + proof: 'Comités de pilotage, comptes rendus de réunions, liste des entreprises partenaires, conventions de partenariats, contacts réseau SPE, livret alternance, informations sur les partenariats. NB : Cet indicateur vise tous les prestataires de formation, y compris les CFA, dans leur capacité à mobiliser un réseau de partenaires lors des périodes de formation en situation de travail. Pour les apprentis, ces périodes correspondent par définition à la formation pratique en entreprise ; pour les salariés en contrat de professionnalisation, il peut s’agir des périodes d’acquisition d’un savoir-faire en entreprise', + non_conformity: 'Dans l’échantillon audité, une non-conformité mineure est caractérisée par un défaut ponctuel et non répétitif dans la mobilisation des partenaires.', + glossary: 'Partenaires socio-économiques : entreprises (tous statuts) ; chambres consulaires : CCI, agriculture et CMA ; établissement public de coopération intercommunale (EPCI), communautés d’agglomération, communautés de communes ; structures de l’insertion par l’activité économique : ateliers et chantiers d’insertion (ACI), association intermédiaire (AI), entreprise d’insertion (EI) et entreprise de travail temporaire d’insertion (ETTI) ; service public de l’emploi, service public de l’orientation ; branches professionnelles ; centres sociaux ; organismes paritaires, association Transition Pro (CPIR), opérateurs CEP ; services de l’État, etc.' + }, + { + id: '3c2e2f5d-bd5c-4730-bfb3-8e9ccc93e687', + criterion_id: 'b87aa3c2-37d6-4576-ae2c-e5ea2a74e7e4', + number: 29, + name: 'Le prestataire développe des actions qui concourent à l’insertion professionnelle ou la poursuite d’étude par la voie de l’apprentissage ou par toute autre voie permettant de développer leurs connaissances et leurs compétences.', + level_expected: 'Démontrer l’existence d’actions qui concourent à l’insertion professionnelle ou la poursuite d’études.', + proof: 'Actions visant à favoriser l’insertion professionnelle des apprenants (salon d’orientation, visite d’entreprise, atelier CV/lettre de motivation, aide à la recherche d’emploi, réseau d’anciens élèves), actions de promotion de la poursuite d’étude, partenariats avec des acteurs de l’insertion et de l’emploi et avec le monde professionnel.', + non_conformity: 'Dans l’échantillon audité, le non-respect (même partiel) de cet indicateur entraîne une non-conformité majeure.' + }, + { + id: 'c0d8a5ed-584d-4e78-8b1e-88d0efcb26a5', + criterion_id: 'fcd31ee6-a512-4e1a-9ff2-6f67b5c3d61d', + number: 30, + name: 'Le prestataire recueille les appréciations des parties prenantes : bénéficiaires, financeurs, équipes pédagogiques et entreprises concernées.', + level_expected: 'Démontrer la mise en place d’un système de collecte des appréciations à une fréquence pertinente, incluant des dispositifs de relance et permettant une libre expression.', + proof: 'Enquête de satisfaction, questionnaire, compte-rendu d’entretiens, évaluation à chaud et/ou à froid, analyse et traitement des appréciations formulées par les parties prenantes. Pour les CBC : questionnaire d’évaluation à l’issue du bilan et à 6 mois. NB : Les modalités de recueil selon la partie prenante peuvent être différentes. Les évaluations des acquis ne sont pas un élément de preuve probant pour cet indicateur.', + non_conformity: 'Dans l’échantillon audité, une non-conformité mineure est caractérisée par une mise en œuvre partielle des mesures définies.' + }, + { + id: '87ef7ca5-fcd8-40d8-bc96-7ecbed4bb3c9', + criterion_id: 'fcd31ee6-a512-4e1a-9ff2-6f67b5c3d61d', + number: 31, + name: 'Le prestataire met en œuvre des modalités de traitement des difficultés rencontrées par les parties prenantes, des réclamations exprimées par ces dernières, des aléas survenus en cours de prestation.', + level_expected: 'Démontrer la mise en place de modalités de traitement des aléas, difficultés et réclamations.', + proof: 'Description et mise en œuvre de ces modalités (accusé de réception des réclamations et réponses apportées aux réclamants), enquêtes de satisfaction, analyse et traitement des réclamations formulées par les stagiaires, système de médiation.', + requirement: '', + non_conformity: 'Dans l’échantillon audité, le non-respect (même partiel) de cet indicateur entraîne une non-conformité majeure.', + glossary: 'Réclamation : action visant à faire respecter un droit, ou à demander une chose due, recueillie par écrit.' + }, + { + id: 'e664cea6-7dbb-4b0f-9407-ecd870cee7ac', + criterion_id: 'fcd31ee6-a512-4e1a-9ff2-6f67b5c3d61d', + number: 32, + name: 'Le prestataire met en œuvre des mesures d’amélioration à partir de l’analyse des appréciations et des réclamations.', + level_expected: 'Démontrer la mise en place d’une démarche d’amélioration continue.', + proof: 'Identification et réflexion sur les causes d’abandon ou les motifs d’insatisfaction, plans d’actions d’amélioration, mise en œuvre d’actions spécifiques. Pour la VAE : partage des résultats de l’accompagnement (nombre de candidats en début et fin d’accompagnement, taux et causes d’abandon, taux de réussite à la VAE).', + requirement: 'Nouveaux entrants : l’indicateur sera audité à l’audit de surveillance.', + non_conformity: 'Dans l’échantillon audité, le non-respect (même partiel) de cet indicateur entraîne une non-conformité majeure.' + } +]