Koha-clms/C4
Jonathan Druart 5ce968e0e5 Bug 24151: Copy info to the pseudonymized table when a transaction is done
This is the commit where you will find useful information about this development.

The goal of this new feature is to add a way to pseudonymize patron's
data, in a way they could not be personally identifiable.
https://en.wikipedia.org/wiki/Pseudonymization

There are different existing way to anonymize patron's information in
Koha, but we loose the ability to make useful report.
This development proposes to have 2 different tables:
  * 1 for transactions and patrons data (pseudonymized_transactions)
  * 1 for patrons' attributes (pseudonymized_borrower_attributes)
Entries to pseudonymized_transactions are added when a new transaction
(checkout, checkin, renew, on-site checkout) is done.
Also, anonymized_borrower_attributes is populated if patron's attributes are
marked as "keep for pseudonymization".

To make those informations not identifiable to a patron, we are having a
hashed_borrowernumber column in pseudonymized_transactions. This hash will be
generated (Blowfish-based crypt) using a key stored in the Koha
configuration.

To make things configurable, we are adding 3 sysprefs and 1 new DB
column:
  * syspref Pseudonymization to turn on/off the whole feature
  * syspref PseudonymizationPatronFields to list the informations of the
  patrons to sync
  * syspref PseudonymizationTransactionFields to list the informations
  of the transactions to copy
  * DB column borrower_attribute_types.keep_for_pseudonymization that is a
  boolean to enable/disable the copy of a given patron's attribute type.

Test plan:
1/ Turn on Pseudonymization
2/ Define in PseudonymizationPatronFields and
PseudonymizationTransactionFields the different fields you want to copy
3/ Go to the about page
=> You will see a warning about a missing config entry
4/ You need to generate a key and put it in the koha-conf.xml file. The
following command will generate one:
  % htpasswd -bnBC 10 "" password | tr -d ':\n' | sed 's/$2y/$2a/'
Then edit $KOHA_CONF and add it before of the end of the config section (</config)
  it should be something like:
    <key>$2a$10$PfdrEBdRcL2MZlEtKueyLegxI6zg735jD07GRnc1bt.N/ZYMvBAB2</key>
5/ Restart memcached then plack (alias restart_all)
=> Everything is setup!
6/ Create a new transaction (checkin for instance)
=> Confirm that a new entry has been added to pseudonymized_transaction with the data
you expect to be copied
7/ Edit some patron attribute types and tick "Keep for pseudonymization"
8/ Create a new transaction
=> Confirm that new entries have been added to pseudonymized_borrower_attributes
11/ Delete the patrons
=> Confirm that the entries still exist in the pseudonymized_* tables
12/ Purge the patrons (ie. use cleanup_database.pl to remove them from
the deleted_borrowers table)
=> Confirm that the entries still exist in the pseudonymized_* tables

See bug 24152 to remove data from the anonymized_* tables

Sponsored-by: Association KohaLa - https://koha-fr.org/

