Commit graph

668 commits

Author SHA1 Message Date
Damien Le Thiec
73f6063c87
Merge branch 'main' into feature/add_rna_type_de_champs 2022-10-11 15:36:46 +02:00
Damien Le Thiec
bcdc9c18ae Remove skip_fetch_data mechanism 2022-10-11 11:52:59 +02:00
Paul Chavard
bc5e46e6de chore(db): add index on type to champs 2022-10-11 10:43:32 +02:00
Martin
c52b06a84f fix(data): move type de champs engagement to checkbox 2022-10-07 18:30:56 +02:00
Christophe Robillard
6d90f65159 backfill procedures_zones 2022-10-07 10:48:34 +02:00
Christophe Robillard
bffd9d61a9 add habtm between procedures and zones 2022-10-07 10:48:34 +02:00
Martin
f2a6697ebe fix(migration): backfill max_duree_conservation_dossiers_dans_ds without typo 2022-10-06 20:08:48 +02:00
simon lehericey
95430b2ee8 perf: add index on invite dossier_id 2022-10-06 17:17:27 +02:00
Martin
405a885160 feat(procedure.max_duree_conservation_dossiers_dans_ds): make it more flexible 2022-10-05 17:27:09 +02:00
Christophe Robillard
dc15b39648 add zone_label migration 2022-09-26 16:58:53 +02:00
Paul Chavard
16bba911ba Revert "Merge pull request #7637 from tchak/chore-add-missing-foreign-keys"
This reverts commit b21ee46dc2, reversing
changes made to dd85b5c35c.
2022-09-21 15:20:42 +02:00
Paul Chavard
2485fb67cc fix(db): add missing foreign key on attachements blob_id 2022-09-20 15:18:19 +02:00
Paul Chavard
84b9644bcd fix(db): add missing foreign keys 2022-09-20 15:16:52 +02:00
Colin Darie
81149cc809 chore(schema): safer migration for add_etablissment_infos_to_services 2022-09-06 09:23:52 +02:00
Colin Darie
7d39cc6b3e chore(schema): +services#etablissement_{infos,geopoint}
- `etablissement_infos` est une représentation partielle en jsonb
de ce qui est renvoyé par l'API Entreprise.
(On ne conserve que l'adresse pour le moment, utilisée pour le geocodage)
- `etablissement_geopoint` est le point (x,y) issu du géocodage de
l'établissement
2022-09-06 09:23:52 +02:00
Colin Darie
a4d9a45280 chore(schema): +services#siret 2022-09-06 09:23:52 +02:00
simon lehericey
8c884b4869 fix(migration): fix avis email notification migration 2022-09-02 17:23:04 +02:00
Kara Diaby
aab0c445de Add instant avis email notification to assign_tos 2022-09-02 16:17:22 +02:00
Martin
5b551682cb feat(super-admin): re-add to procedure without any instructeur 2022-08-24 14:37:27 +02:00
Martin
e23525ff4a feat(clean.super_admin.assign_tos): remove former assign to so our support team is happy :-) 2022-08-23 14:39:40 +02:00
Martin
c2e0994e11 feat(Administrateur::ArchivesController#*): prevent SuperAdmin to index/download archives 2022-08-23 13:28:10 +02:00
Martin
f0a4cbb61e feat(assign_tos): add manager column to assign_tos table. Same idea as administrateur_procedures.manager which flag a link between procedure/administrateur coming from a SuperAdmin [target: able to avoid SuperAdmin sec issues] 2022-08-23 13:28:10 +02:00
Paul Chavard
e764aade13 fix(db): types_de_champ migration is too long 2022-08-03 14:22:34 +02:00
Paul Chavard
10ef4a4be5 chore(db): remove ignored columns 2022-08-02 15:24:52 +02:00
Colin Darie
67d2cb2061 chore(schema): add exports#job_status
Same behavior as Archive

On destroy tous les exports existants qui n'ont pas cette notion de status.
2022-07-26 17:53:24 +02:00
Colin Darie
e1d3d1f844 chore(schema): add entreprise_etat_administratif to etablissements 2022-07-25 10:58:02 +02:00
Martin
3e56fdd1d7 fix(export): when it takes more than 3 hours, exports are purge before being generated. make it possible to have an export that takes more than 3 hours and share this behaviour with kind of same class archive 2022-07-25 10:48:54 +02:00
Martin
24c8dc5829 feat(procedure.duree_conservation_dossiers_dans_ds): decrease max duree_conservation_dossiers_dans_ds from 36 to 12 2022-07-18 14:08:53 +02:00
Christophe Robillard
ea59f5f260 add opendata boolean attribute for procedure
when opendata is set to true, it means that descriptive's procedure can be
public
when opendata is set to false, ti means that descriptive's can not be
public, because the procedure is only available for public servants, not
citizens.
2022-06-23 14:11:09 +02:00
Martin
a1623a1213 fix(data): ensure to populate closed column in after_party migration 2022-06-21 18:46:13 +02:00
Martin
4275096349 fix(AddColumnClosedToGroupeInstructeurs): add column with change_column_default 2022-06-21 16:15:28 +02:00
Martin
ab4d4c83a8 feat(GroupeInstructeurs.closed): add closed option to GroupeInstructeur in order to prevent usagers to submit dossier 2022-06-20 16:32:06 +02:00
Martin
274b5eab2e feat(invite): wrap invitation with targeted_user_links 2022-06-17 16:44:37 +02:00
simon lehericey
758933f6f9 tdc can have condition 2022-06-17 14:53:28 +02:00
Martin
cb890343ff feat(targeted_user_link): add targeted user link to wrap expert invitation in order to avoid access issue when the expert is connected with another account
feat(user.merge): ensure to merge user.targeted_user_link

Update app/models/targeted_user_link.rb

Co-authored-by: LeSim <mail@simon.lehericey.net>

Update app/models/targeted_user_link.rb

Co-authored-by: LeSim <mail@simon.lehericey.net>

Update app/models/targeted_user_link.rb

Co-authored-by: LeSim <mail@simon.lehericey.net>

feat(db/create_targeted_user_links): ensure not null with fk
2022-05-31 14:50:31 +02:00
Kara Diaby
0381444770 migration 2022-05-26 12:45:05 +02:00
Martin
3737311390 feat(procedure.procedure_expires_when_termine_enabled): enable by default, allow contributor to choose the default settings of this flag using an env var during migration. ie: DEFAULT_PROCEDURE_EXPIRES_WHEN_TERMINE_ENABLED=true|false
feat(administrateurs/procedures#show): warning/alert when procedure_expires_when_termine_enabled is not true on current procedure

feat(administrateur/procedure#update): after an update redirect to procedure show: suggested by: https://ux.stackexchange.com/questions/55291/after-updating-form-should-redirect-back-to-form-itself-or-to-the-show-page-or-b and confirmed by Olivier

clean(Flipper.archive_zip_globale): no more in use, so remove all occurences

Update app/views/administrateurs/procedures/_suggest_expires_when_termine.html.haml

Co-authored-by: Pierre de La Morinerie <kemenaran@gmail.com>

Update app/views/administrateurs/procedures/_suggest_expires_when_termine.html.haml

Co-authored-by: Pierre de La Morinerie <kemenaran@gmail.com>

Update app/views/administrateurs/procedures/_suggest_expires_when_termine.html.haml

Co-authored-by: Pierre de La Morinerie <kemenaran@gmail.com>

Update spec/views/administrateurs/procedures/show.html.haml_spec.rb

Co-authored-by: Pierre de La Morinerie <kemenaran@gmail.com>

fix(review): typo, why ena?, who knows

fix(env.example.optional): add missing DEFAULT_PROCEDURE_EXPIRES_WHEN_TERMINE_ENABLED
2022-05-05 13:07:11 +02:00
Martin
636f887698 fix(user.merge): when merging old_user having an instructeur with dossier_operation_logs containing the old_user.instructeur_id, should be able to merge to new instructeur
feat(user.merge): when user have an instructeur having dossier_opertions_logs containing instructeur_id
2022-05-04 14:24:11 +02:00
Paul Chavard
27f9a820cc feat(dossier): add preview flag 2022-04-28 11:52:38 +02:00
Martin
be090a1bec feat(administrateur/procedure#create): allow admin to add a lien to the DPO, allow user to consult link to dpo. enhance spec on _procedure_footer.html
Update spec/views/users/_procedure_footer.html.haml_spec.rb

Co-authored-by: Pierre de La Morinerie <kemenaran@gmail.com>
2022-04-27 15:09:02 +02:00
Remi-Frk
17bf19e3f0 fix(migrate): lien administrateurs_procedures - administrateurs 2022-04-25 14:20:57 +02:00
simon lehericey
53de567b59 revert fix(user.merge) : waiting for ignore column instructeur_id in ruby code 2022-04-12 14:02:20 +02:00
Martin
e83f5fe475 fix(user.merge): when merging old_user having an instructeur with dossier_operation_logs containing the old_user.instructeur_id, should be able to merge to new instructeur
feat(user.merge): when user have an instructeur having dossier_opertions_logs containing instructeur_id
2022-04-12 11:28:33 +02:00
Martin
f84c7ac5e4 fix(migration): apply what strong migration recommends 2022-04-07 10:25:05 +02:00
Paul Chavard
21945b6df0 fix(exports): disable strong migration checks because we are operating on a “small” table 2022-04-07 09:44:09 +02:00
Paul Chavard
9904dabffe feat(procedure_presentation): pass filters as serialized snapshot 2022-04-06 17:08:38 +02:00
Paul Chavard
be1a2f916d feat(exports): add statut and procedure_presentation to exports 2022-04-06 17:08:38 +02:00
simon lehericey
200e8680d5 add uniq index on attestation dossier_id 2022-04-05 15:43:21 +02:00
Pierre de La Morinerie
79ea80c199 db: remove deprecated role columns on user 2022-03-29 14:52:38 +02:00
Pierre de La Morinerie
017625207e db: add constraints to role tables 2022-03-29 14:52:38 +02:00
Pierre de La Morinerie
9dcd92a678 db: add not-null constraints to AdministrateursInstructeur 2022-03-22 13:32:02 +01:00
Pierre de La Morinerie
21bf4d38cf db: alphabetize schema.rb
This avoids the column order being de-synchronized between different
machines.
2022-03-16 10:30:25 +01:00
Pierre de La Morinerie
48ea53b90d db: add foreign keys to Administrateur, Instructeur and Expert 2022-03-15 15:15:51 +01:00
Pierre de La Morinerie
27edc6676d db: add foreign key contraint to AdministrateursProcedure
In production there are around 20 000 AdministrateursProcedure
records that reference a deleted Procedure.
2022-03-08 14:48:17 +01:00
Pierre de La Morinerie
a4108c7787 db: backport delete_orphans in recent migrations
Recent migrations used ActiveRecord when removing invalid data. This may
break if the ActiveRecord model later changes.

To ensure these migrations will run correctly, even when the code will
have changed, let's use an SQL-based helper instead of ActiveRecord.
2022-03-08 14:48:17 +01:00
Pierre de La Morinerie
13dfa577bd db: add missing part of schema.rb 2022-03-02 14:09:43 +01:00
Pierre de La Morinerie
5eee6b161f db: add foreign key contraints to AdministrateursInstructeur 2022-03-02 14:09:23 +01:00
Pierre de La Morinerie
3fde7021e7 db: add foreign key contraint to AdministrateursProcedure 2022-03-01 16:58:04 +01:00
Martin
b808b4db00 fix(relation): avoid double association between procedure/procedure_revision/dossier_submitted_message 2022-02-25 14:01:18 +01:00
Martin
35b9487897 feat(data.integrity): add foreign key to prevent orphan data 2022-02-25 14:01:18 +01:00
Martin
85a588541b feat(dossier_submitted_message): add a new system to customize the standby page (/merci) after an user created his folder. this is a basic feature that will come with more options asap
wip(dossier_created_hook): add tile to administrateurs/procedure#show in order to crud dossier_created_hook

refactor(css.utilities): remove merge helpers.scss within utils.scss (same purpose). use scss each for spacer modifiers

refactor(dossiers/_merci.html): extract partial _merci so we can re-use it in preview of dossier_created_hook.

feat(wip): current progress
2022-02-25 14:01:18 +01:00
Kara Diaby
ebd0c711e6 add hidden by reason to dossiers 2022-02-09 14:43:36 +01:00
Paul Chavard
12151acb99 Revert "Revert "feat(attestation): revise attestations""
This reverts commit 4e7733e571.
2022-02-08 16:22:59 +01:00
Kara Diaby
8b76a8c2ae add supprimes_recemment to procedure presentation 2022-01-27 17:00:41 +01:00
Paul Chavard
4e7733e571 Revert "feat(attestation): revise attestations"
This reverts commit e413872530.
2022-01-25 18:26:34 +01:00
Paul Chavard
e413872530 feat(attestation): revise attestations 2022-01-19 18:00:37 +01:00
Kara Diaby
1ca553e088 rename hidden_by_instructeur by hidden_by_administration 2022-01-03 11:51:25 +01:00
Kara Diaby
cd95b730e0 add hidden_by_instructeur_at on dossiers 2021-12-29 17:37:57 +01:00
Paul Chavard
5e0f8a5816 task(type_de_champ): migrate type_de_champ parent_id 2021-12-06 21:45:54 +01:00
Paul Chavard
09c37435ad feat(procedure_revision_types_de_champ): add parent_id 2021-12-06 21:45:54 +01:00
Martin
bb9b750ce9 merge(main): fix conflict 2021-12-06 13:11:46 +01:00
Martin
1bb868714c fix(spec/lint/review): lint and fix spec of previous commits, also fix based on tchak feedback 2021-12-06 07:05:17 +01:00
Martin
d87f8b57cc feat(instructeurs/procedures#show): add dossier experiant in procedure#show 2021-12-06 07:05:17 +01:00
Martin
ce87878ff0 refactor(traitement.process_expired): move process expired to procedure 2021-12-03 16:32:36 +01:00
krichtof
b2902340af add db constraints for ministere
Co-authored-by: Paul Chavard <paul.chavard@beta.gouv.fr>
2021-12-02 19:24:26 +01:00
Christophe Robillard
561f6fb274 add belongs_to zone for procedure 2021-12-02 19:23:05 +01:00
Christophe Robillard
219eaf0d5e add zone model 2021-12-02 19:16:11 +01:00
simon lehericey
956d957dad Drop unused feedbacks table
Its foreign key prevent some user to be destroyed
2021-11-26 16:20:24 +01:00
Martin
970e43efb8 feat(stats#index): update Stat model to also query DossierDeleted in stats computation
tech(question): discard_and_keep_track! ; are we really keeping track with default_scope { kept } ?

feat(stats): add DeletedDossier in Stat computations

Revert "tech(question): discard_and_keep_track! ; are we really keeping track with default_scope { kept } ?"

This reverts commit d1155b7eeaaf1a9f80189e59667e109541fcb089.

feat(stats): support deleted_dossiers for last_four_months_hash and cumulative_hash. extract sanitize query & merge hashes in methdos

clean(rubocop): lint with rubocop

Update db/migrate/20211126080118_add_index_to_deleted_at_to_deleted_dossiers.rb

Co-authored-by: LeSim <mail@simon.lehericey.net>

fix(rubocop): avoid uneeded allocation

fix(migration): add concurrent index with expected synthax

fix(brakeman): add ignore message since group date_trunc evaluation is used by only ourself
2021-11-26 13:29:40 +01:00
kara Diaby
a91960bd4f add hidden by user column on dossiers 2021-11-26 09:45:13 +01:00
Paul Chavard
d847775c68 feat(traitements): add depose_at to dossiers 2021-11-25 12:57:55 +03:00
simon lehericey
1926a630f9 add agent_connect_id to instructeur 2021-11-23 14:17:59 +01:00
Martin
e48b6e0c1f tech(lint): rubocop 2021-11-16 14:30:06 +01:00
Martin
0aecc301c9 refactor(Commentarie.soft_delete): use discard 2021-11-16 14:28:38 +01:00
Martin
9d666b32bc fix(missing_file): add missing migration 2021-11-15 13:17:11 +01:00
Martin
9a8ec1087c feat(commentaire.soft_delete): wrap deletion behaviour in service 2021-11-15 12:43:53 +01:00
kara Diaby
475bf0bd2d add lock version to blobs 2021-11-04 17:42:43 +01:00
simon lehericey
6625c6bac3 add requested_merge_into column in user table 2021-11-04 16:10:09 +01:00
simon lehericey
7935e42109 Add merge log 2021-10-28 14:39:13 +02:00
Paul Chavard
09a09d3fcf feat(revisions): add rebased_at to champs 2021-10-20 17:26:09 +02:00
Paul Chavard
7e5d388ef8 fix(export): add index on champs.etablissement_id 2021-10-20 16:51:41 +02:00
simon lehericey
2e118a8f5b allow unattached fci 2021-10-14 14:47:50 +02:00
simon lehericey
6e6635560f Add merge token to FCI 2021-10-14 14:47:50 +02:00
Paul Chavard
288ea82286 fix(avis): add foreign key to avis dossier_id 2021-10-13 09:28:11 +02:00
simon lehericey
354735ace4 add champ value_json jsonb column 2021-10-12 14:27:20 +02:00
Paul Chavard
4a947f9135 feat(manager): add become administrateur button in manager (with 24h expiration) 2021-10-07 11:32:12 +02:00
simon lehericey
3a878dfc04 add identity_updated_at column to dossier 2021-10-05 12:05:43 +02:00
Paul Chavard
d4e8158887 feat(routing): add instructeurs_self_management_enabled to procedures 2021-09-27 15:06:17 +02:00
Paul Chavard
0ff62c5a5e feat(routage): add routing_enabled to procedures 2021-09-18 11:22:35 +02:00
simon lehericey
b000590d81 add api particulier sources to procedure 2021-09-17 13:50:23 +02:00
simon lehericey
2d2ae3a878 add api particulier scopes to procedure 2021-09-16 09:30:11 +02:00
Paul Chavard
dfafc57bb9 feat(dossier): add dossier_transfers and dossier_transfer_logs 2021-09-08 14:39:45 +02:00
Paul Chavard
f1ff6da81b feat(i18n): add locale to user 2021-09-07 09:47:01 +02:00
Paul Chavard
ffa8c0c80a feat(dossiers): enable dossiers termine expiration behind feature flag
feature flag "procedure_process_expired_dossiers_termine" controls if a procedure has expiration
enabled on dossiers termine

re #3796
2021-08-18 16:11:35 +01:00
simon lehericey
b29bae4707 a procedure has an encrypted api_particulier_token
Co-authored-by: François VANTOMME <akarzim@gmail.com>
2021-07-30 11:18:44 +02:00
kara Diaby
b6f931a968 add unique index on bulk messages join table 2021-07-27 20:32:28 +02:00
kara Diaby
ab0782530c create Bulk Message model and migration 2021-07-27 19:38:22 +02:00
Pierre de La Morinerie
02120c7c5f db: add uniqueness constraints to Etablissement 2021-07-22 18:00:34 +02:00
Pierre de La Morinerie
dea3395c91 db: add uniqueness constraints to DeletedDossiers 2021-07-22 17:57:11 +02:00
Pierre de La Morinerie
3d25fc995a db: add uniqueness constraints to Champs 2021-07-22 17:56:14 +02:00
Pierre de La Morinerie
0fd23ebd43 db: fix schema.rb leftovers 2021-07-22 17:55:47 +02:00
Paul Chavard
f238710044 Add last_month export 2021-06-23 09:23:10 +02:00
Paul Chavard
1888f74b10 Prevent double processing of declarative dossiers 2021-06-04 17:55:40 +02:00
Paul Chavard
306e5d228d Add published_at to procedure_revisions 2021-06-03 13:11:16 +02:00
Paul Chavard
8a74438dc1 Use conservation_extension instead of en_construction_conservation_extension 2021-05-11 17:33:53 +02:00
Paul Chavard
1e0d6ea28f Rename en_construction_conservation_extension to conservation_extension 2021-05-11 14:08:51 +02:00
simon lehericey
4dc314d24b [fix #6084] add db constraints to france_connect_informations table 2021-05-05 14:28:20 +02:00
Paul Chavard
bcbfcdc537 Revert "Merge pull request #6142 from tchak/enable_brouillon_extend_conservation"
This reverts commit 48eb4d9778, reversing
changes made to 5539d5cb8c.

# Conflicts:
#	app/models/dossier.rb
#	db/schema.rb
2021-05-04 16:03:29 +02:00
Paul Chavard
a4fd629f4a Enable user destruction 2021-05-04 12:05:06 +02:00
Paul Chavard
ba69edffc5 add conservation extension to dossiers 2021-04-29 18:03:57 +02:00
Christophe Robillard
f40d96fbd2 Revert "Revert "Export de tous les dossier d'une démarche""
This reverts commit d9a588b52e.
2021-04-29 17:29:47 +02:00
krichtof
d9a588b52e
Revert "Export de tous les dossier d'une démarche" 2021-04-29 16:07:18 +02:00
Christophe Robillard
09870c918d prevent race conditions when creating archives 2021-04-28 11:40:58 +02:00
Christophe Robillard
dfbe004122 rename content_type to time_span_type for archives 2021-04-28 11:40:58 +02:00
Christophe Robillard
c25f3c79d9 add archive model 2021-04-28 11:40:58 +02:00
Pierre de La Morinerie
d1777d8cd6 db: fix migration adding unique index to Individuals 2021-04-27 16:57:46 +02:00
Pierre de La Morinerie
d024b9ab9e db: add uniqueness constraints
Enforce uniqueness constraints at the database level, on:
- Invites,
- Procedures,
- Individuals.

These are the one less likely to have duplicates. A follow-up
PR will contains similar migrations, but more likely to have
existing duplicates that need to be removed.
2021-04-27 15:36:22 +02:00
Paul Chavard
c20ad5ca17 Remove the link between commentaire and user 2021-04-22 15:10:47 +01:00
simon lehericey
f542c0876e Add missing etablissement_id index on exercices table (-600ms) 2021-04-22 14:12:50 +02:00
kara Diaby
541a36abbf Add boolean to procedures table 2021-04-19 10:23:45 +02:00
simon lehericey
76e261691a add data column to france_connect_infromations 2021-04-13 09:59:28 +02:00
simon lehericey
cd6cb99c3c add bypass_email_login_token to instructeur 2021-04-13 09:43:38 +02:00
simon lehericey
b24faae7e3 remove obsolete procedure_id column in assign_to table 2021-04-09 11:41:13 +02:00
Paul Chavard
371d612fdb Remove unused columns 2021-04-08 12:43:29 +01:00
kara Diaby
60c06b6d8c add revoked at to experts_procedures 2021-04-06 10:39:22 +02:00
Paul Chavard
7f3d4a26ad Make exports#key not-null 2021-04-02 17:42:24 +01:00
Paul Chavard
fd48b86b7f Simplify export unicity check and use create_or_find_by 2021-04-01 21:14:16 +01:00
Pierre de La Morinerie
e865a894f2 db: add last part of ActiveStorage::Blob migration
On DS, we split the ActiveStorage schema migration from Rails 6.1 into two migrations:
1. one for adding the column and filling the data asynchronousely
2. one for marking the column as non-null

This is the second part of this migration: it marks the column as non-null.
2021-03-30 12:54:13 +02:00
Pierre de La Morinerie
dd9c3c3fbd db: fix missing change in schema 2021-03-30 10:46:17 +02:00
Pierre de La Morinerie
a08c18eb81 db: fix ActiveStorage migration to Rails 6.1
1. Executing an `update_all` on a lot of records is slow. Instead we
backfill the column in batches (without locking the table).

2. We can't mark the colum as not-null, because already running
instances still using the old code will not use the service_name
column yet.

  A later migration will backfill the remaining data and make the column
non-null.
2021-03-25 18:08:29 +01:00
Pierre de La Morinerie
305a312815 db: migrate ActiveStorage to Rails 6.1 2021-03-25 13:24:53 +01:00
Pierre de La Morinerie
5990439ab7 app: update code to Rails 6.1 2021-03-25 13:24:53 +01:00
kara Diaby
2165b5bcc6 fix tmp expert migrated on schema 2021-03-25 11:48:19 +01:00
kara Diaby
71973de17c remove useless columns from the db 2021-03-24 16:20:44 +01:00
kara Diaby
5e0cfbea07 add tmp_expert_migrated to avis table 2021-03-18 11:38:53 +01:00
kara Diaby
6383e6b9e7 Revert "Revert "Claimant type to avis table""
This reverts commit f4fd220d43.
2021-03-10 08:48:55 +01:00
Kara Diaby
f4fd220d43
Revert "Claimant type to avis table" 2021-03-09 13:40:10 +01:00
kara Diaby
af4a27f4e0 add claimant type on avis table 2021-03-07 22:47:24 +01:00
Paul Chavard
78a07ef021 Add job exception logs to dossier and champ 2021-02-04 19:27:27 +01:00
kara Diaby
f280820201 Add unique index to Experts Procedures on expert <> procedure ids 2021-01-22 14:31:02 +01:00