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.
Files changed (124) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE-AGPLv3.txt +661 -0
  3. data/README.md +91 -0
  4. data/Rakefile +42 -0
  5. data/app/cells/decidim/stratified_sortitions/stratified_sortition_cell.rb +21 -0
  6. data/app/cells/decidim/stratified_sortitions/stratified_sortition_l_cell.rb +22 -0
  7. data/app/cells/decidim/stratified_sortitions/stratified_sortition_metadata_cell.rb +63 -0
  8. data/app/commands/decidim/stratified_sortitions/admin/create_stratified_sortition.rb +84 -0
  9. data/app/commands/decidim/stratified_sortitions/admin/destroy_stratified_sortition.rb +49 -0
  10. data/app/commands/decidim/stratified_sortitions/admin/duplicate_stratified_sortition.rb +74 -0
  11. data/app/commands/decidim/stratified_sortitions/admin/import_sample.rb +40 -0
  12. data/app/commands/decidim/stratified_sortitions/admin/remove_uploaded_samples.rb +53 -0
  13. data/app/commands/decidim/stratified_sortitions/admin/update_stratified_sortition.rb +174 -0
  14. data/app/controllers/concerns/decidim/stratified_sortitions/orderable_stratified_sortitions.rb +37 -0
  15. data/app/controllers/concerns/decidim/stratified_sortitions/strata_charts_data.rb +91 -0
  16. data/app/controllers/decidim/stratified_sortitions/admin/application_controller.rb +19 -0
  17. data/app/controllers/decidim/stratified_sortitions/admin/samples_controller.rb +143 -0
  18. data/app/controllers/decidim/stratified_sortitions/admin/stratified_sortitions_controller.rb +235 -0
  19. data/app/controllers/decidim/stratified_sortitions/application_controller.rb +13 -0
  20. data/app/controllers/decidim/stratified_sortitions/charts_pdf_controller_helper.rb +17 -0
  21. data/app/controllers/decidim/stratified_sortitions/stratified_sortitions_controller.rb +61 -0
  22. data/app/forms/decidim/stratified_sortitions/admin/sample_upload_form.rb +15 -0
  23. data/app/forms/decidim/stratified_sortitions/admin/stratified_sortitions_form.rb +155 -0
  24. data/app/forms/decidim/stratified_sortitions/admin/stratum_form.rb +69 -0
  25. data/app/forms/decidim/stratified_sortitions/admin/substratum_form.rb +26 -0
  26. data/app/helpers/decidim/stratified_sortitions/admin/stratified_sortitions_helper.rb +18 -0
  27. data/app/helpers/decidim/stratified_sortitions/application_helper.rb +85 -0
  28. data/app/helpers/decidim/stratified_sortitions/charts_pdf_helper.rb +73 -0
  29. data/app/helpers/decidim/stratified_sortitions/stratified_sortition_cells_helper.rb +56 -0
  30. data/app/javascript/channels/sample_import_progress.js +12 -0
  31. data/app/jobs/decidim/stratified_sortitions/admin/execute_sortition_job.rb +21 -0
  32. data/app/jobs/decidim/stratified_sortitions/admin/import_sample_job.rb +170 -0
  33. data/app/jobs/decidim/stratified_sortitions/admin/remove_samples_job.rb +19 -0
  34. data/app/jobs/decidim/stratified_sortitions/admin/sortition_results_export_job.rb +28 -0
  35. data/app/mailers/decidim/stratified_sortitions/admin/import_mailer.rb +26 -0
  36. data/app/models/decidim/stratified_sortitions/application_record.rb +9 -0
  37. data/app/models/decidim/stratified_sortitions/panel_portfolio.rb +165 -0
  38. data/app/models/decidim/stratified_sortitions/sample_import.rb +14 -0
  39. data/app/models/decidim/stratified_sortitions/sample_participant.rb +12 -0
  40. data/app/models/decidim/stratified_sortitions/sample_participant_stratum.rb +11 -0
  41. data/app/models/decidim/stratified_sortitions/stratified_sortition.rb +74 -0
  42. data/app/models/decidim/stratified_sortitions/stratum.rb +22 -0
  43. data/app/models/decidim/stratified_sortitions/substratum.rb +19 -0
  44. data/app/packs/entrypoints/decidim_stratified_sortitions.js +10 -0
  45. data/app/packs/entrypoints/decidim_stratified_sortitions_admin.js +9 -0
  46. data/app/packs/entrypoints/decidim_stratified_sortitions_admin.scss +1 -0
  47. data/app/packs/images/decidim/stratified_sortitions/icon.svg +1 -0
  48. data/app/packs/src/decidim/stratified_sortitions/application.js +3 -0
  49. data/app/packs/src/decidim/stratified_sortitions/results_tabs.js +59 -0
  50. data/app/packs/src/decidim/stratified_sortitions/stratum_fields.js +302 -0
  51. data/app/packs/src/decidim/stratified_sortitions/substratum_fields.js +165 -0
  52. data/app/packs/src/decidim/stratified_sortitions/upload_sample.js +16 -0
  53. data/app/packs/stylesheets/decidim/stratified_sortitions/admin/stratified_sortitions.scss +210 -0
  54. data/app/packs/stylesheets/decidim/stratified_sortitions/charts_pdf.scss +148 -0
  55. data/app/packs/stylesheets/stratified_sortitions.scss +56 -0
  56. data/app/permissions/decidim/stratified_sortitions/admin/permissions.rb +74 -0
  57. data/app/permissions/decidim/stratified_sortitions/permissions.rb +23 -0
  58. data/app/presenters/decidim/stratified_sortitions/admin_log/stratified_sortition_presenter.rb +35 -0
  59. data/app/queries/decidim/stratified_sortitions/filtered_stratified_sortitions.rb +39 -0
  60. data/app/serializers/decidim/stratified_sortitions/sortition_result_serializer.rb +116 -0
  61. data/app/services/decidim/stratified_sortitions/charts_pdf_generator.rb +96 -0
  62. data/app/services/decidim/stratified_sortitions/fair_sortition_service.rb +247 -0
  63. data/app/services/decidim/stratified_sortitions/leximin/constraint_builder.rb +180 -0
  64. data/app/services/decidim/stratified_sortitions/leximin/distribution_solver.rb +217 -0
  65. data/app/services/decidim/stratified_sortitions/leximin/feasibility_checker.rb +222 -0
  66. data/app/services/decidim/stratified_sortitions/leximin/panel_generator.rb +149 -0
  67. data/app/services/decidim/stratified_sortitions/leximin/panel_sampler.rb +125 -0
  68. data/app/services/decidim/stratified_sortitions/leximin_selector.rb +136 -0
  69. data/app/services/decidim/stratified_sortitions/sortition_results_exporter.rb +161 -0
  70. data/app/views/decidim/admin/components/index.html.erb +54 -0
  71. data/app/views/decidim/stratified_sortitions/admin/import_mailer/import.html.erb +22 -0
  72. data/app/views/decidim/stratified_sortitions/admin/stratified_sortitions/_confirm_execute_modal.html.erb +19 -0
  73. data/app/views/decidim/stratified_sortitions/admin/stratified_sortitions/_confirm_participants_modal.html.erb +20 -0
  74. data/app/views/decidim/stratified_sortitions/admin/stratified_sortitions/_form.html.erb +55 -0
  75. data/app/views/decidim/stratified_sortitions/admin/stratified_sortitions/_navigation_menu.html.erb +10 -0
  76. data/app/views/decidim/stratified_sortitions/admin/stratified_sortitions/_strata.html.erb +22 -0
  77. data/app/views/decidim/stratified_sortitions/admin/stratified_sortitions/_stratum.html.erb +75 -0
  78. data/app/views/decidim/stratified_sortitions/admin/stratified_sortitions/_substrata.html.erb +34 -0
  79. data/app/views/decidim/stratified_sortitions/admin/stratified_sortitions/_substratum.html.erb +54 -0
  80. data/app/views/decidim/stratified_sortitions/admin/stratified_sortitions/edit.html.erb +21 -0
  81. data/app/views/decidim/stratified_sortitions/admin/stratified_sortitions/execute.html.erb +155 -0
  82. data/app/views/decidim/stratified_sortitions/admin/stratified_sortitions/export_charts_pdf.html.erb +38 -0
  83. data/app/views/decidim/stratified_sortitions/admin/stratified_sortitions/index.html.erb +75 -0
  84. data/app/views/decidim/stratified_sortitions/admin/stratified_sortitions/new.html.erb +21 -0
  85. data/app/views/decidim/stratified_sortitions/admin/stratified_sortitions/upload_sample.html.erb +117 -0
  86. data/app/views/decidim/stratified_sortitions/shared/_strata_charts.html.erb +21 -0
  87. data/app/views/decidim/stratified_sortitions/stratified_sortitions/_results_count.html.erb +15 -0
  88. data/app/views/decidim/stratified_sortitions/stratified_sortitions/_stratified_sortition.html.erb +1 -0
  89. data/app/views/decidim/stratified_sortitions/stratified_sortitions/_stratified_sortitions.html.erb +13 -0
  90. data/app/views/decidim/stratified_sortitions/stratified_sortitions/_tags.html.erb +9 -0
  91. data/app/views/decidim/stratified_sortitions/stratified_sortitions/index.html.erb +22 -0
  92. data/app/views/decidim/stratified_sortitions/stratified_sortitions/index.js.erb +5 -0
  93. data/app/views/decidim/stratified_sortitions/stratified_sortitions/show.html.erb +142 -0
  94. data/app/views/layouts/decidim/admin/_sidebar_menu.html.erb +45 -0
  95. data/app/views/layouts/decidim/stratified_sortitions/charts_pdf.html.erb +14 -0
  96. data/config/assets.rb +24 -0
  97. data/config/locales/ca.yml +361 -0
  98. data/config/locales/en.yml +360 -0
  99. data/config/locales/es.yml +360 -0
  100. data/config/locales/oc.yml +2 -0
  101. data/config/routes.rb +1 -0
  102. data/db/migrate/20251023103900_create_decidim_stratified_sortitions_stratified_sortitions.rb +18 -0
  103. data/db/migrate/20251104120000_create_stratified_sortitions_strata_and_substrata.decidim_stratified_sortitions.rb +27 -0
  104. data/db/migrate/20251219120000_create_sample_imports.rb +17 -0
  105. data/db/migrate/20251219120100_create_sample_participants.rb +19 -0
  106. data/db/migrate/20251219120200_create_sample_participant_strata.rb +16 -0
  107. data/db/migrate/20251230130000_change_value_to_text_in_substrata.rb +11 -0
  108. data/db/migrate/20260102114744_add_status_to_stratified_sortitions.rb +11 -0
  109. data/db/migrate/20260109105643_allow_null_value_in_substrata.rb +10 -0
  110. data/db/migrate/20260113121726_add_position_to_strata_and_substrata.rb +8 -0
  111. data/db/migrate/20260127100000_rename_weighing_to_max_quota_percentage.rb +12 -0
  112. data/db/migrate/20260127120000_create_panel_portfolios.rb +46 -0
  113. data/db/migrate/20260518000000_add_foreign_key_to_stratified_sortitions_component.rb +10 -0
  114. data/db/migrate/20260521000000_add_cascade_to_stratified_sortitions_foreign_keys.rb +64 -0
  115. data/db/migrate/20260616000000_add_execution_error_to_stratified_sortitions.rb +11 -0
  116. data/lib/decidim/stratified_sortitions/admin.rb +10 -0
  117. data/lib/decidim/stratified_sortitions/admin_engine.rb +49 -0
  118. data/lib/decidim/stratified_sortitions/component.rb +41 -0
  119. data/lib/decidim/stratified_sortitions/engine.rb +34 -0
  120. data/lib/decidim/stratified_sortitions/seeds.rb +24 -0
  121. data/lib/decidim/stratified_sortitions/test/factories.rb +80 -0
  122. data/lib/decidim/stratified_sortitions/version.rb +13 -0
  123. data/lib/decidim/stratified_sortitions.rb +29 -0
  124. metadata +222 -0