Signed-off-by: Signed-off-by: Sonia Bouis <sonia.bouis@univ-lyon3.fr>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
2020-07-20 15:17:42 +02:00
..
AuthoritiesMarc
…
Barcodes Bug 21395: Fix C4/Barcodes/ValueBuilder.pm 2020-06-29 15:43:41 +02:00
ClassSortRoutine
…
ClassSplitRoutine Bug 21395: Make perlcritic happy 2020-06-29 12:37:02 +02:00
Creators Bug 21395: Make perlcritic happy 2020-06-29 12:37:02 +02:00
External
…
Form
…
Heading Bug 24269: Adjust C4::Heading to generate headings from auth tags 2020-02-19 13:33:32 +00:00
ILSDI Bug 24769: (bug 14711 follow-up) Fix typo in parameter name for AddReserve 2020-05-05 11:03:33 +01:00
Installer Bug 24545: Fix license statements 2020-02-24 13:31:26 +00:00
Labels Bug 21395: Make perlcritic happy 2020-06-29 12:37:02 +02:00
Linker Bug 25189: Don't create authority if results found 2020-06-24 14:31:37 +02:00
Members Bug 21395: Make perlcritic happy 2020-06-29 12:37:02 +02:00
OAI Bug 23084: Replace grep {^$var$} with grep {$_ eq $var} 2020-02-17 10:44:45 +00:00
Output
…
Patroncards Bug 21395: Make perlcritic happy 2020-06-29 12:37:02 +02:00
Reports Bug 22001: execute reports in an eval 2020-03-31 17:48:14 +01:00
SIP Bug 25992: Make SIP2 logger subroutines exportable to prevent crash 2020-07-16 15:26:47 +01:00
Search
…
Serials
…
Utils Bug 15400: Display date of birth and age more consistantly 2020-06-29 12:37:02 +02:00
Accounts.pm Bug 21395: Make perlcritic happy 2020-06-29 12:37:02 +02:00
Acquisition.pm Bug 25750: fix fallback to ecost_tax_included/ecost_tax_excluded 2020-07-09 11:50:42 +02:00
Auth.pm Bug 23794: Convert OpacMainUserBlock system preference to news block 2020-05-01 08:17:23 +01:00
Auth_cas_servers.yaml.sample
…
Auth_with_cas.pm Bug 21395: Make perlcritic happy 2020-06-29 12:37:02 +02:00
Auth_with_ldap.pm Bug 20443: Use search_with_library_limits for attribute types 2020-03-23 13:49:22 +00:00
Auth_with_shibboleth.pm
…
AuthoritiesMarc.pm Bug 21395: Make perlcritic happy 2020-06-29 12:37:02 +02:00
BackgroundJob.pm
…
Barcodes.pm
…
Biblio.pm Bug 21395: Make perlcritic happy 2020-06-29 12:37:02 +02:00
Boolean.pm
…
Breeding.pm Bug 24052: Rename XSLT_Handler 2020-03-24 10:42:23 +00:00
Budgets.pm Bug 24361: (bug 24217 follow-up) Fix several warnings in C4 modules 2020-01-07 13:59:51 +00:00
Calendar.pm Bug 19475: Don't copy holiday if it already exists in target calendar 2020-04-03 14:26:33 +01:00
Charset.pm
…
Circulation.pm Bug 25566: Add option to ignore found holds and use it when checking high holds 2020-07-16 15:32:18 +01:00
ClassSortRoutine.pm Bug 21395: Make perlcritic happy 2020-06-29 12:37:02 +02:00
ClassSource.pm
…
ClassSplitRoutine.pm
…
Context.pm Bug 21395: Make perlcritic happy 2020-06-29 12:37:02 +02:00
Contract.pm
…
CourseReserves.pm Bug 21395: Make perlcritic happy 2020-06-29 12:37:02 +02:00
Creators.pm Bug 21395: Make perlcritic happy 2020-06-29 12:37:02 +02:00
Debug.pm
…
HTML5Media.pm Bug 20783: Use iframe to embed Youtube videos 2020-06-15 10:32:43 +02:00
Heading.pm Bug 24269: Adjust C4::Heading to generate headings from auth tags 2020-02-19 13:33:32 +00:00
HoldsQueue.pm Bug 25786: Holds Queue building may target the wrong item for item level requests that match holds queue priority 2020-06-18 18:51:58 +02:00
Images.pm
…
ImportBatch.pm Bug 21395: Make perlcritic happy 2020-06-29 12:37:02 +02:00
ImportExportFramework.pm
…
InstallAuth.pm Bug 21395: (QA follow-up) POD fixes 2020-06-29 12:37:02 +02:00
Installer.pm Bug 24883: Add POD entry and remove unused variable 2020-03-27 12:11:32 +00:00
ItemCirculationAlertPreference.pm
…
Items.pm Bug 25964: Prevent data loss when editing items from a MARC record 2020-07-13 11:41:45 -03:00
Koha.pm Bug 17845: Remove unused code related to printers 2020-03-10 15:18:27 +00:00
Labels.pm Bug 21395: Make perlcritic happy 2020-06-29 12:37:02 +02:00
Languages.pm Bug 21395: Make perlcritic happy 2020-06-29 12:37:02 +02:00
Letters.pm Bug 21395: Make perlcritic happy 2020-06-29 12:37:02 +02:00
Linker.pm
…
Log.pm Bug 21190: Add interfaces parameter to POD in C4::Logs 2020-04-14 16:13:38 +01:00
MarcModificationTemplates.pm Bug 24840: Replace DateTime->now with dt_from_string 2020-04-08 11:54:23 +01:00
Matcher.pm Bug 21395: Make perlcritic happy 2020-06-29 12:37:02 +02:00
Members.pm Bug 20443: Remove SearchIdMatchingAttribute 2020-03-23 13:49:21 +00:00
Message.pm
…
NewsChannels.pm
…
Output.pm Bug 11994: OpenSearch plugins needs to be delivered with Content-Type application/opensearchdescription+xml 2020-06-24 14:31:37 +02:00
Overdues.pm Bug 25127: Use Koha::Number::Price->round for comparison 2020-05-01 15:44:55 +01:00
Patroncards.pm Bug 21395: Make perlcritic happy 2020-06-29 12:37:02 +02:00
Record.pm Bug 21395: Make perlcritic happy 2020-06-29 12:37:02 +02:00
Reports.pm
…
Reserves.pm Bug 25566: Add option to ignore found holds and use it when checking high holds 2020-07-16 15:32:18 +01:00
Ris.pm Bug 21395: Make perlcritic happy 2020-06-29 12:37:02 +02:00
RotatingCollections.pm Bug 24299: Record 'RotatingCollection' as a transfer trigger 2020-03-20 15:54:55 +00:00
SMS.pm
…
Scheduler.pm
…
Scrubber.pm
…
Search.pm Bug 21395: Make perlcritic happy 2020-06-29 12:37:02 +02:00
Serials.pm Bug 21395: Make perlcritic happy 2020-06-29 12:37:02 +02:00
Service.pm
…
ShelfBrowser.pm
…
SocialData.pm
…
Stats.pm Bug 24151: Copy info to the pseudonymized table when a transaction is done 2020-07-20 15:17:42 +02:00
Suggestions.pm Bug 22784: Add the ability to archive/unarchive a purchase suggestions 2020-04-14 16:19:02 +01:00
TTParser.pm Bug 25305: Translation process - Open all files specifying the utf8 encoding 2020-05-04 08:50:07 +01:00
Tags.pm Bug 23084: Replace grep {^$var$} with grep {$_ eq $var} 2020-02-17 10:44:45 +00:00
Templates.pm Bug 21395: Make perlcritic happy 2020-06-29 12:37:02 +02:00
TmplToken.pm
…
TmplTokenType.pm
…
UsageStats.pm Bug 24159: Move useDaysMode pref to circulation rules 2020-06-25 10:51:59 +02:00
XISBN.pm
…
XSLT.pm Bug 24052: Rename XSLT_Handler 2020-03-24 10:42:23 +00:00