decidim-stratified_sortitions 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE-AGPLv3.txt +661 -0
- data/README.md +91 -0
- data/Rakefile +42 -0
- data/app/cells/decidim/stratified_sortitions/stratified_sortition_cell.rb +21 -0
- data/app/cells/decidim/stratified_sortitions/stratified_sortition_l_cell.rb +22 -0
- data/app/cells/decidim/stratified_sortitions/stratified_sortition_metadata_cell.rb +63 -0
- data/app/commands/decidim/stratified_sortitions/admin/create_stratified_sortition.rb +84 -0
- data/app/commands/decidim/stratified_sortitions/admin/destroy_stratified_sortition.rb +49 -0
- data/app/commands/decidim/stratified_sortitions/admin/duplicate_stratified_sortition.rb +74 -0
- data/app/commands/decidim/stratified_sortitions/admin/import_sample.rb +40 -0
- data/app/commands/decidim/stratified_sortitions/admin/remove_uploaded_samples.rb +53 -0
- data/app/commands/decidim/stratified_sortitions/admin/update_stratified_sortition.rb +174 -0
- data/app/controllers/concerns/decidim/stratified_sortitions/orderable_stratified_sortitions.rb +37 -0
- data/app/controllers/concerns/decidim/stratified_sortitions/strata_charts_data.rb +91 -0
- data/app/controllers/decidim/stratified_sortitions/admin/application_controller.rb +19 -0
- data/app/controllers/decidim/stratified_sortitions/admin/samples_controller.rb +143 -0
- data/app/controllers/decidim/stratified_sortitions/admin/stratified_sortitions_controller.rb +235 -0
- data/app/controllers/decidim/stratified_sortitions/application_controller.rb +13 -0
- data/app/controllers/decidim/stratified_sortitions/charts_pdf_controller_helper.rb +17 -0
- data/app/controllers/decidim/stratified_sortitions/stratified_sortitions_controller.rb +61 -0
- data/app/forms/decidim/stratified_sortitions/admin/sample_upload_form.rb +15 -0
- data/app/forms/decidim/stratified_sortitions/admin/stratified_sortitions_form.rb +155 -0
- data/app/forms/decidim/stratified_sortitions/admin/stratum_form.rb +69 -0
- data/app/forms/decidim/stratified_sortitions/admin/substratum_form.rb +26 -0
- data/app/helpers/decidim/stratified_sortitions/admin/stratified_sortitions_helper.rb +18 -0
- data/app/helpers/decidim/stratified_sortitions/application_helper.rb +85 -0
- data/app/helpers/decidim/stratified_sortitions/charts_pdf_helper.rb +73 -0
- data/app/helpers/decidim/stratified_sortitions/stratified_sortition_cells_helper.rb +56 -0
- data/app/javascript/channels/sample_import_progress.js +12 -0
- data/app/jobs/decidim/stratified_sortitions/admin/execute_sortition_job.rb +21 -0
- data/app/jobs/decidim/stratified_sortitions/admin/import_sample_job.rb +170 -0
- data/app/jobs/decidim/stratified_sortitions/admin/remove_samples_job.rb +19 -0
- data/app/jobs/decidim/stratified_sortitions/admin/sortition_results_export_job.rb +28 -0
- data/app/mailers/decidim/stratified_sortitions/admin/import_mailer.rb +26 -0
- data/app/models/decidim/stratified_sortitions/application_record.rb +9 -0
- data/app/models/decidim/stratified_sortitions/panel_portfolio.rb +165 -0
- data/app/models/decidim/stratified_sortitions/sample_import.rb +14 -0
- data/app/models/decidim/stratified_sortitions/sample_participant.rb +12 -0
- data/app/models/decidim/stratified_sortitions/sample_participant_stratum.rb +11 -0
- data/app/models/decidim/stratified_sortitions/stratified_sortition.rb +74 -0
- data/app/models/decidim/stratified_sortitions/stratum.rb +22 -0
- data/app/models/decidim/stratified_sortitions/substratum.rb +19 -0
- data/app/packs/entrypoints/decidim_stratified_sortitions.js +10 -0
- data/app/packs/entrypoints/decidim_stratified_sortitions_admin.js +9 -0
- data/app/packs/entrypoints/decidim_stratified_sortitions_admin.scss +1 -0
- data/app/packs/images/decidim/stratified_sortitions/icon.svg +1 -0
- data/app/packs/src/decidim/stratified_sortitions/application.js +3 -0
- data/app/packs/src/decidim/stratified_sortitions/results_tabs.js +59 -0
- data/app/packs/src/decidim/stratified_sortitions/stratum_fields.js +302 -0
- data/app/packs/src/decidim/stratified_sortitions/substratum_fields.js +165 -0
- data/app/packs/src/decidim/stratified_sortitions/upload_sample.js +16 -0
- data/app/packs/stylesheets/decidim/stratified_sortitions/admin/stratified_sortitions.scss +210 -0
- data/app/packs/stylesheets/decidim/stratified_sortitions/charts_pdf.scss +148 -0
- data/app/packs/stylesheets/stratified_sortitions.scss +56 -0
- data/app/permissions/decidim/stratified_sortitions/admin/permissions.rb +74 -0
- data/app/permissions/decidim/stratified_sortitions/permissions.rb +23 -0
- data/app/presenters/decidim/stratified_sortitions/admin_log/stratified_sortition_presenter.rb +35 -0
- data/app/queries/decidim/stratified_sortitions/filtered_stratified_sortitions.rb +39 -0
- data/app/serializers/decidim/stratified_sortitions/sortition_result_serializer.rb +116 -0
- data/app/services/decidim/stratified_sortitions/charts_pdf_generator.rb +96 -0
- data/app/services/decidim/stratified_sortitions/fair_sortition_service.rb +247 -0
- data/app/services/decidim/stratified_sortitions/leximin/constraint_builder.rb +180 -0
- data/app/services/decidim/stratified_sortitions/leximin/distribution_solver.rb +217 -0
- data/app/services/decidim/stratified_sortitions/leximin/feasibility_checker.rb +222 -0
- data/app/services/decidim/stratified_sortitions/leximin/panel_generator.rb +149 -0
- data/app/services/decidim/stratified_sortitions/leximin/panel_sampler.rb +125 -0
- data/app/services/decidim/stratified_sortitions/leximin_selector.rb +136 -0
- data/app/services/decidim/stratified_sortitions/sortition_results_exporter.rb +161 -0
- data/app/views/decidim/admin/components/index.html.erb +54 -0
- data/app/views/decidim/stratified_sortitions/admin/import_mailer/import.html.erb +22 -0
- data/app/views/decidim/stratified_sortitions/admin/stratified_sortitions/_confirm_execute_modal.html.erb +19 -0
- data/app/views/decidim/stratified_sortitions/admin/stratified_sortitions/_confirm_participants_modal.html.erb +20 -0
- data/app/views/decidim/stratified_sortitions/admin/stratified_sortitions/_form.html.erb +55 -0
- data/app/views/decidim/stratified_sortitions/admin/stratified_sortitions/_navigation_menu.html.erb +10 -0
- data/app/views/decidim/stratified_sortitions/admin/stratified_sortitions/_strata.html.erb +22 -0
- data/app/views/decidim/stratified_sortitions/admin/stratified_sortitions/_stratum.html.erb +75 -0
- data/app/views/decidim/stratified_sortitions/admin/stratified_sortitions/_substrata.html.erb +34 -0
- data/app/views/decidim/stratified_sortitions/admin/stratified_sortitions/_substratum.html.erb +54 -0
- data/app/views/decidim/stratified_sortitions/admin/stratified_sortitions/edit.html.erb +21 -0
- data/app/views/decidim/stratified_sortitions/admin/stratified_sortitions/execute.html.erb +155 -0
- data/app/views/decidim/stratified_sortitions/admin/stratified_sortitions/export_charts_pdf.html.erb +38 -0
- data/app/views/decidim/stratified_sortitions/admin/stratified_sortitions/index.html.erb +75 -0
- data/app/views/decidim/stratified_sortitions/admin/stratified_sortitions/new.html.erb +21 -0
- data/app/views/decidim/stratified_sortitions/admin/stratified_sortitions/upload_sample.html.erb +117 -0
- data/app/views/decidim/stratified_sortitions/shared/_strata_charts.html.erb +21 -0
- data/app/views/decidim/stratified_sortitions/stratified_sortitions/_results_count.html.erb +15 -0
- data/app/views/decidim/stratified_sortitions/stratified_sortitions/_stratified_sortition.html.erb +1 -0
- data/app/views/decidim/stratified_sortitions/stratified_sortitions/_stratified_sortitions.html.erb +13 -0
- data/app/views/decidim/stratified_sortitions/stratified_sortitions/_tags.html.erb +9 -0
- data/app/views/decidim/stratified_sortitions/stratified_sortitions/index.html.erb +22 -0
- data/app/views/decidim/stratified_sortitions/stratified_sortitions/index.js.erb +5 -0
- data/app/views/decidim/stratified_sortitions/stratified_sortitions/show.html.erb +142 -0
- data/app/views/layouts/decidim/admin/_sidebar_menu.html.erb +45 -0
- data/app/views/layouts/decidim/stratified_sortitions/charts_pdf.html.erb +14 -0
- data/config/assets.rb +24 -0
- data/config/locales/ca.yml +361 -0
- data/config/locales/en.yml +360 -0
- data/config/locales/es.yml +360 -0
- data/config/locales/oc.yml +2 -0
- data/config/routes.rb +1 -0
- data/db/migrate/20251023103900_create_decidim_stratified_sortitions_stratified_sortitions.rb +18 -0
- data/db/migrate/20251104120000_create_stratified_sortitions_strata_and_substrata.decidim_stratified_sortitions.rb +27 -0
- data/db/migrate/20251219120000_create_sample_imports.rb +17 -0
- data/db/migrate/20251219120100_create_sample_participants.rb +19 -0
- data/db/migrate/20251219120200_create_sample_participant_strata.rb +16 -0
- data/db/migrate/20251230130000_change_value_to_text_in_substrata.rb +11 -0
- data/db/migrate/20260102114744_add_status_to_stratified_sortitions.rb +11 -0
- data/db/migrate/20260109105643_allow_null_value_in_substrata.rb +10 -0
- data/db/migrate/20260113121726_add_position_to_strata_and_substrata.rb +8 -0
- data/db/migrate/20260127100000_rename_weighing_to_max_quota_percentage.rb +12 -0
- data/db/migrate/20260127120000_create_panel_portfolios.rb +46 -0
- data/db/migrate/20260518000000_add_foreign_key_to_stratified_sortitions_component.rb +10 -0
- data/db/migrate/20260521000000_add_cascade_to_stratified_sortitions_foreign_keys.rb +64 -0
- data/db/migrate/20260616000000_add_execution_error_to_stratified_sortitions.rb +11 -0
- data/lib/decidim/stratified_sortitions/admin.rb +10 -0
- data/lib/decidim/stratified_sortitions/admin_engine.rb +49 -0
- data/lib/decidim/stratified_sortitions/component.rb +41 -0
- data/lib/decidim/stratified_sortitions/engine.rb +34 -0
- data/lib/decidim/stratified_sortitions/seeds.rb +24 -0
- data/lib/decidim/stratified_sortitions/test/factories.rb +80 -0
- data/lib/decidim/stratified_sortitions/version.rb +13 -0
- data/lib/decidim/stratified_sortitions.rb +29 -0
- metadata +222 -0
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
---
|
|
2
|
+
en:
|
|
3
|
+
activemodel:
|
|
4
|
+
attributes:
|
|
5
|
+
stratified_sortition:
|
|
6
|
+
created_at: Created At
|
|
7
|
+
title: Title
|
|
8
|
+
description: Description
|
|
9
|
+
num_candidates: Number of candidates to select
|
|
10
|
+
selection_criteria: Selection Criteria
|
|
11
|
+
selected_profiles_description: Description of the profiles to be selected
|
|
12
|
+
errors:
|
|
13
|
+
messages:
|
|
14
|
+
cannot_add_strata_with_sample_participants: "Cannot add strata when there are already imported participants"
|
|
15
|
+
cannot_delete_strata_with_sample_participants: "Cannot delete strata when there are already imported participants"
|
|
16
|
+
cannot_change_stratum_name_with_sample_participants: "Cannot change stratum name when there are already imported participants"
|
|
17
|
+
cannot_change_stratum_kind_with_sample_participants: "Cannot change stratum kind when there are already imported participants"
|
|
18
|
+
cannot_add_substrata_with_sample_participants: "Cannot add substrata when there are already imported participants"
|
|
19
|
+
cannot_delete_substrata_with_sample_participants: "Cannot delete substrata when there are already imported participants"
|
|
20
|
+
cannot_change_substratum_name_with_sample_participants: "Cannot change substratum name when there are already imported participants"
|
|
21
|
+
cannot_change_substratum_value_with_sample_participants: "Cannot change substratum value when there are already imported participants"
|
|
22
|
+
cannot_change_substratum_range_with_sample_participants: "Cannot change substratum range when there are already imported participants"
|
|
23
|
+
cannot_change_num_candidates_when_executed: "Cannot change the number of candidates after the sortition has been executed"
|
|
24
|
+
decidim:
|
|
25
|
+
admin:
|
|
26
|
+
components:
|
|
27
|
+
index:
|
|
28
|
+
headers:
|
|
29
|
+
scope: Scope
|
|
30
|
+
components:
|
|
31
|
+
stratified_sortitions:
|
|
32
|
+
name: Stratified Sortitions
|
|
33
|
+
settings:
|
|
34
|
+
global:
|
|
35
|
+
announcement: Announcement
|
|
36
|
+
publish_sortitions: Publish comparative charts of the Sortitions
|
|
37
|
+
step:
|
|
38
|
+
announcement: Announcement
|
|
39
|
+
stratified_sortitions:
|
|
40
|
+
admin:
|
|
41
|
+
actions:
|
|
42
|
+
configure: Configure
|
|
43
|
+
confirm_destroy: Are you sure you want to delete this %{name}?
|
|
44
|
+
destroy: Delete
|
|
45
|
+
duplicate: Duplicate
|
|
46
|
+
execute: Execute sortition
|
|
47
|
+
new_stratified_sortition: "New Stratified Sortition"
|
|
48
|
+
title: "Actions"
|
|
49
|
+
census_management: Manage sample
|
|
50
|
+
models:
|
|
51
|
+
stratified_sortition:
|
|
52
|
+
fields:
|
|
53
|
+
created_at: Created At
|
|
54
|
+
title: Title
|
|
55
|
+
description: Description
|
|
56
|
+
num_candidates: Number of candidates to select
|
|
57
|
+
selection_criteria: Selection Criteria
|
|
58
|
+
selected_profiles_description: Description of the profiles to be selected
|
|
59
|
+
status: Status
|
|
60
|
+
stratified_sortitions:
|
|
61
|
+
create:
|
|
62
|
+
error: There's been a problem creating this stratified sortition
|
|
63
|
+
success: Stratified sortition successfully created
|
|
64
|
+
destroy:
|
|
65
|
+
error: There's been a problem deleting this stratified sortition
|
|
66
|
+
has_problems: This stratified sortition couldn't be deleted due to related problems
|
|
67
|
+
success: Stratified sortition successfully deleted
|
|
68
|
+
execute:
|
|
69
|
+
candidates: Candidates
|
|
70
|
+
chart_results: Distribution charts
|
|
71
|
+
tab_charts: Comparative charts
|
|
72
|
+
tab_participants: Selected participants
|
|
73
|
+
empty_sample_participants: The sortition cannot be executed without a loaded census
|
|
74
|
+
execute_stratified_sortition: Execute stratified sortition
|
|
75
|
+
confirm_execute_title: Confirmation
|
|
76
|
+
confirm_execute_body: Once the sortition is executed, it will be recorded on the platform and the action will be irreversible. The data, the strata configuration, and the sample cannot be edited.
|
|
77
|
+
confirm_execute_ok: Execute sortition
|
|
78
|
+
confirm_execute_cancel: Cancel
|
|
79
|
+
export: Export
|
|
80
|
+
export_results: Export results
|
|
81
|
+
export_csv: Stratified sortition results as CSV
|
|
82
|
+
export_excel: Stratified sortition results as Excel
|
|
83
|
+
export_json: Stratified sortition results as JSON
|
|
84
|
+
export_charts_pdf: Export charts PDF
|
|
85
|
+
pdf_title: "Sortition results: %{name}"
|
|
86
|
+
pdf_subtitle: Comparative sample distribution charts
|
|
87
|
+
pdf_belongs_to: "Belongs to: %{space_name}"
|
|
88
|
+
pdf_algorithm: "Algorithm used: %{algorithm}"
|
|
89
|
+
pdf_executed_at: "Sortition performed on: %{date}"
|
|
90
|
+
pdf_no_data: No data
|
|
91
|
+
algorithm: Algorithm
|
|
92
|
+
generated_at: Generated at
|
|
93
|
+
generation_time: Generation time
|
|
94
|
+
total_participants: Total participants
|
|
95
|
+
num_panels: Number of panels
|
|
96
|
+
selected_at: Selected at
|
|
97
|
+
verification_seed: Verification seed
|
|
98
|
+
random_value_used: Random value used
|
|
99
|
+
selected_panel_probability: Selected panel probability
|
|
100
|
+
selected_participants_title: Selected participants
|
|
101
|
+
selected_participants:
|
|
102
|
+
one: "1 selected participant"
|
|
103
|
+
other: "%{count} selected participants"
|
|
104
|
+
participant_id: ID
|
|
105
|
+
personal_data_1: Personal data 1
|
|
106
|
+
personal_data_2: Personal data 2
|
|
107
|
+
personal_data_3: Personal data 3
|
|
108
|
+
personal_data_4: Personal data 4
|
|
109
|
+
no_results_yet: The sortition has not been executed yet.
|
|
110
|
+
confirm_participants_title: Show the list of selected participants
|
|
111
|
+
confirm_participants_body: You are accessing personal information and data. This action will be recorded.
|
|
112
|
+
confirm_participants_ok: Show
|
|
113
|
+
confirm_participants_cancel: Cancel
|
|
114
|
+
results: Results
|
|
115
|
+
executing_notice: The sortition is being processed in the background. This page will update once it is complete.
|
|
116
|
+
execution_failed: "The sortition execution failed:"
|
|
117
|
+
success: Stratified sortition successfully executed
|
|
118
|
+
executing: The sortition has been enqueued and is being processed in the background.
|
|
119
|
+
target: Target
|
|
120
|
+
title: Execute stratified sortition
|
|
121
|
+
export_results:
|
|
122
|
+
no_results: There are no results to export. Execute the sortition first.
|
|
123
|
+
duplicate:
|
|
124
|
+
error: There's been a problem duplicating this stratified sortition
|
|
125
|
+
success: Stratified sortition successfully duplicated
|
|
126
|
+
index:
|
|
127
|
+
selected: Selected Stratified Sortitions
|
|
128
|
+
title: Stratified Sortitions
|
|
129
|
+
new:
|
|
130
|
+
create: Create
|
|
131
|
+
title: New Stratified Sortition
|
|
132
|
+
edit:
|
|
133
|
+
title: Edit Stratified Sortition
|
|
134
|
+
update: Update
|
|
135
|
+
form:
|
|
136
|
+
data: General Information
|
|
137
|
+
description: Description
|
|
138
|
+
name: Name
|
|
139
|
+
published: Published
|
|
140
|
+
selected_profiles_description_help: You can indicate, if applicable, the stratification criteria used in the draw, and the reason.
|
|
141
|
+
selection_criteria_help: You can indicate, if applicable, the eligibility criteria of the people who have been selected to participate in the sortition.
|
|
142
|
+
strata:
|
|
143
|
+
title: Strata
|
|
144
|
+
add_stratum: Add stratum
|
|
145
|
+
stratum:
|
|
146
|
+
up: Up
|
|
147
|
+
down: Down
|
|
148
|
+
remove: Remove
|
|
149
|
+
name: Name
|
|
150
|
+
kind:
|
|
151
|
+
title: Kind
|
|
152
|
+
value: Value
|
|
153
|
+
numeric_range: Numeric range
|
|
154
|
+
substrata_title: Substrata
|
|
155
|
+
title: Strata
|
|
156
|
+
substrata:
|
|
157
|
+
add_substratum: Add substratum
|
|
158
|
+
substratum:
|
|
159
|
+
up: Up
|
|
160
|
+
down: Down
|
|
161
|
+
remove: Remove
|
|
162
|
+
name: Name
|
|
163
|
+
value: Value
|
|
164
|
+
value_placeholder: Value
|
|
165
|
+
range: Range
|
|
166
|
+
range_placeholder: Range (e.g. 0-18)
|
|
167
|
+
title: Substratum
|
|
168
|
+
max_quota_percentage: Objective %
|
|
169
|
+
max_quota_percentage_placeholder: Objective %
|
|
170
|
+
update:
|
|
171
|
+
error: There's been a problem updating this stratified sortition
|
|
172
|
+
success: Stratified sortition successfully updated
|
|
173
|
+
upload_sample:
|
|
174
|
+
age: Age group
|
|
175
|
+
candidates: Candidates
|
|
176
|
+
census_file: Choose a file
|
|
177
|
+
census_file_label: Excel.csv file with census data
|
|
178
|
+
configure_strata_first: You must configure strata and substrata first
|
|
179
|
+
count_uploaded_files: "<b>%{count}</b> records uploaded."
|
|
180
|
+
description: The sample file must be a CSV and have a format similar to the example below:<br>You can download and use the template.
|
|
181
|
+
download_template: "Download template"
|
|
182
|
+
download_template_csv: "Download as a CSV template"
|
|
183
|
+
download_template_xlsx: "Download as a XLSX template"
|
|
184
|
+
example: "Candidate data 1,Candidate data 2,Candidate data 3,Candidate data 4,Stratum 1,Stratum 2,Stratum 3,Stratum N<br>example@example.com,D,Higher,34<br>example@example.com,E,Higher,24<br><br>. . ."
|
|
185
|
+
example_headers:
|
|
186
|
+
personal_data_1: "Personal data 1 (unique identifier)"
|
|
187
|
+
personal_data_2: "Personal data 2"
|
|
188
|
+
personal_data_3: "Personal data 3"
|
|
189
|
+
personal_data_4: "Personal data 4"
|
|
190
|
+
gender: "Gender"
|
|
191
|
+
age: "Age"
|
|
192
|
+
example_rows:
|
|
193
|
+
- - "11111111X"
|
|
194
|
+
- "Example name 1"
|
|
195
|
+
- "Phone Example 1"
|
|
196
|
+
- "example1@example.com"
|
|
197
|
+
- "Male"
|
|
198
|
+
- "45"
|
|
199
|
+
- - "22222222Y"
|
|
200
|
+
- "Example name 2"
|
|
201
|
+
- "Phone Example 2"
|
|
202
|
+
- "example2@example.com"
|
|
203
|
+
- "Female"
|
|
204
|
+
- "42"
|
|
205
|
+
execute_stratified_sortition: Execute sortition
|
|
206
|
+
execute_stratified_sortition_help: The sortition cannot be executed until records are uploaded.
|
|
207
|
+
filename_data: "%{filename}, on %{date}, number of records %{count}"
|
|
208
|
+
gender: Gender
|
|
209
|
+
last_upload_date: The last upload was on %{date}
|
|
210
|
+
help: The first four columns are candidate data, such as email, ID, phone, or address, and the following columns are the strata defined in the stratified sortition. Each row represents a candidate.
|
|
211
|
+
no_data: No data
|
|
212
|
+
place: Place of birth
|
|
213
|
+
remove_uploaded_samples: Remove all records
|
|
214
|
+
confirm_remove_uploaded_samples: Are you sure you want to remove all uploaded samples?
|
|
215
|
+
strata_not_configured: You must configure strata and substrata first
|
|
216
|
+
target: Target
|
|
217
|
+
title: Manage sample
|
|
218
|
+
upload_census: Upload a new sample
|
|
219
|
+
upload_file: Upload new sample
|
|
220
|
+
uploaded_file: Uploaded sample data
|
|
221
|
+
uploaded_files: "The following files have been added:"
|
|
222
|
+
no_uploaded_files: "No files uploaded."
|
|
223
|
+
help_csv: "<b>The file to be uploaded must follow these instructions:</b>
|
|
224
|
+
<ul><li>The file format must be .csv. You can download a template.</li>
|
|
225
|
+
<li>The first column is mandatory. It is the unique identifier for each participant and can be the ID, a randomly generated code, or any other form of identification you want to use.</li>
|
|
226
|
+
<li>Columns 2, 3, and 4 (Personal data 2, 3, 4) are optional and are not used for the sortition. They are used to add contact information for each participant.</li>
|
|
227
|
+
<li>The strata columns are mandatory and must have the same order and name as configured in the previous section.</li>
|
|
228
|
+
<li>The information in the columns must match one of the values specified for each stratum.</li>
|
|
229
|
+
<li>If a participant does not have data in any of the strata or does not match any of the configured values, they will be excluded from the sortition.</li></ul>"
|
|
230
|
+
help_submit: 'By clicking "Save", the system will load the data in the background. This may take several minutes depending on the volume of participants. When the load is complete, the result will be notified by email.'
|
|
231
|
+
import_mailer:
|
|
232
|
+
subject: "Sample import result"
|
|
233
|
+
import:
|
|
234
|
+
ready: "The sample import has been completed successfully."
|
|
235
|
+
total_rows: "Total rows"
|
|
236
|
+
imported_rows: "Successfully imported"
|
|
237
|
+
failed_rows: "Rows with errors"
|
|
238
|
+
errors_summary: "Total rows: %{total}. Successfully imported: %{imported}. Rows with errors: %{failed}."
|
|
239
|
+
see_details: "The identifiers of the participants who have had errors are:"
|
|
240
|
+
participant_id: "Participant ID:"
|
|
241
|
+
samples:
|
|
242
|
+
template:
|
|
243
|
+
personal_data_1: "Personal data 1 (unique identifier)"
|
|
244
|
+
personal_data_2: "Personal data 2"
|
|
245
|
+
personal_data_3: "Personal data 3"
|
|
246
|
+
personal_data_4: "Personal data 4"
|
|
247
|
+
import_success: "The sample has been imported successfully."
|
|
248
|
+
import_failed: "An error occurred while importing the sample: %{error}"
|
|
249
|
+
errors:
|
|
250
|
+
no_file: "No file has been selected."
|
|
251
|
+
no_strata: "You must configure strata and substrata before uploading a sample."
|
|
252
|
+
pending: "You can only upload samples when the stratified sortition is in pending status."
|
|
253
|
+
sample_imports:
|
|
254
|
+
create:
|
|
255
|
+
success: "The sample is being loaded in the background. When it finishes you will receive an email with the import summary."
|
|
256
|
+
remove_uploaded_samples:
|
|
257
|
+
enqueued: "The sample removal has been enqueued and will be processed in the background."
|
|
258
|
+
success: "Uploaded samples have been successfully removed."
|
|
259
|
+
error: "There was an error removing the uploaded samples."
|
|
260
|
+
stratified_sortitions:
|
|
261
|
+
count:
|
|
262
|
+
candidates_count:
|
|
263
|
+
one: 1 candidate
|
|
264
|
+
other: "%{count} candidates"
|
|
265
|
+
filters:
|
|
266
|
+
all: All
|
|
267
|
+
pending: Pending
|
|
268
|
+
executing: Executing
|
|
269
|
+
executed: Executed
|
|
270
|
+
failed: Failed
|
|
271
|
+
state: Status
|
|
272
|
+
index:
|
|
273
|
+
empty: There are no stratified sortitions yet.
|
|
274
|
+
orders:
|
|
275
|
+
label: 'Order stratified sortitions by:'
|
|
276
|
+
random: Random
|
|
277
|
+
recent: Recent
|
|
278
|
+
results_count:
|
|
279
|
+
count:
|
|
280
|
+
one: Candidate to select
|
|
281
|
+
other: Candidates to select
|
|
282
|
+
count_selected:
|
|
283
|
+
one: Selected candidate
|
|
284
|
+
other: Selected candidates
|
|
285
|
+
show:
|
|
286
|
+
introduction: 'This page contains the details of the stratified sortition %{reference}. By means of this sortition, %{num_candidates} candidates have been selected using a stratified random selection algorithm that ensures fair representation across all defined strata.'
|
|
287
|
+
description: Description
|
|
288
|
+
selection_criteria: Selection criteria
|
|
289
|
+
selected_profiles_description: Description of the selected profiles
|
|
290
|
+
to_be_selected_profiles_description: Description of the profiles to be selected
|
|
291
|
+
strata: Strata
|
|
292
|
+
max_quota: Max quota
|
|
293
|
+
selected_participants: Selected participants
|
|
294
|
+
selected_participants_count:
|
|
295
|
+
one: 1 participant has been selected
|
|
296
|
+
other: "%{count} participants have been selected"
|
|
297
|
+
sortition_details: Sortition details
|
|
298
|
+
num_candidates: Number of candidates to select
|
|
299
|
+
status: Status
|
|
300
|
+
strata_count: Number of strata
|
|
301
|
+
algorithm: Algorithm
|
|
302
|
+
algorithm_name: LEXIMIN
|
|
303
|
+
algorithm_description: Stratified random selection algorithm that ensures fair representation across all defined strata
|
|
304
|
+
reproducibility_details: Sortition reproducibility
|
|
305
|
+
verification_seed: Verification seed
|
|
306
|
+
random_value_used: Random value used
|
|
307
|
+
selected_panel_index: Selected panel index
|
|
308
|
+
selected_at: Selected at
|
|
309
|
+
strata_charts: Distribution of profiles
|
|
310
|
+
target: Target to achieve
|
|
311
|
+
candidates: Received candidatures
|
|
312
|
+
no_data: No data
|
|
313
|
+
results: Sortition results
|
|
314
|
+
statuses:
|
|
315
|
+
pending: Pending
|
|
316
|
+
executing: Executing
|
|
317
|
+
executed: Executed
|
|
318
|
+
failed: Failed
|
|
319
|
+
stratified_sortition:
|
|
320
|
+
num_candidates: candidates to select
|
|
321
|
+
strata_count: strata
|
|
322
|
+
stratified_sortitions_count:
|
|
323
|
+
count:
|
|
324
|
+
one: 1 stratified sortition
|
|
325
|
+
other: "%{count} stratified sortitions"
|
|
326
|
+
admin_log:
|
|
327
|
+
stratified_sortition:
|
|
328
|
+
create: "%{user_name} created the stratified sortition %{resource_name} on %{space_name}"
|
|
329
|
+
update: "%{user_name} updated the stratified sortition %{resource_name} on %{space_name}"
|
|
330
|
+
delete: "%{user_name} deleted the stratified sortition %{resource_name} on %{space_name}"
|
|
331
|
+
duplicate: "%{user_name} duplicated the stratified sortition %{resource_name}"
|
|
332
|
+
import_sample: "%{user_name} imported a sample to the stratified sortition %{resource_name} on %{space_name}"
|
|
333
|
+
remove_samples: "%{user_name} removed the imported records from the stratified sortition %{resource_name} on %{space_name}"
|
|
334
|
+
execute: "%{user_name} executed the stratified sortition %{resource_name} on %{space_name}"
|
|
335
|
+
export_results: "%{user_name} exported the results of the stratified sortition %{resource_name} on %{space_name}"
|
|
336
|
+
view_participants: "%{user_name} viewed the selected participants list of the stratified sortition %{resource_name} on %{space_name}"
|
|
337
|
+
errors:
|
|
338
|
+
panel_portfolio:
|
|
339
|
+
already_sampled: "Portfolio already sampled"
|
|
340
|
+
probabilities_size_mismatch: "must have the same size as panels (%{panels_count} panels, %{probabilities_count} probabilities)"
|
|
341
|
+
probabilities_sum_invalid: "must sum to 1.0 (currently %{total})"
|
|
342
|
+
feasibility:
|
|
343
|
+
panel_size_positive: "Panel size (num_candidates) must be a positive number"
|
|
344
|
+
no_categories: "No categories (substrata) defined. You must configure strata and substrata before running the algorithm"
|
|
345
|
+
no_volunteers: "No volunteers in the pool. You must import participants before running the sortition"
|
|
346
|
+
pool_too_small: "The volunteer pool (%{volunteers_count}) is smaller than the panel size (%{panel_size}). Add more participants or reduce the number of candidates to select"
|
|
347
|
+
stratum_insufficient_quotas: "Stratum '%{stratum_name}' has insufficient maximum quotas. The sum of maximum quotas (%{total_max}) is less than the panel size (%{panel_size})"
|
|
348
|
+
stratum_percentages_exceed: "Stratum '%{stratum_name}' has percentages that sum to more than 100%% (%{total_percentage}%%)"
|
|
349
|
+
substratum_insufficient_volunteers: "Substratum '%{substratum_name}' of stratum '%{stratum_name}' requires a minimum of %{min_quota} volunteers but only has %{volunteers_count}"
|
|
350
|
+
substratum_quota_exceeds_volunteers: "Substratum '%{substratum_name}' of stratum '%{stratum_name}' has a max quota of %{max_quota} (%{percentage}%%) but only %{volunteers_count} volunteer(s) belong to this category. Reduce the max quota percentage or add more participants in this category"
|
|
351
|
+
volunteers_missing_strata: "There are %{count} volunteer(s) that do not have a substratum assigned for each stratum. This may cause problems in the selection algorithm"
|
|
352
|
+
no_name: "No name"
|
|
353
|
+
fair_sortition:
|
|
354
|
+
already_performed: "The sortition has already been performed for this process"
|
|
355
|
+
portfolio_generation_failed: "Error generating panel portfolio: %{error}"
|
|
356
|
+
no_portfolio: "There is no panel portfolio. Execute `generate_portfolio` first"
|
|
357
|
+
sampling_failed: "Error while sampling: %{error}"
|
|
358
|
+
leximin:
|
|
359
|
+
no_feasible_panel: "Could not find a valid initial panel. The combination of quota constraints (max percentages) and the available sample makes it impossible to form a panel. Possible causes: (1) The max quota percentages for some substrata are too restrictive for the available sample size. (2) There are not enough participants in certain substratum combinations. (3) The number of candidates to select is too large relative to the sample. Try adjusting the max quota percentages or uploading a larger sample."
|
|
360
|
+
internal_error: "Internal error in the selection algorithm: %{error}. Please verify that the strata configuration and max quota percentages are compatible with the loaded sample."
|