@@ -0,0 +1,361 @@
1
+ ---
2
+ ca:
3
+ activemodel:
4
+ attributes:
5
+ stratified_sortition:
6
+ created_at: Data de creació
7
+ title: Títol
8
+ description: Descripció
9
+ num_candidates: Nombre de persones candidates a seleccionar
10
+ selection_criteria: Criteris d'elegibilitat
11
+ selected_profiles_description: Descripció dels perfils a seleccionar
12
+ errors:
13
+ messages:
14
+ cannot_add_strata_with_sample_participants: "No es poden afegir estrats quan ja hi ha participants importats"
15
+ cannot_delete_strata_with_sample_participants: "No es poden eliminar estrats quan ja hi ha participants importats"
16
+ cannot_change_stratum_name_with_sample_participants: "No es pot canviar el nom de l'estrat quan ja hi ha participants importats"
17
+ cannot_change_stratum_kind_with_sample_participants: "No es pot canviar el tipus de l'estrat quan ja hi ha participants importats"
18
+ cannot_add_substrata_with_sample_participants: "No es poden afegir subestrats quan ja hi ha participants importats"
19
+ cannot_delete_substrata_with_sample_participants: "No es poden eliminar subestrats quan ja hi ha participants importats"
20
+ cannot_change_substratum_name_with_sample_participants: "No es pot canviar el nom del subestrat quan ja hi ha participants importats"
21
+ cannot_change_substratum_value_with_sample_participants: "No es pot canviar el valor del subestrat quan ja hi ha participants importats"
22
+ cannot_change_substratum_range_with_sample_participants: "No es pot canviar el rang del subestrat quan ja hi ha participants importats"
23
+ cannot_change_num_candidates_when_executed: "No es pot canviar el nombre de candidats després que el sorteig hagi estat executat"
24
+ decidim:
25
+ admin:
26
+ components:
27
+ index:
28
+ headers:
29
+ scope: Àmbit
30
+ components:
31
+ stratified_sortitions:
32
+ name: Sortejos estratificats
33
+ settings:
34
+ global:
35
+ announcement: Avís
36
+ publish_sortitions: Publicar gràfics comparatius dels sortejos
37
+ step:
38
+ announcement: Avís
39
+ stratified_sortitions:
40
+ admin:
41
+ actions:
42
+ configure: Configura
43
+ confirm_destroy: Segur que vols eliminar aquest %{name}?
44
+ destroy: Esborra
45
+ duplicate: Duplica
46
+ execute: Executar sorteig
47
+ new_stratified_sortition: "Nou sorteig estratificat"
48
+ title: "Accions"
49
+ census_management: Gestiona la mostra
50
+ models:
51
+ stratified_sortition:
52
+ fields:
53
+ created_at: Data de creació
54
+ title: Títol
55
+ description: Descripció
56
+ num_candidates: Nombre de candidates a seleccionar
57
+ selection_criteria: Criteris d'elegibilitat
58
+ selected_profiles_description: Descripció dels perfils a seleccionar
59
+ status: Estat
60
+ stratified_sortitions:
61
+ create:
62
+ error: S'ha produït un problema en crear aquest sorteig estratificat
63
+ success: Sorteig estratificat creat amb èxit
64
+ destroy:
65
+ error: S'ha produït un problema en eliminar aquest sorteig estratificat
66
+ has_problems: Aquest sorteig estratificat no s'ha pogut eliminar degut a problemes relacionats
67
+ success: Sorteig estratificat eliminat amb èxit
68
+ duplicate:
69
+ error: S'ha produït un problema en duplicar aquest sorteig estratificat
70
+ success: Sorteig estratificat duplicat amb èxit
71
+ execute:
72
+ candidates: Candidats
73
+ chart_results: Gràfics de distribució
74
+ tab_charts: Gràfics comparatius
75
+ tab_participants: Participants seleccionats
76
+ empty_sample_participants: No es pot executar el sorteig sense un cens carregat
77
+ execute_stratified_sortition: Executar sorteig estratificat
78
+ confirm_execute_title: Confirmació
79
+ confirm_execute_body: En executar el sorteig aquest quedarà registrat a la plataforma i l'acció serà irreversible. No es podran editar les dades, la configuració dels estrats ni la mostra.
80
+ confirm_execute_ok: Executar sorteig
81
+ confirm_execute_cancel: Cancel·lar
82
+ export: Exporta
83
+ export_results: Exporta els resultats
84
+ export_csv: Resultats del sorteig estratificat com a CSV
85
+ export_excel: Resultats del sorteig estratificat com a Excel
86
+ export_json: Resultats del sorteig estratificat com a JSON
87
+ export_charts_pdf: Exportar gràfics PDF
88
+ pdf_title: "Resultats del sorteig %{name}"
89
+ pdf_subtitle: Gràfics comparatius de distribució de la mostra
90
+ pdf_belongs_to: "Pertany a: %{space_name}"
91
+ pdf_algorithm: "Algorisme utilitzat: %{algorithm}"
92
+ pdf_executed_at: "Sorteig realitzat el: %{date}"
93
+ pdf_no_data: Sense dades
94
+ algorithm: Algorisme
95
+ generated_at: Generat el
96
+ generation_time: Temps de generació
97
+ total_participants: Total de participants
98
+ num_panels: Nombre de panels
99
+ selected_at: Seleccionat el
100
+ verification_seed: Llavor de verificació (seed)
101
+ random_value_used: Valor aleatori utilitzat
102
+ selected_panel_probability: Probabilitat del panel seleccionat
103
+ selected_participants_title: Participants seleccionats
104
+ selected_participants:
105
+ one: "1 participant seleccionat"
106
+ other: "%{count} participants seleccionats"
107
+ participant_id: ID
108
+ personal_data_1: "Dada personal 1 (identificador únic)"
109
+ personal_data_2: Dada personal 2
110
+ personal_data_3: Dada personal 3
111
+ personal_data_4: Dada personal 4
112
+ no_results_yet: El sorteig encara no s'ha executat.
113
+ confirm_participants_title: Mostra el llistat de les participants seleccionades
114
+ confirm_participants_body: Estàs accedint a informació i dades personals. Aquesta acció quedarà registrada.
115
+ confirm_participants_ok: Mostra
116
+ confirm_participants_cancel: Cancel·la
117
+ results: Resultats
118
+ executing_notice: El sorteig s'està processant en segon pla. Aquesta pàgina s'actualitzarà quan hagi finalitzat.
119
+ execution_failed: "L'execució del sorteig ha fallat:"
120
+ success: Sorteig estratificat executat amb èxit
121
+ executing: El sorteig ha estat encuat i s'està processant en segon pla.
122
+ target: Objectiu
123
+ title: Executar sorteig estratificat
124
+ export_results:
125
+ no_results: No hi ha resultats per exportar. Executeu el sorteig primer.
126
+ index:
127
+ selected: Sortejos estratificats seleccionats
128
+ title: Sortejos estratificats
129
+ new:
130
+ create: Crea
131
+ title: Nou sorteig estratificat
132
+ edit:
133
+ title: Edita el sorteig estratificat
134
+ update: Actualitza
135
+ form:
136
+ data: Informació general
137
+ description: Descripció
138
+ name: Nom
139
+ published: Publicat
140
+ selected_profiles_description_help: Pots indicar, si s'escau, els criteris d'estratificació utilitzats en el sorteig, i el motiu.
141
+ selection_criteria_help: Pots indicar, si s'escau, els criteris d'elegibilitat de les persones que han estat seleccionades per participar en el sorteig.
142
+ strata:
143
+ title: Estrats
144
+ add_stratum: Afegeix estrat
145
+ stratum:
146
+ up: Amunt
147
+ down: Avall
148
+ remove: Eliminar
149
+ name: Nom
150
+ kind:
151
+ numeric_range: Rang numèric
152
+ title: Tipus
153
+ value: Valor
154
+ substrata_title: Subestrats
155
+ title: Estrat
156
+ substrata:
157
+ add_substratum: Afegir subestrat
158
+ substratum:
159
+ up: Amunt
160
+ down: Avall
161
+ remove: Eliminar
162
+ name: Nom
163
+ value: Valor
164
+ value_placeholder: Valor
165
+ range: Rang
166
+ range_placeholder: Rang (p. ex. 0-18)
167
+ title: Subestrat
168
+ max_quota_percentage: Objectiu %
169
+ max_quota_percentage_placeholder: Objectiu %
170
+ update:
171
+ error: S'ha produït un problema en actualitzar aquest sorteig estratificat
172
+ success: Sorteig estratificat actualitzat amb èxit
173
+ upload_sample:
174
+ age: Grup d'edat
175
+ candidates: Candidats
176
+ census_file: Tria un fitxer
177
+ census_file_label: Arxiu excel.csv amb les dades del cens
178
+ configure_strata_first: Primer has de configurar els estrats i subestrats
179
+ confirm_remove_uploaded_samples: Estàs segur que vols eliminar totes les mostres carregades?
180
+ count_uploaded_files: "<b>%{count}</b> registres carregats."
181
+ description: "El fitxer de la mostra ha de ser un CSV i ha de tenir un format similar al de l'exemple següent:<br>Pots descarregar i utilitzar la plantilla."
182
+ download_template: "Descarregar plantilla"
183
+ download_template_csv: "Descarregar plantilla com a CSV"
184
+ download_template_xlsx: "Descarregar plantilla com a XLSX"
185
+ example: "Dada personal 1 (identificador únic)| Dada personal 2 | Dada personal 3 | Dada personal 4 | Gènere | Edat<br>11111111X | Nom exemple 1 | Telèfon Exemple 1 | correu1@exemple.com | Home | 45<br>22222222X | Nom exemple 2 | Telèfon Exemple 2 | correu2@exemple.com | Dona | 42<br>"
186
+ example_headers:
187
+ personal_data_1: "Dada personal 1 (identificador únic)"
188
+ personal_data_2: "Dada personal 2"
189
+ personal_data_3: "Dada personal 3"
190
+ personal_data_4: "Dada personal 4"
191
+ gender: Gènere
192
+ age: Edat
193
+ example_rows:
194
+ - - "11111111X"
195
+ - "Nom exemple 1"
196
+ - "Telèfon Exemple 1"
197
+ - "correu1@exemple.com"
198
+ - "Home"
199
+ - "45"
200
+ - - "22222222X"
201
+ - "Nom exemple 2"
202
+ - "Telèfon Exemple 2"
203
+ - "correu2@exemple.com"
204
+ - "Dona"
205
+ - "42"
206
+ execute_stratified_sortition: Executa el sorteig
207
+ execute_stratified_sortition_help: El sorteig no es pot executar fins que no es carreguin registres.
208
+ filename_data: "%{filename}, el dia %{date}, número de registres %{count}"
209
+ gender: Gènere
210
+ last_upload_date: La última càrrega va ser el dia %{date}
211
+ help: "La mostra ha de ser un fitxer CSV o Excel.<br> Cada fila respresenta un candidat/candidata."
212
+ no_data: Sense dades
213
+ place: Lloc de naixement
214
+ remove_uploaded_samples: Elimina tots els registres
215
+ confirm_remove_uploaded_samples: Estàs segur que vols eliminar totes les registres?
216
+ target: Objectiu
217
+ title: Gestionar mostra
218
+ upload_census: Puja una nova mostra
219
+ upload_file: Puja nova mostra
220
+ uploaded_file: Dades de la mostra carregada
221
+ uploaded_files: "S'han agregat els següents fitxers:"
222
+ no_uploaded_files: "No hi ha fitxers carregats."
223
+ help_csv: "<b>L'arxiu a carregar ha de seguir les següents instruccions:</b>
224
+ <ul><li>El format del fitxer ha de ser .csv. Pots descarregar una plantilla.</li>
225
+ <li>La primera columna és obligatòria. És l'identificador únic de cada participant i pot ser el DNI, un codi generat aleatòriament o qualsevol altra forma d'identificació que es vulgui fer servir.</li>
226
+ <li>Les columnes 2,3 i 4 (Dada personal 2, 3, 4) són opcionals i no s'utilitzen per fer el sorteig. Serveixen per afegir-hi les dades de contacte de cada participant.</li>
227
+ <li>Les columnes dels estrats són obligatòries i han de tenir el mateix ordre i nom que el que hàgim configurat en l'apartat anterior.</li>
228
+ <li>La informació a incloure a les columnes ha de coincidir amb algun dels Valors que hàgim indicat per cada estrat.</li>
229
+ <li>Si una participant no té dades en algun dels estrats o no coincideix amb algun dels valors configurats, serà exclosa del sorteig.</li></ul>"
230
+ help_submit: 'En "Desar" el sistema realitzarà la càrrega de les dades en segon pla. Pot trigar varis minuts depenent del volum de participants. En finalitzar la càrrega, el resultat es notificarà via email.'
231
+ import_mailer:
232
+ subject: "Resultat de la importació de la mostra"
233
+ import:
234
+ ready: "La importació de la mostra ha finalitzat correctament."
235
+ total_rows: "Total de files"
236
+ imported_rows: "Importades correctament"
237
+ failed_rows: "Files amb errors"
238
+ errors_summary: "Total de files: %{total}. Importades correctament: %{imported}. Files amb errors: %{failed}."
239
+ see_details: "Els identificadors dels participants que han tingut error són:"
240
+ participant_id: "Identificador del participant:"
241
+ samples:
242
+ template:
243
+ personal_data_1: "Dada personal 1 (identificador únic)"
244
+ personal_data_2: "Dada personal 2"
245
+ personal_data_3: "Dada personal 3"
246
+ personal_data_4: "Dada personal 4"
247
+ import_success: "La mostra s'ha importat correctament."
248
+ import_failed: "Hi ha hagut un error en importar la mostra: %{error}"
249
+ errors:
250
+ no_file: "No s'ha seleccionat cap fitxer."
251
+ no_strata: "Has de configurar els estrats i subestrats abans de pujar una mostra."
252
+ pending: "Només pots pujar mostres quan el sorteig estratificat està en estat pendent."
253
+ sample_imports:
254
+ create:
255
+ success: "La mostra s'està carregant en segon pla. Quan acabi rebràs un correu amb el resum de la importació."
256
+ remove_uploaded_samples:
257
+ enqueued: "L'eliminació de la mostra ha estat encuada i es processarà en segon pla."
258
+ success: "Les mostres carregades s'han eliminat correctament."
259
+ error: "Hi ha hagut un error en eliminar les mostres carregades."
260
+ stratified_sortitions:
261
+ count:
262
+ candidates_count:
263
+ one: 1 candidat
264
+ other: "%{count} candidats"
265
+ filters:
266
+ all: Tots
267
+ pending: Pendent
268
+ executing: Executant
269
+ executed: Executat
270
+ failed: Fallat
271
+ state: Estat
272
+ index:
273
+ empty: Encara no hi ha sortejos estratificats.
274
+ orders:
275
+ label: 'Ordenar sortejos estratificats per:'
276
+ random: Aleatori
277
+ recent: Recent
278
+ results_count:
279
+ count:
280
+ one: Candidat a seleccionar
281
+ other: Candidats a seleccionar
282
+ count_selected:
283
+ one: Candidat seleccionat
284
+ other: Candidats seleccionats
285
+ show:
286
+ introduction: "Aquesta pàgina conté els detalls del sorteig estratificat %{reference}. Mitjançant aquest sorteig, s'han seleccionat %{num_candidates} candidats utilitzant un algorisme de selecció aleatòria estratificada que garanteix la representació justa en tots els estrats definits."
287
+ description: Descripció
288
+ selection_criteria: Criteris d'elegibilitat
289
+ selected_profiles_description: Descripció dels perfils seleccionats
290
+ to_be_selected_profiles_description: Descripció dels perfils a seleccionar
291
+ strata: Estrats
292
+ max_quota: Quota màxima
293
+ selected_participants: Participants seleccionats
294
+ selected_participants_count:
295
+ one: S'ha seleccionat 1 participant
296
+ other: "S'han seleccionat %{count} participants"
297
+ sortition_details: Detalls del sorteig
298
+ num_candidates: Nombre de candidates a seleccionar
299
+ status: Estat
300
+ strata_count: Nombre d'estrats
301
+ algorithm: Algorisme
302
+ algorithm_name: LEXIMIN
303
+ algorithm_description: Algorisme de selecció aleatòria estratificada que garanteix la representació justa en tots els estrats definits
304
+ reproducibility_details: Reproductibilitat del sorteig
305
+ verification_seed: Llavor de verificació
306
+ random_value_used: Valor aleatori utilitzat
307
+ selected_panel_index: Índex del panell seleccionat
308
+ selected_at: Seleccionat el
309
+ strata_charts: Distribució dels perfils
310
+ target: Objectiu a assolir
311
+ candidates: Candidatures rebudes
312
+ no_data: Sense dades
313
+ results: Resultats del sorteig
314
+ statuses:
315
+ pending: Pendent
316
+ executing: Executant
317
+ executed: Executat
318
+ failed: Fallat
319
+ stratified_sortition:
320
+ num_candidates: candidats a seleccionar
321
+ strata_count: estrats
322
+ stratified_sortitions_count:
323
+ count:
324
+ one: 1 sorteig estratificat
325
+ other: "%{count} sortejos estratificats"
326
+ admin_log:
327
+ stratified_sortition:
328
+ create: "%{user_name} ha creat el sorteig estratificat %{resource_name} a %{space_name}"
329
+ update: "%{user_name} ha actualitzat el sorteig estratificat %{resource_name} a %{space_name}"
330
+ delete: "%{user_name} ha eliminat el sorteig estratificat %{resource_name} a %{space_name}"
331
+ duplicate: "%{user_name} ha duplicat el sorteig estratificat %{resource_name}"
332
+ import_sample: "%{user_name} ha importat una mostra al sorteig estratificat %{resource_name} a %{space_name}"
333
+ remove_samples: "%{user_name} ha eliminat els registres importats del sorteig estratificat %{resource_name} a %{space_name}"
334
+ execute: "%{user_name} ha executat el sorteig estratificat %{resource_name} a %{space_name}"
335
+ export_results: "%{user_name} ha exportat els resultats del sorteig estratificat %{resource_name} a %{space_name}"
336
+ view_participants: "%{user_name} ha consultat el llistat de participants seleccionades del sorteig estratificat %{resource_name} a %{space_name}"
337
+ errors:
338
+ panel_portfolio:
339
+ already_sampled: "La cartera ja ha estat mostrejada"
340
+ probabilities_size_mismatch: "han de tenir la mateixa mida que els panells (%{panels_count} panells, %{probabilities_count} probabilitats)"
341
+ probabilities_sum_invalid: "han de sumar 1.0 (actualment %{total})"
342
+ feasibility:
343
+ panel_size_positive: "La mida del panell (num_candidates) ha de ser un número positiu"
344
+ no_categories: "No hi ha categories (substrats) definides. Cal configurar els estrats i substrats abans d'executar l'algorisme"
345
+ no_volunteers: "No hi ha voluntaris al pool. Cal importar participants abans d'executar el sorteig"
346
+ pool_too_small: "El pool de voluntaris (%{volunteers_count}) és més petit que la mida del panell (%{panel_size}). Afegiu més participants o reduïu el nombre de candidats a seleccionar"
347
+ stratum_insufficient_quotas: "L'estrat '%{stratum_name}' té quotes màximes insuficients. La suma de quotes màximes (%{total_max}) és menor que la mida del panell (%{panel_size})"
348
+ stratum_percentages_exceed: "L'estrat '%{stratum_name}' té percentatges que sumen més del 100%% (%{total_percentage}%%)"
349
+ substratum_insufficient_volunteers: "El substrat '%{substratum_name}' de l'estrat '%{stratum_name}' requereix mínim %{min_quota} voluntaris però només n'hi ha %{volunteers_count}"
350
+ substratum_quota_exceeds_volunteers: "El substrat '%{substratum_name}' de l'estrat '%{stratum_name}' té una quota màxima de %{max_quota} (%{percentage}%%) però només %{volunteers_count} voluntari(s) pertanyen a aquesta categoria. Reduïu el percentatge de quota màxima o afegiu més participants en aquesta categoria"
351
+ volunteers_missing_strata: "Hi ha %{count} voluntari(s) que no tenen assignat un substrat per a cada estrat. Això pot causar problemes en l'algorisme de selecció"
352
+ no_name: "Sense nom"
353
+ fair_sortition:
354
+ already_performed: "El sorteig ja s'ha realitzat per aquest procés"
355
+ portfolio_generation_failed: "Error generant la cartera de panells: %{error}"
356
+ no_portfolio: "No hi ha cartera de panels. Executeu `generate_portfolio` primer"
357
+ sampling_failed: "Error en el mostreig: %{error}"
358
+ leximin:
359
+ no_feasible_panel: "No s'ha pogut trobar cap panell inicial vàlid. La combinació de restriccions de quota (percentatges màxims) i la mostra disponible fan impossible formar un panell. Possibles causes: (1) Els percentatges de quota màxima d'alguns substrats són massa restrictius per a la mida de la mostra disponible. (2) No hi ha prou participants en certes combinacions de substrats. (3) El nombre de candidats a seleccionar és massa gran en relació a la mostra. Proveu d'ajustar els percentatges de quota màxima o carregueu una mostra més gran."
360
+ internal_error: "Error intern en l'algorisme de selecció: %{error}. Si us plau, verifiqueu que la configuració dels estrats i els percentatges de quota màxima són compatibles amb la mostra carregada."
361
+