amelioration(delai.traitement): revoie l'affichage du delais d'instruction
Co-authored-by: Colin Darie <colin@darie.eu>
This commit is contained in:
parent
474fde3380
commit
f26a4bc041
8 changed files with 60 additions and 20 deletions
14
app/components/procedure/estimated_delay_component.rb
Normal file
14
app/components/procedure/estimated_delay_component.rb
Normal file
|
@ -0,0 +1,14 @@
|
|||
class Procedure::EstimatedDelayComponent < ApplicationComponent
|
||||
def initialize(procedure:)
|
||||
@procedure = procedure
|
||||
@fastest, @mean, @slow = procedure.usual_traitement_time_for_recent_dossiers(ProcedureStatsConcern::NB_DAYS_RECENT_DOSSIERS)
|
||||
end
|
||||
|
||||
def estimation_present?
|
||||
@fastest && @mean && @slow
|
||||
end
|
||||
|
||||
def render?
|
||||
estimation_present?
|
||||
end
|
||||
end
|
|
@ -0,0 +1,6 @@
|
|||
---
|
||||
en:
|
||||
explanation: "Based on %{pencentile}% during the last %{nb_recent_dossiers} days, the instruction time is :"
|
||||
fast_html: "<strong>In the best cast scenario</strong> : <strong>%{estimation}</strong>."
|
||||
mean_html: "If your file <strong>requires minor adjustments</strong>, the instruction time is <strong>%{estimation}</strong>."
|
||||
slow_html: "If you file <strong>is missing some information</strong> which requires a lot of exchanges with the administration, the instruction time is around <strong>%{estimation}</strong>."
|
|
@ -0,0 +1,6 @@
|
|||
---
|
||||
fr:
|
||||
explanation: Selon nos estimations, à partir des délais d’instruction constatés sur %{percentile}% des demandes qui ont été traitées lors des %{nb_recent_dossiers} derniers jours, les délais d’instruction sont les suivants
|
||||
fast_html: "<strong>Dans le meilleur des cas</strong>, le délai d’instruction est : <strong>%{estimation}</strong>."
|
||||
mean_html: "Les <strong>dossiers demandant quelques échanges</strong> le délai d’instruction est d‘environ : <strong>%{estimation}</strong>."
|
||||
slow_html: "Si votre <strong>dossier est incomplet</strong> ou qu’il faut beaucoup d’échanges avec l’administration, le délai d’instruction est d’environ <strong>%{estimation}</strong>."
|
|
@ -0,0 +1,10 @@
|
|||
- cache(@procedure.id, expires_in: 1.day) do
|
||||
- if estimation_present?
|
||||
= render Dsfr::AlertComponent.new(state: :info, size: :sm, extra_class_names: 'fr-mb-2w') do |c|
|
||||
- c.body do
|
||||
%p= t('.explanation', percentile: ProcedureStatsConcern::USUAL_TRAITEMENT_TIME_PERCENTILE, nb_recent_dossiers: ProcedureStatsConcern::NB_DAYS_RECENT_DOSSIERS)
|
||||
%ul
|
||||
%li= t('.fast_html', estimation: distance_of_time_in_words(@fastest))
|
||||
%li= t('.mean_html', estimation: distance_of_time_in_words(@mean))
|
||||
%li= t('.slow_html', estimation: distance_of_time_in_words(@slow))
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
- cache(procedure.id, expires_in: 1.day) do
|
||||
- if procedure.usual_traitement_time_for_recent_dossiers(ProcedureStatsConcern::NB_DAYS_RECENT_DOSSIERS)
|
||||
%p
|
||||
Habituellement, les dossiers de cette démarche sont traités dans un délai de #{distance_of_time_in_words(procedure.usual_traitement_time_for_recent_dossiers(ProcedureStatsConcern::NB_DAYS_RECENT_DOSSIERS))}.
|
||||
%p
|
||||
Cette estimation est calculée automatiquement à partir des délais d’instruction constatés sur #{ProcedureStatsConcern::USUAL_TRAITEMENT_TIME_PERCENTILE}% des demandes qui ont été traitées lors des #{ProcedureStatsConcern::NB_DAYS_RECENT_DOSSIERS} derniers jours. Le délai réel peut être différent, en fonction du type de démarche (par exemple pour un appel à projet avec date de décision fixe).
|
|
@ -33,8 +33,7 @@
|
|||
%p{ role: 'status' }
|
||||
= t('views.users.dossiers.show.status_overview.en_construction_html')
|
||||
|
||||
= render partial: 'users/dossiers/show/estimated_delay', locals: { procedure: dossier.procedure }
|
||||
|
||||
= render Procedure::EstimatedDelayComponent.new(procedure: dossier.procedure)
|
||||
%p
|
||||
= t('views.users.dossiers.show.status_overview.use_mailbox_for_questions_html', mailbox_url: messagerie_dossier_url(dossier))
|
||||
|
||||
|
@ -50,7 +49,7 @@
|
|||
%p
|
||||
= t('views.users.dossiers.show.status_overview.delay_text_sva_svr', date: l(dossier.sva_svr_decision_on, format: :long))
|
||||
|
||||
= render partial: 'users/dossiers/show/estimated_delay', locals: { procedure: dossier.procedure }
|
||||
= render Procedure::EstimatedDelayComponent.new(procedure: dossier.procedure)
|
||||
|
||||
%p
|
||||
= t('views.users.dossiers.show.status_overview.use_mailbox_for_questions_html', mailbox_url: messagerie_dossier_url(dossier))
|
||||
|
|
|
@ -40,14 +40,14 @@ describe ProcedureStatsConcern do
|
|||
let(:delays) { [1.day, 2.days, 2.days, 2.days, 2.days, 3.days, 3.days, 3.days, 3.days, 12.days] }
|
||||
|
||||
it 'returns a time representative of the dossier instruction delay' do
|
||||
expect(procedure.usual_traitement_time_for_recent_dossiers(30)[0]).to be_between(1.days, 2.days)
|
||||
expect(procedure.usual_traitement_time_for_recent_dossiers(30)[0]).to be_between(1.day, 2.days)
|
||||
expect(procedure.usual_traitement_time_for_recent_dossiers(30)[1]).to be_between(2.days, 3.days)
|
||||
expect(procedure.usual_traitement_time_for_recent_dossiers(30)[2]).to be_between(11.days, 12.days)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when there are very old dossiers' do
|
||||
let(:delays) { [1.days, 2.days, 3.days, 3.days, 4.days] }
|
||||
let(:delays) { [1.day, 2.days, 3.days, 3.days, 4.days] }
|
||||
let!(:old_dossier) { create_dossier(depose_at: 3.months.ago, en_instruction_at: 2.months.ago, processed_at: 2.months.ago) }
|
||||
|
||||
it 'ignores dossiers older than 1 month' do
|
||||
|
@ -58,7 +58,7 @@ describe ProcedureStatsConcern do
|
|||
end
|
||||
|
||||
context 'when there is a dossier with bad data' do
|
||||
let(:delays) { [1.days, 2.days, 3.days, 3.days, 4.days] }
|
||||
let(:delays) { [1.day, 2.days, 3.days, 3.days, 4.days] }
|
||||
let!(:bad_dossier) { create_dossier(depose_at: nil, en_instruction_at: nil, processed_at: 10.days.ago) }
|
||||
|
||||
it 'ignores bad dossiers' do
|
||||
|
@ -83,14 +83,14 @@ describe ProcedureStatsConcern do
|
|||
let(:delays) { [] }
|
||||
before do
|
||||
csv = CSV.read(Rails.root.join('spec/fixtures/files/data/treatment-expected-3months.csv'))
|
||||
traitement_times = csv[1..] #strip header
|
||||
traitement_times = csv[1..] # strip header
|
||||
.flatten
|
||||
.map{ { processed_at: _1.to_f, depose_at: 0 } }
|
||||
.map { { processed_at: _1.to_f, depose_at: 0 } }
|
||||
allow(procedure).to receive(:traitement_times).and_return(traitement_times)
|
||||
end
|
||||
|
||||
it 'works' do
|
||||
expect(procedure.usual_traitement_time_for_recent_dossiers(30).map {distance_of_time_in_words(_1)}).to eq(["3 mois", "6 mois", "environ un an"])
|
||||
expect(procedure.usual_traitement_time_for_recent_dossiers(30).map { distance_of_time_in_words(_1) }).to eq(["3 mois", "6 mois", "environ un an"])
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
describe 'users/dossiers/show/_status_overview', type: :view do
|
||||
before { allow(dossier.procedure).to receive(:usual_traitement_time_for_recent_dossiers).and_return(1.day) }
|
||||
before { allow(dossier.procedure).to receive(:usual_traitement_time_for_recent_dossiers).and_return([1.day, 2.days, 3.days]) }
|
||||
|
||||
subject! { render 'users/dossiers/show/status_overview', dossier: dossier }
|
||||
|
||||
|
@ -34,8 +34,14 @@ describe 'users/dossiers/show/_status_overview', type: :view do
|
|||
expect(rendered).to have_timeline_item('.termine').inactive
|
||||
end
|
||||
|
||||
it { is_expected.to have_selector('.status-explanation .en-construction') }
|
||||
it { is_expected.to have_text('Habituellement, les dossiers de cette démarche sont traités dans un délai de 1 jour') }
|
||||
it 'works' do
|
||||
subject
|
||||
expect(subject).to have_selector('.status-explanation .en-construction')
|
||||
expect(subject).to have_text('Selon nos estimations, à partir des délais d’instruction constatés')
|
||||
expect(subject).to have_text("Dans le meilleur des cas, le délais d’instruction estimé est : 1 jour.")
|
||||
expect(subject).to have_text("Les dossiers demandant quelques échanges le délais d’instruction estimé est : 2 jours.")
|
||||
expect(subject).to have_text("Si votre dossier est incomplet et qu’il faut beaucoup d’échanges avec l’administration, le délais d’instruction estimé est : 3 jours")
|
||||
end
|
||||
end
|
||||
|
||||
context 'when en instruction' do
|
||||
|
@ -48,8 +54,13 @@ describe 'users/dossiers/show/_status_overview', type: :view do
|
|||
expect(rendered).to have_timeline_item('.termine').inactive
|
||||
end
|
||||
|
||||
it { is_expected.to have_selector('.status-explanation .en-instruction') }
|
||||
it { is_expected.to have_text('Habituellement, les dossiers de cette démarche sont traités dans un délai de 1 jour') }
|
||||
it 'works' do
|
||||
expect(subject).to have_selector('.status-explanation .en-instruction')
|
||||
expect(subject).to have_text('Selon nos estimations, à partir des délais d’instruction constatés')
|
||||
expect(subject).to have_text("Dans le meilleur des cas, le délais d’instruction estimé est : 1 jour.")
|
||||
expect(subject).to have_text("Les dossiers demandant quelques échanges le délais d’instruction estimé est : 2 jours.")
|
||||
expect(subject).to have_text("Si votre dossier est incomplet et qu’il faut beaucoup d’échanges avec l’administration, le délais d’instruction estimé est : 3 jours")
|
||||
end
|
||||
end
|
||||
|
||||
context 'when accepté' do
|
||||
|
|
Loading…
Reference in a new issue