From 043ea868b5e0964cf452c2bbc0f5b6b27580557b Mon Sep 17 00:00:00 2001 From: kempersc Date: Thu, 15 Jan 2026 12:25:27 +0100 Subject: [PATCH] fix(schema): Resolve broken imports after slot migration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fix empty import list elements (- # comment pattern) in Laptop, Expenses, FunctionType, Overview, WebLink, Photography classes - Replace valid_from/valid_to slots with temporal_extent in class slots lists - Update slot_usage to use temporal_extent with TimeSpan range - Update examples to use temporal_extent with begin_of_the_begin/end_of_the_end - Fix typo is_or_was_is_or_was_archived_at → is_or_was_archived_at in WebObservation - Add TimeSpan imports to classes using temporal_extent - Fix relative import paths for Timestamp in temporal slots - Fix CustodianIdentifier → Identifier imports in FundingAgenda, ReadingRoomAnnex Schema validates successfully with 902 classes and 2043 slots. --- ...S-VAN-UFFORD-0e6ccb66_20260115_114918.json | 106 ++++ ...ANDER-BURGER-0b5ec02d_20260115_114918.json | 142 ++++++ ...LA-DELLEBEKE-1c53d367_20260115_114918.json | 104 ++++ ...X_ANITA-BLOM-78cc3a46_20260115_114918.json | 104 ++++ ...ANNA-TIEDINK-46541128_20260115_114918.json | 105 ++++ ..._XXXX_ANNA-VAN-VELZEN_20260115_114918.json | 132 +++++ ..._XXXX_ANNE-VAN-NASSAU_20260115_114918.json | 104 ++++ ...OLD-OPPELAAR-1de85a2e_20260115_114918.json | 221 +++++++++ ...0702-VAN-DER-OPPELAAR_20260115_114918.json | 130 +++++ ..._ARZU-BOZBEY-beb6f2f3_20260115_114918.json | 104 ++++ ...XX_XXXX_BRAM-DE-VRIES_20260115_114918.json | 169 +++++++ ...RIS-STOLWIJK-1dfcd103_20260115_114918.json | 105 ++++ ...XXX_DENNIS-VAN-HOLTEN_20260115_114918.json | 127 +++++ ...ICK-KORTLANG-f8687158_20260115_114918.json | 97 ++++ ...XXX_ERIK-MUL-48242ac2_20260115_114918.json | 125 +++++ ...LE-PRETORIUS-b93d153b_20260115_114918.json | 216 ++++++++ ...LE-PRETORIUS-bb8c06ad_20260115_114918.json | 128 +++++ ...TJE-TUINSTRA-79069b72_20260115_114918.json | 464 ++++++++++++++++++ ...X_FRANS-VAN-DEN-BEDEM_20260115_114918.json | 105 ++++ ...ERDA-ZEEKANT-ba3c3d58_20260115_114918.json | 106 ++++ ...ERRIT-VISSER-b10f429b_20260115_114918.json | 169 +++++++ ...TER-DE-VRIES-e6cc2d8c_20260115_114918.json | 163 ++++++ ...WIG-SLEURINK-78259049_20260115_114918.json | 104 ++++ ..._INA-DIJKMAN-a7d1c92d_20260115_114918.json | 385 +++++++++++++++ ...SOO-RADSTAKE-98fb392c_20260115_114918.json | 104 ++++ ...-VAN-LEEUWEN-37715460_20260115_114918.json | 161 ++++++ ..._JASPER-SLOB-c6928299_20260115_114918.json | 111 +++++ ...PTISTE-CLAIS-c83e8011_20260115_114918.json | 104 ++++ ..._JITSKE-HELL-cf5f8ce8_20260115_114918.json | 104 ++++ ...-VAN-HASSELT-597e7524_20260115_114918.json | 105 ++++ ...ERFFKORNMANN-92830b6e_20260115_114918.json | 104 ++++ ...UIS-VELDHUIS-560850c5_20260115_114918.json | 104 ++++ ...AN-VOSKUILEN-b675cf4d_20260115_114918.json | 105 ++++ ...ARIJN-KOOLEN-2910be1c_20260115_114918.json | 119 +++++ ...IJS-OLIEROOK-345df02f_20260115_114918.json | 105 ++++ ...INDA-SUSANTO-3050a7d4_20260115_114918.json | 104 ++++ ...RJAM-KOOIMAN-ea242de2_20260115_114918.json | 118 +++++ ..._NANCY-JOUWE-872fe168_20260115_114918.json | 127 +++++ ..._NANCY-JOUWE-872fe168_20260115_115029.json | 422 ++++++++++++++++ ...-CAPELLEVEEN-4559eaa5_20260115_114918.json | 234 +++++++++ ...ER-VERBRUGGE-3d35f627_20260115_114918.json | 104 ++++ ...QUINSY-GARIO-3a522d24_20260115_114918.json | 105 ++++ ...X_RIVKA-BAUM-d210ea12_20260115_114918.json | 104 ++++ ...XX_ROB-CAMPS-db710ad9_20260115_114918.json | 118 +++++ ...XXXX_RUTGER-VAN-KOERT_20260115_114918.json | 104 ++++ ...SIGNE-TROOST-568421e0_20260115_114918.json | 104 ++++ ...N-DE-THOUARS-88d52e11_20260115_114918.json | 106 ++++ ..._XXXX_TEIO-MEEDENDORP_20260115_114918.json | 313 ++++++++++++ ...MAS-BERGHUIS-c586002f_20260115_114918.json | 104 ++++ ...NCENT-ROBIJN-d4baeb1b_20260115_114918.json | 218 ++++++++ ...XX_XXXX_YAIR-DA-COSTA_20260115_114918.json | 104 ++++ ...NTE-SIERKSMA-ab4e4e8a_20260115_114918.json | 104 ++++ .../linkml/01_custodian_name_modular.yaml | 17 +- schemas/20251121/linkml/manifest.json | 2 +- .../modules/classes/AllocationAgency.yaml | 2 +- .../linkml/modules/classes/Collection.yaml | 9 +- .../modules/classes/ContributingAgency.yaml | 12 +- .../modules/classes/CurrentArchive.yaml | 7 +- .../modules/classes/CustodianLegalStatus.yaml | 9 +- .../modules/classes/EncompassingBody.yaml | 18 +- .../modules/classes/EnvironmentalZone.yaml | 92 ++-- .../classes/EnvironmentalZoneType.yaml | 78 +-- .../linkml/modules/classes/Expenses.yaml | 33 +- .../linkml/modules/classes/FindingAid.yaml | 42 +- .../linkml/modules/classes/FunctionType.yaml | 23 +- .../linkml/modules/classes/FundingAgenda.yaml | 2 +- .../linkml/modules/classes/Laptop.yaml | 15 +- .../classes/OrganizationalChangeEvent.yaml | 12 +- .../linkml/modules/classes/Overview.yaml | 9 +- .../linkml/modules/classes/Photography.yaml | 18 +- .../modules/classes/ProvenanceEvent.yaml | 40 +- .../modules/classes/ReadingRoomAnnex.yaml | 2 +- .../classes/RegistrationAuthority.yaml | 2 +- .../modules/classes/RegistrationInfo.yaml | 2 +- .../linkml/modules/classes/Setpoint.yaml | 190 +++++++ .../linkml/modules/classes/Standard.yaml | 2 +- .../classes/StandardsOrganization.yaml | 2 +- .../classes/StorageConditionPolicy.yaml | 72 +-- .../linkml/modules/classes/StorageUnit.yaml | 8 +- .../modules/classes/TemporaryLocation.yaml | 104 ++-- .../linkml/modules/classes/TradeRegister.yaml | 12 +- .../linkml/modules/classes/WebLink.yaml | 21 +- .../modules/classes/WebObservation.yaml | 4 +- .../modules/enums/SetpointTypeEnum.yaml | 48 ++ ..._relative_humidity_archived_20260115.yaml} | 0 ...emperature_celsius_archived_20260115.yaml} | 0 ...cation_description_archived_20260115.yaml} | 0 .../temp_location_id_archived_20260115.yaml} | 0 ...temp_location_name_archived_20260115.yaml} | 0 ...mp_location_reason_archived_20260115.yaml} | 0 .../temperature_max_archived_20260115.yaml} | 0 .../temperature_min_archived_20260115.yaml} | 0 ...temperature_target_archived_20260115.yaml} | 0 .../url_archived_20250115.yaml} | 0 .../website_archived_20250115.yaml} | 0 .../modules/slots/begin_of_the_begin.yaml | 2 +- .../modules/slots/begin_of_the_end.yaml | 2 +- .../modules/slots/end_of_the_begin.yaml | 2 +- .../linkml/modules/slots/end_of_the_end.yaml | 2 +- .../modules/slots/has_or_had_description.yaml | 2 +- .../modules/slots/has_or_had_setpoint.yaml | 59 +++ .../is_or_was_temporarily_located_at.yaml | 99 ++++ .../linkml/modules/slots/slot_fixes.yaml | 161 ++++++ scripts/merge_reviewed_profiles.py | 298 +++++++++++ 104 files changed, 8821 insertions(+), 249 deletions(-) create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ADRIENNE-QUARLES-VAN-UFFORD-0e6ccb66_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ALEXANDER-BURGER-0b5ec02d_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANGELA-DELLEBEKE-1c53d367_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANITA-BLOM-78cc3a46_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNA-TIEDINK-46541128_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNA-VAN-VELZEN_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNE-VAN-NASSAU_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARNOLD-OPPELAAR-1de85a2e_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARNOLD-TEST-20180702-VAN-DER-OPPELAAR_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARZU-BOZBEY-beb6f2f3_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BRAM-DE-VRIES_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CHRIS-STOLWIJK-1dfcd103_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DENNIS-VAN-HOLTEN_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DIEDERICK-KORTLANG-f8687158_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ERIK-MUL-48242ac2_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ESTELLE-PRETORIUS-b93d153b_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ESTELLE-PRETORIUS-bb8c06ad_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_FLOORTJE-TUINSTRA-79069b72_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_FRANS-VAN-DEN-BEDEM_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_GERDA-ZEEKANT-ba3c3d58_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_GERRIT-VISSER-b10f429b_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HARM-PETER-DE-VRIES-e6cc2d8c_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HEDWIG-SLEURINK-78259049_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_INA-DIJKMAN-a7d1c92d_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_INSOO-RADSTAKE-98fb392c_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JACQUELINE-VAN-LEEUWEN-37715460_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JASPER-SLOB-c6928299_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JEANBAPTISTE-CLAIS-c83e8011_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JITSKE-HELL-cf5f8ce8_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_LAURA-VAN-HASSELT-597e7524_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_LEONIE-BERGWERFFKORNMANN-92830b6e_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_LOUIS-VELDHUIS-560850c5_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MACHTELD-VAN-VOSKUILEN-b675cf4d_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARIJN-KOOLEN-2910be1c_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MATTHIJS-OLIEROOK-345df02f_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MELINDA-SUSANTO-3050a7d4_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MIRJAM-KOOIMAN-ea242de2_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_NANCY-JOUWE-872fe168_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_NANCY-JOUWE-872fe168_20260115_115029.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PAUL-VAN-CAPELLEVEEN-4559eaa5_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PETER-VERBRUGGE-3d35f627_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_QUINSY-GARIO-3a522d24_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_RIVKA-BAUM-d210ea12_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ROB-CAMPS-db710ad9_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_RUTGER-VAN-KOERT_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_SIGNE-TROOST-568421e0_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_SUSAN-DE-THOUARS-88d52e11_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_TEIO-MEEDENDORP_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_THOMAS-BERGHUIS-c586002f_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_VINCENT-ROBIJN-d4baeb1b_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_YAIR-DA-COSTA_20260115_114918.json create mode 100644 data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_YENTE-SIERKSMA-ab4e4e8a_20260115_114918.json create mode 100644 schemas/20251121/linkml/modules/classes/Setpoint.yaml create mode 100644 schemas/20251121/linkml/modules/enums/SetpointTypeEnum.yaml rename schemas/20251121/linkml/modules/slots/{target_relative_humidity.yaml => archive/target_relative_humidity_archived_20260115.yaml} (100%) rename schemas/20251121/linkml/modules/slots/{target_temperature_celsius.yaml => archive/target_temperature_celsius_archived_20260115.yaml} (100%) rename schemas/20251121/linkml/modules/slots/{temp_location_description.yaml => archive/temp_location_description_archived_20260115.yaml} (100%) rename schemas/20251121/linkml/modules/slots/{temp_location_id.yaml => archive/temp_location_id_archived_20260115.yaml} (100%) rename schemas/20251121/linkml/modules/slots/{temp_location_name.yaml => archive/temp_location_name_archived_20260115.yaml} (100%) rename schemas/20251121/linkml/modules/slots/{temp_location_reason.yaml => archive/temp_location_reason_archived_20260115.yaml} (100%) rename schemas/20251121/linkml/modules/slots/{temperature_max.yaml => archive/temperature_max_archived_20260115.yaml} (100%) rename schemas/20251121/linkml/modules/slots/{temperature_min.yaml => archive/temperature_min_archived_20260115.yaml} (100%) rename schemas/20251121/linkml/modules/slots/{temperature_target.yaml => archive/temperature_target_archived_20260115.yaml} (100%) rename schemas/20251121/linkml/modules/slots/{url.yaml => archive/url_archived_20250115.yaml} (100%) rename schemas/20251121/linkml/modules/slots/{website.yaml => archive/website_archived_20250115.yaml} (100%) create mode 100644 schemas/20251121/linkml/modules/slots/has_or_had_setpoint.yaml create mode 100644 schemas/20251121/linkml/modules/slots/is_or_was_temporarily_located_at.yaml create mode 100644 scripts/merge_reviewed_profiles.py diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ADRIENNE-QUARLES-VAN-UFFORD-0e6ccb66_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ADRIENNE-QUARLES-VAN-UFFORD-0e6ccb66_20260115_114918.json new file mode 100644 index 0000000000..e3e813f413 --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ADRIENNE-QUARLES-VAN-UFFORD-0e6ccb66_20260115_114918.json @@ -0,0 +1,106 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ADRIENNE-QUARLES-VAN-UFFORD-0e6ccb66", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "ADRIENNE", + "QUARLES", + "VAN", + "UFFORD" + ], + "collision_uuid": "0e6ccb66" + }, + "name": "Adrienne Quarles van Ufford", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "260797", + "username": "Adrienne Quarl…", + "username_url": "/user/260797", + "abs_id": "110.1043861", + "crm_id": "9c9b8f20-e42d-ed11-8150-86d2a7f8feb5" + }, + "contact_details": { + "email": "aquarlesvanufford@panorama-mesdag.nl", + "email_domain": "panorama-mesdag.nl" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "di 06-09-2022 - 15:02", + "last_access": "3 jaar 3 maanden ago", + "operations": [ + { + "text": "Bewerken", + "url": "/user/260797/edit?destination=/admin/people%3Fpage%3D2741" + }, + { + "text": "Rollen", + "url": "/user/260797/roles?destination=/admin/people%3Fpage%3D2741" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 1, + "match_candidates": [ + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ADRIENNE-UFFORD", + "linkedin_name": "Adrienne Quarles van Ufford", + "linkedin_slug": "adrienne-quarles-van-ufford-2b472696", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:25.191204+00:00", + "annotation_script": "annotate_match_candidates.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_users.py", + "extraction_date": "2026-01-11T17:49:23.287545+00:00", + "source_file": "users/user_260797.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_260797.json", + "original_user_id": "260797", + "migrated_at": "2026-01-11T17:49:23.287562+00:00", + "migration_script": "migrate_wcms_users.py", + "migration_version": "1.0" + } +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ALEXANDER-BURGER-0b5ec02d_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ALEXANDER-BURGER-0b5ec02d_20260115_114918.json new file mode 100644 index 0000000000..04932878fa --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ALEXANDER-BURGER-0b5ec02d_20260115_114918.json @@ -0,0 +1,142 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ALEXANDER-BURGER-0b5ec02d", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "ALEXANDER", + "BURGER" + ], + "collision_uuid": "0b5ec02d" + }, + "name": "Alexander Burger", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "266212", + "username": "AlexanderBurger", + "username_url": "/user/266212", + "abs_id": "110.1050277", + "crm_id": "f51e056b-0c86-ed11-8153-89b6996108b3" + }, + "contact_details": { + "email": "burger.alexander1999@gmail.com", + "email_domain": "gmail.com" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "di 27-12-2022 - 18:32", + "last_access": "3 jaar ago", + "operations": [ + { + "text": "Bewerken", + "url": "/user/266212/edit?destination=/admin/people%3Fpage%3D2634" + }, + { + "text": "Rollen", + "url": "/user/266212/roles?destination=/admin/people%3Fpage%3D2634" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 3, + "wikipedia_url": null, + "match_candidates": [ + { + "linkedin_ppid": "ID_NL-OV-NED_199X_NL-FR-LEE_XXXX_ALEXANDER-BURGER", + "linkedin_name": { + "full_name": "Alexander Burger", + "display_name": "Alexander Burger", + "name_romanized": null, + "name_tokens": [ + "ALEXANDER", + "BURGER" + ], + "source": "linkedin_profile" + }, + "linkedin_slug": "burgeralexander", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + }, + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ALEXANDER-BURGER", + "linkedin_name": "Alexander Burger", + "linkedin_slug": "burgeralexander", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + }, + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AUDREY-BURGER", + "linkedin_name": "Audrey Burger", + "linkedin_slug": "audreyburger", + "confidence_score": 0.51, + "match_signals": [ + "strong_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:26.916578+00:00", + "annotation_script": "annotate_match_candidates.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_resume.py", + "extraction_date": "2026-01-11T20:44:55.052588+00:00", + "source_file": "users/user_266212.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_266212.json", + "original_user_id": "266212", + "migrated_at": "2026-01-11T20:44:55.052612+00:00", + "migration_script": "migrate_wcms_resume.py", + "migration_version": "2.0" + } +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANGELA-DELLEBEKE-1c53d367_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANGELA-DELLEBEKE-1c53d367_20260115_114918.json new file mode 100644 index 0000000000..b0ff4fc113 --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANGELA-DELLEBEKE-1c53d367_20260115_114918.json @@ -0,0 +1,104 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANGELA-DELLEBEKE-1c53d367", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "ANGELA", + "DELLEBEKE" + ], + "collision_uuid": "1c53d367" + }, + "name": "angela dellebeke", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "244491", + "username": "angela dellebeke", + "username_url": "/user/244491", + "abs_id": "110.1024712", + "crm_id": "c6e5fccb-2320-ec11-8144-9cfa3c64c165" + }, + "contact_details": { + "email": "angela.dellebeke@nationaalarchief.nl", + "email_domain": "nationaalarchief.nl" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "di 28-09-2021 - 08:17", + "last_access": "9 maanden 2 weken ago", + "operations": [ + { + "text": "Bewerken", + "url": "/user/244491/edit?destination=/admin/people%3Fpage%3D3058" + }, + { + "text": "Rollen", + "url": "/user/244491/roles?destination=/admin/people%3Fpage%3D3058" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 1, + "match_candidates": [ + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANGELA-DELLEBEKE", + "linkedin_name": "angela dellebeke", + "linkedin_slug": "angela-dellebeke-87289018", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:26.042034+00:00", + "annotation_script": "annotate_match_candidates.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_users.py", + "extraction_date": "2026-01-11T17:41:20.390645+00:00", + "source_file": "users/user_244491.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_244491.json", + "original_user_id": "244491", + "migrated_at": "2026-01-11T17:41:20.390656+00:00", + "migration_script": "migrate_wcms_users.py", + "migration_version": "1.0" + } +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANITA-BLOM-78cc3a46_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANITA-BLOM-78cc3a46_20260115_114918.json new file mode 100644 index 0000000000..4966efcbd6 --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANITA-BLOM-78cc3a46_20260115_114918.json @@ -0,0 +1,104 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANITA-BLOM-78cc3a46", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "ANITA", + "BLOM" + ], + "collision_uuid": "78cc3a46" + }, + "name": "Anita Blom", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "160302", + "username": "anitablom", + "username_url": "/user/160302", + "abs_id": "110.302038", + "crm_id": "65C510F9-A67A-E211-B615-005056930016" + }, + "contact_details": { + "email": "a.blom@cultureelerfgoed.nl", + "email_domain": "cultureelerfgoed.nl" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "di 19-02-2013 - 16:13", + "last_access": "12 jaar 10 maanden ago", + "operations": [ + { + "text": "Bewerken", + "url": "/en/user/160302/edit?destination=/admin/people%3Fpage%3D4462" + }, + { + "text": "Rollen", + "url": "/user/160302/roles?destination=/admin/people%3Fpage%3D4462" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 1, + "match_candidates": [ + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANITA-BLOM", + "linkedin_name": "Anita Blom", + "linkedin_slug": "anita-blom-5b357919", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:25.231499+00:00", + "annotation_script": "annotate_match_candidates.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_users.py", + "extraction_date": "2026-01-11T17:07:34.662724+00:00", + "source_file": "users/user_160302.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_160302.json", + "original_user_id": "160302", + "migrated_at": "2026-01-11T17:07:34.662728+00:00", + "migration_script": "migrate_wcms_users.py", + "migration_version": "1.0" + } +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNA-TIEDINK-46541128_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNA-TIEDINK-46541128_20260115_114918.json new file mode 100644 index 0000000000..5d07dfb480 --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNA-TIEDINK-46541128_20260115_114918.json @@ -0,0 +1,105 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNA-TIEDINK-46541128", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "ANNA", + "TIEDINK" + ], + "collision_uuid": "46541128" + }, + "name": "anna tiedink", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "284991", + "username": "annatiedink@gm…", + "username_url": "/user/284991", + "abs_id": "110.1070468", + "crm_id": "cb4e946f-4867-ee11-816b-d7add8f6d140" + }, + "contact_details": { + "email": "annatiedink@gmail.com", + "email_domain": "gmail.com" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "di 10-10-2023 - 10:38", + "last_access": "2 jaar 2 maanden ago", + "operations": [ + { + "text": "Bewerken", + "url": "/user/284991/edit?destination=/admin/people%3Fpage%3D2265" + }, + { + "text": "Rollen", + "url": "/user/284991/roles?destination=/admin/people%3Fpage%3D2265" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 1, + "wikipedia_url": null, + "match_candidates": [ + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNA-TIEDINK", + "linkedin_name": "Anna Tiedink", + "linkedin_slug": "annatiedink", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:25.057416+00:00", + "annotation_script": "annotate_match_candidates.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_resume.py", + "extraction_date": "2026-01-11T21:23:11.469994+00:00", + "source_file": "users/user_284991.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_284991.json", + "original_user_id": "284991", + "migrated_at": "2026-01-11T21:23:11.469999+00:00", + "migration_script": "migrate_wcms_resume.py", + "migration_version": "2.0" + } +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNA-VAN-VELZEN_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNA-VAN-VELZEN_20260115_114918.json new file mode 100644 index 0000000000..b2d48ba0f9 --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNA-VAN-VELZEN_20260115_114918.json @@ -0,0 +1,132 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNA-VAN-VELZEN", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "ANNA", + "VAN", + "VELZEN" + ] + }, + "name": "Anna van Velzen", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "246670", + "username": "Annavv", + "username_url": "/user/246670", + "abs_id": "110.1027237", + "crm_id": "913bb796-5041-ec11-8145-d317fc4f8963" + }, + "contact_details": { + "email": "anna2000.avv@gmail.com", + "email_domain": "gmail.com" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "di 09-11-2021 - 12:31", + "last_access": "4 jaar 1 maand ago", + "operations": [ + { + "text": "Bewerken", + "url": "/user/246670/edit?destination=/admin/people%3Fpage%3D3017" + }, + { + "text": "Rollen", + "url": "/user/246670/roles?destination=/admin/people%3Fpage%3D3017" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 3, + "match_candidates": [ + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNA-VELZEN", + "linkedin_name": "Anna van Velzen", + "linkedin_slug": "anna-van-velzen", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + }, + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ALEXANDER-VELZEN", + "linkedin_name": "Alexander van Velzen", + "linkedin_slug": "alexandervanvelzen", + "confidence_score": 0.51, + "match_signals": [ + "strong_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + }, + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARNOLD-VAN-VELZEN", + "linkedin_name": "Arnold Van Velzen", + "linkedin_slug": "arnold-van-velzen-40435ab", + "confidence_score": 0.51, + "match_signals": [ + "strong_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:25.017328+00:00", + "annotation_script": "annotate_match_candidates.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_users.py", + "extraction_date": "2026-01-11T17:42:24.018398+00:00", + "source_file": "users/user_246670.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_246670.json", + "original_user_id": "246670", + "migrated_at": "2026-01-11T17:42:24.018406+00:00", + "migration_script": "migrate_wcms_users.py", + "migration_version": "1.0" + } +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNE-VAN-NASSAU_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNE-VAN-NASSAU_20260115_114918.json new file mode 100644 index 0000000000..67289ed4ae --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNE-VAN-NASSAU_20260115_114918.json @@ -0,0 +1,104 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ANNE-VAN-NASSAU", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "ANNE", + "VAN", + "NASSAU" + ] + }, + "name": "Anne van Nassau", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "164312", + "username": "acvannassau", + "username_url": "/user/164312", + "abs_id": "110.308397", + "crm_id": "B9B84B00-835A-E311-983B-005056930016" + }, + "contact_details": { + "email": "a.c.vannassau@students.uu.nl", + "email_domain": "students.uu.nl" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "zo 01-12-2013 - 13:20", + "last_access": "11 jaar 10 maanden ago", + "operations": [ + { + "text": "Bewerken", + "url": "/user/164312/edit?destination=/admin/people%3Fpage%3D4382" + }, + { + "text": "Rollen", + "url": "/user/164312/roles?destination=/admin/people%3Fpage%3D4382" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 1, + "match_candidates": [ + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_AGNES-NASSAU", + "linkedin_name": "Agnes van Nassau", + "linkedin_slug": "agnes-van-nassau-705a76372", + "confidence_score": 0.51, + "match_signals": [ + "strong_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:24.726924+00:00", + "annotation_script": "annotate_match_candidates.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_users.py", + "extraction_date": "2026-01-11T17:09:55.200959+00:00", + "source_file": "users/user_164312.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_164312.json", + "original_user_id": "164312", + "migrated_at": "2026-01-11T17:09:55.200961+00:00", + "migration_script": "migrate_wcms_users.py", + "migration_version": "1.0" + } +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARNOLD-OPPELAAR-1de85a2e_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARNOLD-OPPELAAR-1de85a2e_20260115_114918.json new file mode 100644 index 0000000000..2c0c25970f --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARNOLD-OPPELAAR-1de85a2e_20260115_114918.json @@ -0,0 +1,221 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARNOLD-OPPELAAR-1de85a2e", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "ARNOLD", + "OPPELAAR" + ], + "collision_uuid": "1de85a2e" + }, + "name": "Arnold Oppelaar", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "152928", + "username": "zzz-Arnold Oppelaar", + "username_url": "/user/152928", + "abs_id": "110.952030", + "crm_id": "b16c16e0-ab28-43ba-8f54-a8c6f01f3b60" + }, + "contact_details": { + "email": "zzz-arnold.oppelaar@nationaalarchief.nl", + "email_domain": "nationaalarchief.nl" + }, + "wcms_activity": { + "status": "Blocked", + "roles": [ + "Redacteur" + ], + "registered_since": "wo 30-11-2011 - 12:05", + "last_access": "6 jaar 8 maanden ago", + "operations": [] + }, + "entity_resolution": { + "potential_linkedin_matches": 2, + "match_candidates": [ + { + "linkedin_ppid": "ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_ARNOLD-OPPELAAR", + "linkedin_name": "Arnold Oppelaar", + "linkedin_slug": "arnold-oppelaar-b2139a23", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": true, + "review_decision": "match", + "reviewed_by": "reviewer", + "reviewed_at": "2026-01-13T11:25:21.007465+00:00" + }, + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARNOLD-OPPELAAR", + "linkedin_name": { + "full_name": "Arnold Oppelaar", + "display_name": "Arnold Oppelaar", + "name_romanized": null, + "name_tokens": [ + "ARNOLD", + "OPPELAAR" + ], + "source": "linkedin_profile" + }, + "linkedin_slug": "arnold-oppelaar-b2139a23", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:25.029603+00:00", + "annotation_script": "annotate_match_candidates.py", + "resolved": true, + "resolved_linkedin_ppid": "ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_ARNOLD-OPPELAAR", + "resolved_linkedin_slug": "arnold-oppelaar-b2139a23", + "resolution_confidence": 0.65, + "resolution_signals": [ + "email_name_parts", + "exact_name_match", + "email_institution", + "email_institutional" + ], + "resolution_decision": "match", + "resolved_by": "reviewer", + "resolved_at": "2026-01-13T11:25:21.007465+00:00", + "merge_timestamp": "2026-01-15T10:49:18.585703+00:00", + "merge_script": "merge_reviewed_profiles.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms", + "linkedin" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_users.py", + "extraction_date": "2026-01-11T17:07:19.788441+00:00", + "source_file": "users/user_152928.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_152928.json", + "original_user_id": "152928", + "migrated_at": "2026-01-11T17:07:19.788455+00:00", + "migration_script": "migrate_wcms_users.py", + "migration_version": "1.0" + }, + "profile_data": { + "headline": "Medewerker Dienstverlening / Webteam Nationaal Archief", + "location": "The Hague, South Holland, Netherlands (NL)", + "about": "Total Experience: 26 years", + "education": [ + { + "degree": "Master of Arts (MA), Medieval history", + "institution": "Universiteit van Amsterdam / University of Amsterdam", + "date_range": "1992 - 1999 • 7 years" + } + ], + "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2", + "linkedin_url": "https://www.linkedin.com/in/arnold-oppelaar-b2139a23" + }, + "affiliations": [ + { + "custodian_name": "Nationaal Archief", + "custodian_slug": "nationaal-archief", + "role_title": "Medewerker Dienstverlening / Webteam Nationaal Archief", + "affiliation_provenance": { + "source": "LinkedIn company people page", + "source_url": "https://www.linkedin.com/in/arnold-oppelaar-b2139a23", + "retrieved_on": "2025-12-10T15:04:12.140000+00:00", + "retrieval_agent": "extract_persons_with_provenance.py" + } + } + ], + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "A" + ], + "rationale": "Identified as staff at Nationaal Archief" + }, + "web_claims": [ + { + "claim_type": "linkedin_url", + "claim_value": "https://www.linkedin.com/in/arnold-oppelaar-b2139a23", + "source_url": "https://www.linkedin.com/company/nationaal-archief/people/", + "retrieved_on": "2025-12-10T15:04:12.140000+00:00", + "statement_created_at": "2026-01-09T22:46:01.393764+00:00", + "source_archived_at": "2025-12-10T15:04:12.140000+00:00", + "xpath": "/html[1]/head[1]/meta[1]/meta[2]/meta[3]/meta[4]/meta[5]/meta[6]/meta[7]/meta[8]/meta[9]/meta[10]/meta[11]/meta[12]/meta[13]/meta[14]/link[1]/link[2]/link[3]/link[4]/link[5]/link[6]/link[7]/meta[15]/meta[16]/meta[17]/meta[18]/meta[19]/meta[20]/meta[21]/meta[22]/meta[23]/meta[24]/meta[25]/meta[26]/link[8]/link[9]/link[10]/link[11]/link[12]/meta[27]/meta[28]/meta[29]/meta[30]/meta[31]/meta[32]/meta[33]/meta[34]/meta[35]/meta[36]/meta[37]/meta[38]/meta[39]/meta[40]/meta[41]/meta[42]/meta[43]/meta[44]/meta[45]/meta[46]/meta[47]/meta[48]/meta[49]/meta[50]/meta[51]/meta[52]/meta[53]/meta[54]/meta[55]/meta[56]/meta[57]/meta[58]/meta[59]/meta[60]/meta[61]/meta[62]/meta[63]/meta[64]/meta[65]/meta[66]/meta[67]/meta[68]/meta[69]/meta[70]/meta[71]/meta[72]/meta[73]/meta[74]/meta[75]/meta[76]/meta[77]/meta[78]/meta[79]/meta[80]/meta[81]/meta[82]/meta[83]/meta[84]/meta[85]/meta[86]/meta[87]/meta[88]/meta[89]/meta[90]/meta[91]/meta[92]/meta[93]/meta[94]/meta[95]/meta[96]/meta[97]/meta[98]/meta[99]/meta[100]/meta[101]/meta[102]/meta[103]/meta[104]/meta[105]/meta[106]/meta[107]/meta[108]/meta[109]/meta[110]/meta[111]/meta[112]/meta[113]/meta[114]/meta[115]/meta[116]/meta[117]/meta[118]/meta[119]/meta[120]/meta[121]/meta[122]/meta[123]/meta[124]/meta[125]/meta[126]/meta[127]/meta[128]/meta[129]/meta[130]/meta[131]/meta[132]/meta[133]/meta[134]/meta[135]/meta[136]/meta[137]/meta[138]/meta[139]/meta[140]/meta[141]/link[13]/link[14]/meta[142]/meta[143]/link[15]/link[16]/link[17]/link[18]/link[19]/link[20]/link[21]/link[22]/link[23]/link[24]/link[25]/link[26]/link[27]/link[28]/link[29]/link[30]/link[31]/link[32]/link[33]/link[34]/link[35]/link[36]/link[37]/link[38]/link[39]/link[40]/link[41]/link[42]/link[43]/link[44]/body[1]/img[1]/img[2]/img[3]/img[4]/img[5]/img[6]/img[7]/img[8]/img[9]/img[10]/img[11]/img[12]/img[13]/img[14]/img[15]/img[16]/img[17]/img[18]/img[19]/div[28]/header[2]/div[32]/div[62]/div[63]/div[65]/div[66]/div[67]/div[87]/main[1]/div[88]/section[2]/div[124]/div[125]/div[126]/div[174]/div[175]/div[176]/ul[6]/li[33]/div[177]/li[34]/div[189]/li[35]/div[201]/li[36]/div[213]/li[37]/div[225]/li[38]/div[237]/li[39]/div[249]/li[40]/div[261]/li[41]/div[273]/li[42]/div[285]/li[43]/div[297]/li[44]/div[309]/li[45]/div[321]/li[46]/div[333]/li[47]/div[345]/li[48]/div[357]/li[49]/div[369]/li[50]/div[381]/li[51]/div[393]/li[52]/div[405]/li[53]/div[417]/li[54]/div[429]/li[55]/div[441]/li[56]/div[453]/li[57]/div[465]/li[58]/div[477]/li[59]/div[489]/li[60]/div[501]/li[61]/div[513]/li[62]/div[525]/li[63]/div[537]/li[64]/div[549]/li[65]/div[561]/li[66]/div[573]/li[67]/div[585]/li[68]/div[597]/li[69]/div[609]/li[70]/div[621]/li[71]/div[633]/li[72]/div[645]/li[73]/div[657]/li[74]/div[669]/li[75]/div[681]/li[76]/div[693]/li[77]/div[705]/li[78]/div[717]/li[79]/div[729]/li[80]/div[741]/li[81]/div[753]/li[82]/div[765]/li[83]/div[777]/li[84]/div[789]/li[85]/div[801]/li[86]/div[813]/li[87]/div[825]/li[88]/div[837]/li[89]/div[849]/section[60]/img[136]/div[850]/div[851]/div[852]/a[136]", + "html_file": "/Volumes/KINGSTON/data/glam/data/custodian/person/affiliated/manual/(8) Nationaal Archief_ People _ LinkedIn.html", + "xpath_match_score": 1.0, + "retrieval_agent": "extract_persons_with_provenance.py" + }, + { + "claim_type": "full_name", + "claim_value": "Arnold Oppelaar", + "source_url": "https://www.linkedin.com/company/nationaal-archief/people/", + "retrieved_on": "2025-12-10T15:04:12.140000+00:00", + "statement_created_at": "2026-01-09T22:46:01.393790+00:00", + "source_archived_at": "2025-12-10T15:04:12.140000+00:00", + "xpath": "/html[1]/head[1]/meta[1]/meta[2]/meta[3]/meta[4]/meta[5]/meta[6]/meta[7]/meta[8]/meta[9]/meta[10]/meta[11]/meta[12]/meta[13]/meta[14]/link[1]/link[2]/link[3]/link[4]/link[5]/link[6]/link[7]/meta[15]/meta[16]/meta[17]/meta[18]/meta[19]/meta[20]/meta[21]/meta[22]/meta[23]/meta[24]/meta[25]/meta[26]/link[8]/link[9]/link[10]/link[11]/link[12]/meta[27]/meta[28]/meta[29]/meta[30]/meta[31]/meta[32]/meta[33]/meta[34]/meta[35]/meta[36]/meta[37]/meta[38]/meta[39]/meta[40]/meta[41]/meta[42]/meta[43]/meta[44]/meta[45]/meta[46]/meta[47]/meta[48]/meta[49]/meta[50]/meta[51]/meta[52]/meta[53]/meta[54]/meta[55]/meta[56]/meta[57]/meta[58]/meta[59]/meta[60]/meta[61]/meta[62]/meta[63]/meta[64]/meta[65]/meta[66]/meta[67]/meta[68]/meta[69]/meta[70]/meta[71]/meta[72]/meta[73]/meta[74]/meta[75]/meta[76]/meta[77]/meta[78]/meta[79]/meta[80]/meta[81]/meta[82]/meta[83]/meta[84]/meta[85]/meta[86]/meta[87]/meta[88]/meta[89]/meta[90]/meta[91]/meta[92]/meta[93]/meta[94]/meta[95]/meta[96]/meta[97]/meta[98]/meta[99]/meta[100]/meta[101]/meta[102]/meta[103]/meta[104]/meta[105]/meta[106]/meta[107]/meta[108]/meta[109]/meta[110]/meta[111]/meta[112]/meta[113]/meta[114]/meta[115]/meta[116]/meta[117]/meta[118]/meta[119]/meta[120]/meta[121]/meta[122]/meta[123]/meta[124]/meta[125]/meta[126]/meta[127]/meta[128]/meta[129]/meta[130]/meta[131]/meta[132]/meta[133]/meta[134]/meta[135]/meta[136]/meta[137]/meta[138]/meta[139]/meta[140]/meta[141]/link[13]/link[14]/meta[142]/meta[143]/link[15]/link[16]/link[17]/link[18]/link[19]/link[20]/link[21]/link[22]/link[23]/link[24]/link[25]/link[26]/link[27]/link[28]/link[29]/link[30]/link[31]/link[32]/link[33]/link[34]/link[35]/link[36]/link[37]/link[38]/link[39]/link[40]/link[41]/link[42]/link[43]/link[44]/body[1]/img[1]/img[2]/img[3]/img[4]/img[5]/img[6]/img[7]/img[8]/img[9]/img[10]/img[11]/img[12]/img[13]/img[14]/img[15]/img[16]/img[17]/img[18]/img[19]/div[28]/header[2]/div[32]/div[62]/div[63]/div[65]/div[66]/div[67]/div[87]/main[1]/div[88]/section[2]/div[124]/div[125]/div[126]/div[174]/div[175]/div[176]/ul[6]/li[33]/div[177]/li[34]/div[189]/li[35]/div[201]/li[36]/div[213]/li[37]/div[225]/li[38]/div[237]/li[39]/div[249]/li[40]/div[261]/li[41]/div[273]/li[42]/div[285]/li[43]/div[297]/li[44]/div[309]/li[45]/div[321]/li[46]/div[333]/li[47]/div[345]/li[48]/div[357]/li[49]/div[369]/li[50]/div[381]/li[51]/div[393]/li[52]/div[405]/li[53]/div[417]/li[54]/div[429]/li[55]/div[441]/li[56]/div[453]/li[57]/div[465]/li[58]/div[477]/li[59]/div[489]/li[60]/div[501]/li[61]/div[513]/li[62]/div[525]/li[63]/div[537]/li[64]/div[549]/li[65]/div[561]/li[66]/div[573]/li[67]/div[585]/li[68]/div[597]/li[69]/div[609]/li[70]/div[621]/li[71]/div[633]/li[72]/div[645]/li[73]/div[657]/li[74]/div[669]/li[75]/div[681]/li[76]/div[693]/li[77]/div[705]/li[78]/div[717]/li[79]/div[729]/li[80]/div[741]/li[81]/div[753]/li[82]/div[765]/li[83]/div[777]/li[84]/div[789]/li[85]/div[801]/li[86]/div[813]/li[87]/div[825]/li[88]/div[837]/li[89]/div[849]/section[60]/img[136]/div[850]/div[851]/div[852]/a[136]/img[137]/@alt", + "html_file": "/Volumes/KINGSTON/data/glam/data/custodian/person/affiliated/manual/(8) Nationaal Archief_ People _ LinkedIn.html", + "xpath_match_score": 1.0, + "retrieval_agent": "extract_persons_with_provenance.py" + }, + { + "claim_type": "connection_degree", + "claim_value": "2nd", + "source_url": "https://www.linkedin.com/company/nationaal-archief/people/", + "retrieved_on": "2025-12-10T15:04:12.140000+00:00", + "statement_created_at": "2026-01-09T22:46:01.393865+00:00", + "source_archived_at": "2025-12-10T15:04:12.140000+00:00", + "xpath": "/html[1]/head[1]/meta[1]/meta[2]/meta[3]/meta[4]/meta[5]/meta[6]/meta[7]/meta[8]/meta[9]/meta[10]/meta[11]/meta[12]/meta[13]/meta[14]/link[1]/link[2]/link[3]/link[4]/link[5]/link[6]/link[7]/meta[15]/meta[16]/meta[17]/meta[18]/meta[19]/meta[20]/meta[21]/meta[22]/meta[23]/meta[24]/meta[25]/meta[26]/link[8]/link[9]/link[10]/link[11]/link[12]/meta[27]/meta[28]/meta[29]/meta[30]/meta[31]/meta[32]/meta[33]/meta[34]/meta[35]/meta[36]/meta[37]/meta[38]/meta[39]/meta[40]/meta[41]/meta[42]/meta[43]/meta[44]/meta[45]/meta[46]/meta[47]/meta[48]/meta[49]/meta[50]/meta[51]/meta[52]/meta[53]/meta[54]/meta[55]/meta[56]/meta[57]/meta[58]/meta[59]/meta[60]/meta[61]/meta[62]/meta[63]/meta[64]/meta[65]/meta[66]/meta[67]/meta[68]/meta[69]/meta[70]/meta[71]/meta[72]/meta[73]/meta[74]/meta[75]/meta[76]/meta[77]/meta[78]/meta[79]/meta[80]/meta[81]/meta[82]/meta[83]/meta[84]/meta[85]/meta[86]/meta[87]/meta[88]/meta[89]/meta[90]/meta[91]/meta[92]/meta[93]/meta[94]/meta[95]/meta[96]/meta[97]/meta[98]/meta[99]/meta[100]/meta[101]/meta[102]/meta[103]/meta[104]/meta[105]/meta[106]/meta[107]/meta[108]/meta[109]/meta[110]/meta[111]/meta[112]/meta[113]/meta[114]/meta[115]/meta[116]/meta[117]/meta[118]/meta[119]/meta[120]/meta[121]/meta[122]/meta[123]/meta[124]/meta[125]/meta[126]/meta[127]/meta[128]/meta[129]/meta[130]/meta[131]/meta[132]/meta[133]/meta[134]/meta[135]/meta[136]/meta[137]/meta[138]/meta[139]/meta[140]/meta[141]/link[13]/link[14]/meta[142]/meta[143]/link[15]/link[16]/link[17]/link[18]/link[19]/link[20]/link[21]/link[22]/link[23]/link[24]/link[25]/link[26]/link[27]/link[28]/link[29]/link[30]/link[31]/link[32]/link[33]/link[34]/link[35]/link[36]/link[37]/link[38]/link[39]/link[40]/link[41]/link[42]/link[43]/link[44]/body[1]/img[1]/img[2]/img[3]/img[4]/img[5]/img[6]/img[7]/img[8]/img[9]/img[10]/img[11]/img[12]/img[13]/img[14]/img[15]/img[16]/img[17]/img[18]/img[19]/div[28]/header[2]/div[32]/div[62]/div[63]/div[65]/div[66]/div[67]/div[87]/main[1]/div[88]/section[2]/div[124]/div[125]/div[126]/div[174]/div[175]/div[176]/ul[6]/li[33]/div[177]/li[34]/div[189]/li[35]/div[201]/li[36]/div[213]/li[37]/div[225]/li[38]/div[237]/li[39]/div[249]/li[40]/div[261]/li[41]/div[273]/li[42]/div[285]/li[43]/div[297]/li[44]/div[309]/li[45]/div[321]/li[46]/div[333]/li[47]/div[345]/li[48]/div[357]/li[49]/div[369]/li[50]/div[381]/li[51]/div[393]/li[52]/div[405]/li[53]/div[417]/li[54]/div[429]/li[55]/div[441]/li[56]/div[453]/li[57]/div[465]/li[58]/div[477]/li[59]/div[489]/li[60]/div[501]/li[61]/div[513]/li[62]/div[525]/li[63]/div[537]/li[64]/div[549]/li[65]/div[561]/li[66]/div[573]/li[67]/div[585]/li[68]/div[597]/li[69]/div[609]/li[70]/div[621]/li[71]/div[633]/li[72]/div[645]/li[73]/div[657]/li[74]/div[669]/li[75]/div[681]/li[76]/div[693]/li[77]/div[705]/li[78]/div[717]/li[79]/div[729]/li[80]/div[741]/li[81]/div[753]/li[82]/div[765]/li[83]/div[777]/li[84]/div[789]/li[85]/div[801]/li[86]/div[813]/li[87]/div[825]/li[88]/div[837]/li[89]/div[849]/section[60]/img[136]/div[850]/div[851]/div[852]/div[853]/div[856]", + "html_file": "/Volumes/KINGSTON/data/glam/data/custodian/person/affiliated/manual/(8) Nationaal Archief_ People _ LinkedIn.html", + "xpath_match_score": 1.0, + "retrieval_agent": "extract_persons_with_provenance.py" + }, + { + "claim_type": "headline", + "claim_value": "Medewerker Dienstverlening / Webteam Nationaal Archief", + "source_url": "https://www.linkedin.com/company/nationaal-archief/people/", + "retrieved_on": "2025-12-10T15:04:12.140000+00:00", + "statement_created_at": "2026-01-09T22:46:01.393899+00:00", + "source_archived_at": "2025-12-10T15:04:12.140000+00:00", + "xpath": "/html[1]/head[1]/meta[1]/meta[2]/meta[3]/meta[4]/meta[5]/meta[6]/meta[7]/meta[8]/meta[9]/meta[10]/meta[11]/meta[12]/meta[13]/meta[14]/link[1]/link[2]/link[3]/link[4]/link[5]/link[6]/link[7]/meta[15]/meta[16]/meta[17]/meta[18]/meta[19]/meta[20]/meta[21]/meta[22]/meta[23]/meta[24]/meta[25]/meta[26]/link[8]/link[9]/link[10]/link[11]/link[12]/meta[27]/meta[28]/meta[29]/meta[30]/meta[31]/meta[32]/meta[33]/meta[34]/meta[35]/meta[36]/meta[37]/meta[38]/meta[39]/meta[40]/meta[41]/meta[42]/meta[43]/meta[44]/meta[45]/meta[46]/meta[47]/meta[48]/meta[49]/meta[50]/meta[51]/meta[52]/meta[53]/meta[54]/meta[55]/meta[56]/meta[57]/meta[58]/meta[59]/meta[60]/meta[61]/meta[62]/meta[63]/meta[64]/meta[65]/meta[66]/meta[67]/meta[68]/meta[69]/meta[70]/meta[71]/meta[72]/meta[73]/meta[74]/meta[75]/meta[76]/meta[77]/meta[78]/meta[79]/meta[80]/meta[81]/meta[82]/meta[83]/meta[84]/meta[85]/meta[86]/meta[87]/meta[88]/meta[89]/meta[90]/meta[91]/meta[92]/meta[93]/meta[94]/meta[95]/meta[96]/meta[97]/meta[98]/meta[99]/meta[100]/meta[101]/meta[102]/meta[103]/meta[104]/meta[105]/meta[106]/meta[107]/meta[108]/meta[109]/meta[110]/meta[111]/meta[112]/meta[113]/meta[114]/meta[115]/meta[116]/meta[117]/meta[118]/meta[119]/meta[120]/meta[121]/meta[122]/meta[123]/meta[124]/meta[125]/meta[126]/meta[127]/meta[128]/meta[129]/meta[130]/meta[131]/meta[132]/meta[133]/meta[134]/meta[135]/meta[136]/meta[137]/meta[138]/meta[139]/meta[140]/meta[141]/link[13]/link[14]/meta[142]/meta[143]/link[15]/link[16]/link[17]/link[18]/link[19]/link[20]/link[21]/link[22]/link[23]/link[24]/link[25]/link[26]/link[27]/link[28]/link[29]/link[30]/link[31]/link[32]/link[33]/link[34]/link[35]/link[36]/link[37]/link[38]/link[39]/link[40]/link[41]/link[42]/link[43]/link[44]/body[1]/img[1]/img[2]/img[3]/img[4]/img[5]/img[6]/img[7]/img[8]/img[9]/img[10]/img[11]/img[12]/img[13]/img[14]/img[15]/img[16]/img[17]/img[18]/img[19]/div[28]/header[2]/div[32]/div[62]/div[63]/div[65]/div[66]/div[67]/div[87]/main[1]/div[88]/section[2]/div[124]/div[125]/div[126]/div[174]/div[175]/div[176]/ul[6]/li[33]/div[177]/li[34]/div[189]/li[35]/div[201]/li[36]/div[213]/li[37]/div[225]/li[38]/div[237]/li[39]/div[249]/li[40]/div[261]/li[41]/div[273]/li[42]/div[285]/li[43]/div[297]/li[44]/div[309]/li[45]/div[321]/li[46]/div[333]/li[47]/div[345]/li[48]/div[357]/li[49]/div[369]/li[50]/div[381]/li[51]/div[393]/li[52]/div[405]/li[53]/div[417]/li[54]/div[429]/li[55]/div[441]/li[56]/div[453]/li[57]/div[465]/li[58]/div[477]/li[59]/div[489]/li[60]/div[501]/li[61]/div[513]/li[62]/div[525]/li[63]/div[537]/li[64]/div[549]/li[65]/div[561]/li[66]/div[573]/li[67]/div[585]/li[68]/div[597]/li[69]/div[609]/li[70]/div[621]/li[71]/div[633]/li[72]/div[645]/li[73]/div[657]/li[74]/div[669]/li[75]/div[681]/li[76]/div[693]/li[77]/div[705]/li[78]/div[717]/li[79]/div[729]/li[80]/div[741]/li[81]/div[753]/li[82]/div[765]/li[83]/div[777]/li[84]/div[789]/li[85]/div[801]/li[86]/div[813]/li[87]/div[825]/li[88]/div[837]/li[89]/div[849]/section[60]/img[136]/div[850]/div[851]/div[852]/div[853]/div[857]/div[858]/div[859]", + "html_file": "/Volumes/KINGSTON/data/glam/data/custodian/person/affiliated/manual/(8) Nationaal Archief_ People _ LinkedIn.html", + "xpath_match_score": 1.0, + "retrieval_agent": "extract_persons_with_provenance.py" + } + ], + "linkedin_slug": "arnold-oppelaar-b2139a23" +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARNOLD-TEST-20180702-VAN-DER-OPPELAAR_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARNOLD-TEST-20180702-VAN-DER-OPPELAAR_20260115_114918.json new file mode 100644 index 0000000000..9fad10f4db --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARNOLD-TEST-20180702-VAN-DER-OPPELAAR_20260115_114918.json @@ -0,0 +1,130 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARNOLD-TEST-20180702-VAN-DER-OPPELAAR", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "ARNOLD", + "TEST", + "20180702", + "VAN", + "DER", + "OPPELAAR" + ] + }, + "name": "Arnold test 20180702 van der Oppelaar", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "117806", + "username": "arnoldtestprof…", + "username_url": "/user/117806", + "abs_id": "110.968671", + "crm_id": "765b566e-fc7d-e811-8100-a067d9aa3141" + }, + "contact_details": { + "email": "arnold.oppelaar+test20180702@gmail.com", + "email_domain": "gmail.com" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "ma 02-07-2018 - 15:32", + "last_access": "7 jaar 6 maanden ago", + "operations": [ + { + "text": "Bewerken", + "url": "/user/117806/edit?destination=/admin/people%3Fpage%3D3876" + }, + { + "text": "Rollen", + "url": "/user/117806/roles?destination=/admin/people%3Fpage%3D3876" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 2, + "match_candidates": [ + { + "linkedin_ppid": "ID_NL-NH-AMS_197X_NL-ZH-TH_XXXX_ARNOLD-OPPELAAR", + "linkedin_name": "Arnold Oppelaar", + "linkedin_slug": "arnold-oppelaar-b2139a23", + "confidence_score": 0.57, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + }, + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARNOLD-OPPELAAR", + "linkedin_name": { + "full_name": "Arnold Oppelaar", + "display_name": "Arnold Oppelaar", + "name_romanized": null, + "name_tokens": [ + "ARNOLD", + "OPPELAAR" + ], + "source": "linkedin_profile" + }, + "linkedin_slug": "arnold-oppelaar-b2139a23", + "confidence_score": 0.57, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:24.829647+00:00", + "annotation_script": "annotate_match_candidates.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_users.py", + "extraction_date": "2026-01-11T17:12:48.457507+00:00", + "source_file": "users/user_117806.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_117806.json", + "original_user_id": "117806", + "migrated_at": "2026-01-11T17:12:48.457516+00:00", + "migration_script": "migrate_wcms_users.py", + "migration_version": "1.0" + } +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARZU-BOZBEY-beb6f2f3_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARZU-BOZBEY-beb6f2f3_20260115_114918.json new file mode 100644 index 0000000000..a717708ac7 --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARZU-BOZBEY-beb6f2f3_20260115_114918.json @@ -0,0 +1,104 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARZU-BOZBEY-beb6f2f3", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "ARZU", + "BOZBEY" + ], + "collision_uuid": "beb6f2f3" + }, + "name": "Arzu Bozbey", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "215326", + "username": "bozbey", + "username_url": "/user/215326", + "abs_id": "110.988641", + "crm_id": "225c8287-760f-ea11-811f-c60f04f742c2" + }, + "contact_details": { + "email": "bozbey@advocatenkantoorweteringkade.nl", + "email_domain": "advocatenkantoorweteringkade.nl" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "ma 25-11-2019 - 12:27", + "last_access": "6 jaar 1 maand ago", + "operations": [ + { + "text": "Bewerken", + "url": "/user/215326/edit?destination=/admin/people%3Fpage%3D3611" + }, + { + "text": "Rollen", + "url": "/user/215326/roles?destination=/admin/people%3Fpage%3D3611" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 1, + "match_candidates": [ + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ARZU-BOZBEY", + "linkedin_name": "Arzu Bozbey", + "linkedin_slug": "arzu-bozbey-2139a433", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:25.202129+00:00", + "annotation_script": "annotate_match_candidates.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_users.py", + "extraction_date": "2026-01-11T17:16:40.556640+00:00", + "source_file": "users/user_215326.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_215326.json", + "original_user_id": "215326", + "migrated_at": "2026-01-11T17:16:40.556745+00:00", + "migration_script": "migrate_wcms_users.py", + "migration_version": "1.0" + } +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BRAM-DE-VRIES_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BRAM-DE-VRIES_20260115_114918.json new file mode 100644 index 0000000000..5a6da37515 --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BRAM-DE-VRIES_20260115_114918.json @@ -0,0 +1,169 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BRAM-DE-VRIES", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "BRAM", + "DE", + "VRIES" + ] + }, + "name": "Bram de Vries", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "204254", + "username": "Brambo64", + "username_url": "/user/204254", + "abs_id": "110.982267", + "crm_id": "00aa1a90-5394-e911-8113-b8bc8411702a" + }, + "contact_details": { + "email": "bdv64@hetnet.nl", + "email_domain": "hetnet.nl" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "vr 21-06-2019 - 20:37", + "last_access": "6 jaar 6 maanden ago", + "operations": [ + { + "text": "Bewerken", + "url": "/user/204254/edit?destination=/admin/people%3Fpage%3D3702" + }, + { + "text": "Rollen", + "url": "/user/204254/roles?destination=/admin/people%3Fpage%3D3702" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 5, + "match_candidates": [ + { + "linkedin_ppid": "ID_XX-XX-XXX_196X_NL-NH-AMS_XXXX_BRAM-VRIES", + "linkedin_name": { + "full_name": "Bram Vries", + "display_name": "Bram Vries", + "name_romanized": null, + "name_tokens": [ + "BRAM", + "VRIES" + ], + "source": "linkedin_profile" + }, + "linkedin_slug": "bram-vries-71878219", + "confidence_score": 0.57, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + }, + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BRAM-VRIES", + "linkedin_name": "Bram Vries", + "linkedin_slug": "bram-vries-71878219", + "confidence_score": 0.57, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + }, + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BENJAMIN-DE-VRIES", + "linkedin_name": "Benjamin de Vries", + "linkedin_slug": "benjamin-de-vries-48746810b", + "confidence_score": 0.51, + "match_signals": [ + "strong_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + }, + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BRANKO-DE-VRIES", + "linkedin_name": "Branko de Vries", + "linkedin_slug": "branko-de-vries-26a4a547", + "confidence_score": 0.51, + "match_signals": [ + "strong_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + }, + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_BERBER-DE-VRIES", + "linkedin_name": "Berber de Vries", + "linkedin_slug": "berber-de-vries-70485524a", + "confidence_score": 0.51, + "match_signals": [ + "strong_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:25.523890+00:00", + "annotation_script": "annotate_match_candidates.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_users.py", + "extraction_date": "2026-01-11T17:15:13.383336+00:00", + "source_file": "users/user_204254.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_204254.json", + "original_user_id": "204254", + "migrated_at": "2026-01-11T17:15:13.383345+00:00", + "migration_script": "migrate_wcms_users.py", + "migration_version": "1.0" + } +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CHRIS-STOLWIJK-1dfcd103_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CHRIS-STOLWIJK-1dfcd103_20260115_114918.json new file mode 100644 index 0000000000..ef882dc462 --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CHRIS-STOLWIJK-1dfcd103_20260115_114918.json @@ -0,0 +1,105 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CHRIS-STOLWIJK-1dfcd103", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "CHRIS", + "STOLWIJK" + ], + "collision_uuid": "1dfcd103" + }, + "name": "chris stolwijk", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "285320", + "username": "stolwijk@rkd.nl", + "username_url": "/user/285320", + "abs_id": "110.1070798", + "crm_id": "0c379c39-486b-ee11-816b-d7add8f6d140" + }, + "contact_details": { + "email": "stolwijk@rkd.nl", + "email_domain": "rkd.nl" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "zo 15-10-2023 - 12:47", + "last_access": "2 jaar 2 maanden ago", + "operations": [ + { + "text": "Bewerken", + "url": "/user/285320/edit?destination=/admin/people%3Fpage%3D2258" + }, + { + "text": "Rollen", + "url": "/user/285320/roles?destination=/admin/people%3Fpage%3D2258" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 1, + "wikipedia_url": null, + "match_candidates": [ + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_CHRIS-STOLWIJK", + "linkedin_name": "Chris Stolwijk", + "linkedin_slug": "chris-stolwijk-1059647", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:25.206513+00:00", + "annotation_script": "annotate_match_candidates.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_resume.py", + "extraction_date": "2026-01-11T21:23:22.961887+00:00", + "source_file": "users/user_285320.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_285320.json", + "original_user_id": "285320", + "migrated_at": "2026-01-11T21:23:22.961897+00:00", + "migration_script": "migrate_wcms_resume.py", + "migration_version": "2.0" + } +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DENNIS-VAN-HOLTEN_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DENNIS-VAN-HOLTEN_20260115_114918.json new file mode 100644 index 0000000000..1c53523b29 --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DENNIS-VAN-HOLTEN_20260115_114918.json @@ -0,0 +1,127 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DENNIS-VAN-HOLTEN", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "DENNIS", + "VAN", + "HOLTEN" + ] + }, + "name": "Dennis van Holten", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "238943", + "username": "dumbfoundead010", + "username_url": "/user/238943", + "abs_id": "110.1018107", + "crm_id": "a4b2d712-03b7-eb11-813e-e5929d7ab1c5" + }, + "contact_details": { + "email": "dragonden90@hotmail.com", + "email_domain": "hotmail.com" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "ma 17-05-2021 - 13:28", + "last_access": "3 jaar 6 maanden ago", + "operations": [ + { + "text": "Bewerken", + "url": "/user/238943/edit?destination=/admin/people%3Fpage%3D3164" + }, + { + "text": "Rollen", + "url": "/user/238943/roles?destination=/admin/people%3Fpage%3D3164" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 2, + "match_candidates": [ + { + "linkedin_ppid": "ID_NL-UT-UTR_199X_NL-NH-AMS_XXXX_DENNIS-HOLTEN", + "linkedin_name": { + "full_name": "Dennis van Holten", + "display_name": "Dennis van Holten", + "name_romanized": null, + "name_tokens": [ + "DENNIS", + "HOLTEN" + ], + "source": "linkedin_profile" + }, + "linkedin_slug": "dennis-van-holten-680a91223", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + }, + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DENNIS-HOLTEN", + "linkedin_name": "Dennis van Holten", + "linkedin_slug": "dennis-van-holten-680a91223", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:50.659692+00:00", + "annotation_script": "annotate_match_candidates.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_users.py", + "extraction_date": "2026-01-11T17:38:31.114984+00:00", + "source_file": "users/user_238943.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_238943.json", + "original_user_id": "238943", + "migrated_at": "2026-01-11T17:38:31.114996+00:00", + "migration_script": "migrate_wcms_users.py", + "migration_version": "1.0" + } +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DIEDERICK-KORTLANG-f8687158_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DIEDERICK-KORTLANG-f8687158_20260115_114918.json new file mode 100644 index 0000000000..ec3fcf641b --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DIEDERICK-KORTLANG-f8687158_20260115_114918.json @@ -0,0 +1,97 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DIEDERICK-KORTLANG-f8687158", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "DIEDERICK", + "KORTLANG" + ], + "collision_uuid": "f8687158" + }, + "name": "Diederick Kortlang", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "197389", + "username": "dkortlang", + "username_url": "/user/197389", + "abs_id": "110.980083", + "crm_id": "a3d23dce-0b6b-e911-8112-e46c51464684" + }, + "contact_details": { + "email": "diederick.kortlang@nationaalarchief.nl", + "email_domain": "nationaalarchief.nl" + }, + "wcms_activity": { + "status": "Active", + "roles": [ + "Redacteur" + ], + "registered_since": "di 30-04-2019 - 07:50", + "last_access": "1 week 1 dag ago", + "operations": [] + }, + "entity_resolution": { + "potential_linkedin_matches": 1, + "match_candidates": [ + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_DIEDERICK-KORTLANG", + "linkedin_name": "Diederick Kortlang", + "linkedin_slug": "diederick-kortlang-06a8204a", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:25.531589+00:00", + "annotation_script": "annotate_match_candidates.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_users.py", + "extraction_date": "2026-01-11T17:14:44.156659+00:00", + "source_file": "users/user_197389.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_197389.json", + "original_user_id": "197389", + "migrated_at": "2026-01-11T17:14:44.156670+00:00", + "migration_script": "migrate_wcms_users.py", + "migration_version": "1.0" + } +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ERIK-MUL-48242ac2_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ERIK-MUL-48242ac2_20260115_114918.json new file mode 100644 index 0000000000..fcadabaebd --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ERIK-MUL-48242ac2_20260115_114918.json @@ -0,0 +1,125 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ERIK-MUL-48242ac2", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "ERIK", + "MUL" + ], + "collision_uuid": "48242ac2" + }, + "name": "Erik Mul", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "114604", + "username": "Erik Mul", + "username_url": "/user/114604", + "abs_id": "110.967659", + "crm_id": "fda1f38a-ee63-e811-80ff-9f86b66faf29" + }, + "contact_details": { + "email": "erik.mul@nationaalarchief.nl", + "email_domain": "nationaalarchief.nl" + }, + "wcms_activity": { + "status": "Active", + "roles": [ + "Beta gebruikerRedacteurMedewerker dienstverleningWebshopbeheerder" + ], + "registered_since": "wo 30-05-2018 - 11:47", + "last_access": "1 week 5 dagen ago", + "operations": [] + }, + "entity_resolution": { + "potential_linkedin_matches": 3, + "match_candidates": [ + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ERIK-MUL", + "linkedin_name": "Erik Mul", + "linkedin_slug": "erik-mul-469a9499", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + }, + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ELINE-MUL", + "linkedin_name": "Eline Mul", + "linkedin_slug": "eline-mul-3b586931", + "confidence_score": 0.51, + "match_signals": [ + "strong_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + }, + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ELISA-MUL", + "linkedin_name": "Elisa Mul", + "linkedin_slug": "elisa-mul-51a82b225", + "confidence_score": 0.51, + "match_signals": [ + "strong_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:25.900512+00:00", + "annotation_script": "annotate_match_candidates.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_users.py", + "extraction_date": "2026-01-11T17:12:41.262552+00:00", + "source_file": "users/user_114604.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_114604.json", + "original_user_id": "114604", + "migrated_at": "2026-01-11T17:12:41.262576+00:00", + "migration_script": "migrate_wcms_users.py", + "migration_version": "1.0" + } +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ESTELLE-PRETORIUS-b93d153b_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ESTELLE-PRETORIUS-b93d153b_20260115_114918.json new file mode 100644 index 0000000000..f2f519acfb --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ESTELLE-PRETORIUS-b93d153b_20260115_114918.json @@ -0,0 +1,216 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ESTELLE-PRETORIUS-b93d153b", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "ESTELLE", + "PRETORIUS" + ], + "collision_uuid": "b93d153b" + }, + "name": "Estelle Pretorius", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "279423", + "username": "estellepretori…", + "username_url": "/user/279423", + "abs_id": "110.1064820", + "crm_id": "4c155a50-0f2b-ee11-8160-f5e4c0714e07" + }, + "contact_details": { + "email": "estellepretorius60@gmail.com", + "email_domain": "gmail.com" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "di 25-07-2023 - 19:18", + "last_access": "1 jaar 5 maanden ago", + "operations": [ + { + "text": "Bewerken", + "url": "/user/279423/edit?destination=/admin/people%3Fpage%3D2375" + }, + { + "text": "Rollen", + "url": "/user/279423/roles?destination=/admin/people%3Fpage%3D2375" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 2, + "wikipedia_url": null, + "match_candidates": [ + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ESTELLE-PRETORIUS", + "linkedin_name": "Estelle Pretorius", + "linkedin_slug": "estelle-pretorius-bb9b43156", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": true, + "review_decision": "match", + "reviewed_by": "reviewer", + "reviewed_at": "2026-01-13T12:40:16.261773+00:00" + }, + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ERNAMARIE-PRETORIUS", + "linkedin_name": { + "full_name": "Erna-Marié Pretorius", + "display_name": "Erna-Marié Pretorius", + "name_romanized": null, + "name_tokens": [ + "ERNAMARIE", + "PRETORIUS" + ], + "source": "linkedin_profile" + }, + "linkedin_slug": "erna-marié-pretorius-30470142", + "confidence_score": 0.51, + "match_signals": [ + "strong_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:25.474704+00:00", + "annotation_script": "annotate_match_candidates.py", + "resolved": true, + "resolved_linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ESTELLE-PRETORIUS", + "resolved_linkedin_slug": "estelle-pretorius-bb9b43156", + "resolution_confidence": 0.65, + "resolution_signals": [ + "email_name_parts", + "exact_name_match", + "email_birth_year" + ], + "resolution_decision": "match", + "resolved_by": "reviewer", + "resolved_at": "2026-01-13T12:40:16.261773+00:00", + "merge_timestamp": "2026-01-15T10:49:18.621569+00:00", + "merge_script": "merge_reviewed_profiles.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms", + "linkedin" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_resume.py", + "extraction_date": "2026-01-11T21:20:19.714097+00:00", + "source_file": "users/user_279423.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_279423.json", + "original_user_id": "279423", + "migrated_at": "2026-01-11T21:20:19.714109+00:00", + "migration_script": "migrate_wcms_resume.py", + "migration_version": "2.0" + }, + "profile_data": { + "headline": "Head of Professional Services at Die Erfenisstigting / The Heritage Foundation", + "linkedin_url": "https://www.linkedin.com/in/estelle-pretorius-bb9b43156" + }, + "affiliations": [ + { + "custodian_name": "Die Erfenisstigting _ The Heritage Foundation", + "custodian_slug": "die-erfenisstigting-the-heritage-foundation", + "role_title": "Head of Professional Services at Die Erfenisstigting / The Heritage Foundation", + "affiliation_provenance": { + "source": "LinkedIn company people page", + "source_url": "https://www.linkedin.com/in/estelle-pretorius-bb9b43156", + "retrieved_on": "2025-12-14T23:00:50.090000+00:00", + "retrieval_agent": "extract_persons_with_provenance.py" + } + } + ], + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [], + "rationale": "Identified as staff at Die Erfenisstigting _ The Heritage Foundation" + }, + "web_claims": [ + { + "claim_type": "linkedin_url", + "claim_value": "https://www.linkedin.com/in/estelle-pretorius-bb9b43156", + "source_url": "https://www.linkedin.com/company/die-erfenisstigting-the-heritage-foundation/people/", + "retrieved_on": "2025-12-14T23:00:50.090000+00:00", + "statement_created_at": "2026-01-09T22:40:48.271848+00:00", + "source_archived_at": "2025-12-14T23:00:50.090000+00:00", + "xpath": "/html[1]/head[1]/meta[1]/meta[2]/meta[3]/meta[4]/meta[5]/meta[6]/meta[7]/meta[8]/meta[9]/meta[10]/meta[11]/meta[12]/meta[13]/meta[14]/link[1]/link[2]/link[3]/link[4]/link[5]/link[6]/link[7]/meta[15]/meta[16]/meta[17]/meta[18]/meta[19]/meta[20]/meta[21]/meta[22]/meta[23]/meta[24]/meta[25]/meta[26]/link[8]/link[9]/link[10]/link[11]/link[12]/meta[27]/meta[28]/meta[29]/meta[30]/meta[31]/meta[32]/meta[33]/meta[34]/meta[35]/meta[36]/meta[37]/meta[38]/meta[39]/meta[40]/meta[41]/meta[42]/meta[43]/meta[44]/meta[45]/meta[46]/meta[47]/meta[48]/meta[49]/meta[50]/meta[51]/meta[52]/meta[53]/meta[54]/meta[55]/meta[56]/meta[57]/meta[58]/meta[59]/meta[60]/meta[61]/meta[62]/meta[63]/meta[64]/meta[65]/meta[66]/meta[67]/meta[68]/meta[69]/meta[70]/meta[71]/meta[72]/meta[73]/meta[74]/meta[75]/meta[76]/meta[77]/meta[78]/meta[79]/meta[80]/meta[81]/meta[82]/meta[83]/meta[84]/meta[85]/meta[86]/meta[87]/meta[88]/meta[89]/meta[90]/meta[91]/meta[92]/meta[93]/meta[94]/meta[95]/meta[96]/meta[97]/meta[98]/meta[99]/meta[100]/meta[101]/meta[102]/meta[103]/meta[104]/meta[105]/meta[106]/meta[107]/meta[108]/meta[109]/meta[110]/meta[111]/meta[112]/meta[113]/meta[114]/meta[115]/meta[116]/meta[117]/meta[118]/meta[119]/meta[120]/meta[121]/meta[122]/meta[123]/meta[124]/meta[125]/meta[126]/meta[127]/meta[128]/meta[129]/meta[130]/meta[131]/meta[132]/meta[133]/meta[134]/meta[135]/meta[136]/meta[137]/meta[138]/meta[139]/meta[140]/meta[141]/link[13]/link[14]/meta[142]/meta[143]/link[15]/link[16]/link[17]/link[18]/link[19]/link[20]/link[21]/link[22]/link[23]/link[24]/link[25]/link[26]/link[27]/link[28]/link[29]/link[30]/link[31]/link[32]/link[33]/link[34]/link[35]/link[36]/link[37]/link[38]/link[39]/link[40]/link[41]/link[42]/link[43]/link[44]/link[45]/link[46]/link[47]/link[48]/link[49]/link[50]/link[51]/link[52]/link[53]/link[54]/body[1]/img[1]/img[2]/img[3]/img[4]/img[5]/img[6]/img[7]/img[8]/img[9]/img[10]/img[11]/img[12]/img[13]/img[14]/img[15]/img[16]/img[17]/img[18]/div[27]/header[2]/div[31]/div[61]/div[62]/div[64]/div[65]/div[66]/div[86]/main[1]/div[87]/section[2]/div[88]/div[123]/div[124]/div[125]/div[173]/div[174]/div[175]/ul[6]/li[33]/div[176]/li[34]/div[187]/li[35]/div[201]/li[36]/div[212]/li[37]/div[226]/section[8]/img[32]/div[227]/div[228]/div[229]/a[25]", + "html_file": "/Volumes/KINGSTON/data/glam/data/custodian/person/affiliated/manual/(16) Die Erfenisstigting _ The Heritage Foundation_ People _ LinkedIn.html", + "xpath_match_score": 1.0, + "retrieval_agent": "extract_persons_with_provenance.py" + }, + { + "claim_type": "full_name", + "claim_value": "Estelle Pretorius", + "source_url": "https://www.linkedin.com/company/die-erfenisstigting-the-heritage-foundation/people/", + "retrieved_on": "2025-12-14T23:00:50.090000+00:00", + "statement_created_at": "2026-01-09T22:40:48.271874+00:00", + "source_archived_at": "2025-12-14T23:00:50.090000+00:00", + "xpath": "/html[1]/head[1]/meta[1]/meta[2]/meta[3]/meta[4]/meta[5]/meta[6]/meta[7]/meta[8]/meta[9]/meta[10]/meta[11]/meta[12]/meta[13]/meta[14]/link[1]/link[2]/link[3]/link[4]/link[5]/link[6]/link[7]/meta[15]/meta[16]/meta[17]/meta[18]/meta[19]/meta[20]/meta[21]/meta[22]/meta[23]/meta[24]/meta[25]/meta[26]/link[8]/link[9]/link[10]/link[11]/link[12]/meta[27]/meta[28]/meta[29]/meta[30]/meta[31]/meta[32]/meta[33]/meta[34]/meta[35]/meta[36]/meta[37]/meta[38]/meta[39]/meta[40]/meta[41]/meta[42]/meta[43]/meta[44]/meta[45]/meta[46]/meta[47]/meta[48]/meta[49]/meta[50]/meta[51]/meta[52]/meta[53]/meta[54]/meta[55]/meta[56]/meta[57]/meta[58]/meta[59]/meta[60]/meta[61]/meta[62]/meta[63]/meta[64]/meta[65]/meta[66]/meta[67]/meta[68]/meta[69]/meta[70]/meta[71]/meta[72]/meta[73]/meta[74]/meta[75]/meta[76]/meta[77]/meta[78]/meta[79]/meta[80]/meta[81]/meta[82]/meta[83]/meta[84]/meta[85]/meta[86]/meta[87]/meta[88]/meta[89]/meta[90]/meta[91]/meta[92]/meta[93]/meta[94]/meta[95]/meta[96]/meta[97]/meta[98]/meta[99]/meta[100]/meta[101]/meta[102]/meta[103]/meta[104]/meta[105]/meta[106]/meta[107]/meta[108]/meta[109]/meta[110]/meta[111]/meta[112]/meta[113]/meta[114]/meta[115]/meta[116]/meta[117]/meta[118]/meta[119]/meta[120]/meta[121]/meta[122]/meta[123]/meta[124]/meta[125]/meta[126]/meta[127]/meta[128]/meta[129]/meta[130]/meta[131]/meta[132]/meta[133]/meta[134]/meta[135]/meta[136]/meta[137]/meta[138]/meta[139]/meta[140]/meta[141]/link[13]/link[14]/meta[142]/meta[143]/link[15]/link[16]/link[17]/link[18]/link[19]/link[20]/link[21]/link[22]/link[23]/link[24]/link[25]/link[26]/link[27]/link[28]/link[29]/link[30]/link[31]/link[32]/link[33]/link[34]/link[35]/link[36]/link[37]/link[38]/link[39]/link[40]/link[41]/link[42]/link[43]/link[44]/link[45]/link[46]/link[47]/link[48]/link[49]/link[50]/link[51]/link[52]/link[53]/link[54]/body[1]/img[1]/img[2]/img[3]/img[4]/img[5]/img[6]/img[7]/img[8]/img[9]/img[10]/img[11]/img[12]/img[13]/img[14]/img[15]/img[16]/img[17]/img[18]/div[27]/header[2]/div[31]/div[61]/div[62]/div[64]/div[65]/div[66]/div[86]/main[1]/div[87]/section[2]/div[88]/div[123]/div[124]/div[125]/div[173]/div[174]/div[175]/ul[6]/li[33]/div[176]/li[34]/div[187]/li[35]/div[201]/li[36]/div[212]/li[37]/div[226]/section[8]/img[32]/div[227]/div[228]/div[229]/a[25]/img[33]/@alt", + "html_file": "/Volumes/KINGSTON/data/glam/data/custodian/person/affiliated/manual/(16) Die Erfenisstigting _ The Heritage Foundation_ People _ LinkedIn.html", + "xpath_match_score": 1.0, + "retrieval_agent": "extract_persons_with_provenance.py" + }, + { + "claim_type": "connection_degree", + "claim_value": "3rd+", + "source_url": "https://www.linkedin.com/company/die-erfenisstigting-the-heritage-foundation/people/", + "retrieved_on": "2025-12-14T23:00:50.090000+00:00", + "statement_created_at": "2026-01-09T22:40:48.271948+00:00", + "source_archived_at": "2025-12-14T23:00:50.090000+00:00", + "xpath": "/html[1]/head[1]/meta[1]/meta[2]/meta[3]/meta[4]/meta[5]/meta[6]/meta[7]/meta[8]/meta[9]/meta[10]/meta[11]/meta[12]/meta[13]/meta[14]/link[1]/link[2]/link[3]/link[4]/link[5]/link[6]/link[7]/meta[15]/meta[16]/meta[17]/meta[18]/meta[19]/meta[20]/meta[21]/meta[22]/meta[23]/meta[24]/meta[25]/meta[26]/link[8]/link[9]/link[10]/link[11]/link[12]/meta[27]/meta[28]/meta[29]/meta[30]/meta[31]/meta[32]/meta[33]/meta[34]/meta[35]/meta[36]/meta[37]/meta[38]/meta[39]/meta[40]/meta[41]/meta[42]/meta[43]/meta[44]/meta[45]/meta[46]/meta[47]/meta[48]/meta[49]/meta[50]/meta[51]/meta[52]/meta[53]/meta[54]/meta[55]/meta[56]/meta[57]/meta[58]/meta[59]/meta[60]/meta[61]/meta[62]/meta[63]/meta[64]/meta[65]/meta[66]/meta[67]/meta[68]/meta[69]/meta[70]/meta[71]/meta[72]/meta[73]/meta[74]/meta[75]/meta[76]/meta[77]/meta[78]/meta[79]/meta[80]/meta[81]/meta[82]/meta[83]/meta[84]/meta[85]/meta[86]/meta[87]/meta[88]/meta[89]/meta[90]/meta[91]/meta[92]/meta[93]/meta[94]/meta[95]/meta[96]/meta[97]/meta[98]/meta[99]/meta[100]/meta[101]/meta[102]/meta[103]/meta[104]/meta[105]/meta[106]/meta[107]/meta[108]/meta[109]/meta[110]/meta[111]/meta[112]/meta[113]/meta[114]/meta[115]/meta[116]/meta[117]/meta[118]/meta[119]/meta[120]/meta[121]/meta[122]/meta[123]/meta[124]/meta[125]/meta[126]/meta[127]/meta[128]/meta[129]/meta[130]/meta[131]/meta[132]/meta[133]/meta[134]/meta[135]/meta[136]/meta[137]/meta[138]/meta[139]/meta[140]/meta[141]/link[13]/link[14]/meta[142]/meta[143]/link[15]/link[16]/link[17]/link[18]/link[19]/link[20]/link[21]/link[22]/link[23]/link[24]/link[25]/link[26]/link[27]/link[28]/link[29]/link[30]/link[31]/link[32]/link[33]/link[34]/link[35]/link[36]/link[37]/link[38]/link[39]/link[40]/link[41]/link[42]/link[43]/link[44]/link[45]/link[46]/link[47]/link[48]/link[49]/link[50]/link[51]/link[52]/link[53]/link[54]/body[1]/img[1]/img[2]/img[3]/img[4]/img[5]/img[6]/img[7]/img[8]/img[9]/img[10]/img[11]/img[12]/img[13]/img[14]/img[15]/img[16]/img[17]/img[18]/div[27]/header[2]/div[31]/div[61]/div[62]/div[64]/div[65]/div[66]/div[86]/main[1]/div[87]/section[2]/div[88]/div[123]/div[124]/div[125]/div[173]/div[174]/div[175]/ul[6]/li[33]/div[176]/li[34]/div[187]/li[35]/div[201]/li[36]/div[212]/li[37]/div[226]/section[8]/img[32]/div[227]/div[228]/div[229]/div[230]/div[233]", + "html_file": "/Volumes/KINGSTON/data/glam/data/custodian/person/affiliated/manual/(16) Die Erfenisstigting _ The Heritage Foundation_ People _ LinkedIn.html", + "xpath_match_score": 1.0, + "retrieval_agent": "extract_persons_with_provenance.py" + }, + { + "claim_type": "headline", + "claim_value": "Head of Professional Services at Die Erfenisstigting / The Heritage Foundation", + "source_url": "https://www.linkedin.com/company/die-erfenisstigting-the-heritage-foundation/people/", + "retrieved_on": "2025-12-14T23:00:50.090000+00:00", + "statement_created_at": "2026-01-09T22:40:48.271981+00:00", + "source_archived_at": "2025-12-14T23:00:50.090000+00:00", + "xpath": "/html[1]/head[1]/meta[1]/meta[2]/meta[3]/meta[4]/meta[5]/meta[6]/meta[7]/meta[8]/meta[9]/meta[10]/meta[11]/meta[12]/meta[13]/meta[14]/link[1]/link[2]/link[3]/link[4]/link[5]/link[6]/link[7]/meta[15]/meta[16]/meta[17]/meta[18]/meta[19]/meta[20]/meta[21]/meta[22]/meta[23]/meta[24]/meta[25]/meta[26]/link[8]/link[9]/link[10]/link[11]/link[12]/meta[27]/meta[28]/meta[29]/meta[30]/meta[31]/meta[32]/meta[33]/meta[34]/meta[35]/meta[36]/meta[37]/meta[38]/meta[39]/meta[40]/meta[41]/meta[42]/meta[43]/meta[44]/meta[45]/meta[46]/meta[47]/meta[48]/meta[49]/meta[50]/meta[51]/meta[52]/meta[53]/meta[54]/meta[55]/meta[56]/meta[57]/meta[58]/meta[59]/meta[60]/meta[61]/meta[62]/meta[63]/meta[64]/meta[65]/meta[66]/meta[67]/meta[68]/meta[69]/meta[70]/meta[71]/meta[72]/meta[73]/meta[74]/meta[75]/meta[76]/meta[77]/meta[78]/meta[79]/meta[80]/meta[81]/meta[82]/meta[83]/meta[84]/meta[85]/meta[86]/meta[87]/meta[88]/meta[89]/meta[90]/meta[91]/meta[92]/meta[93]/meta[94]/meta[95]/meta[96]/meta[97]/meta[98]/meta[99]/meta[100]/meta[101]/meta[102]/meta[103]/meta[104]/meta[105]/meta[106]/meta[107]/meta[108]/meta[109]/meta[110]/meta[111]/meta[112]/meta[113]/meta[114]/meta[115]/meta[116]/meta[117]/meta[118]/meta[119]/meta[120]/meta[121]/meta[122]/meta[123]/meta[124]/meta[125]/meta[126]/meta[127]/meta[128]/meta[129]/meta[130]/meta[131]/meta[132]/meta[133]/meta[134]/meta[135]/meta[136]/meta[137]/meta[138]/meta[139]/meta[140]/meta[141]/link[13]/link[14]/meta[142]/meta[143]/link[15]/link[16]/link[17]/link[18]/link[19]/link[20]/link[21]/link[22]/link[23]/link[24]/link[25]/link[26]/link[27]/link[28]/link[29]/link[30]/link[31]/link[32]/link[33]/link[34]/link[35]/link[36]/link[37]/link[38]/link[39]/link[40]/link[41]/link[42]/link[43]/link[44]/link[45]/link[46]/link[47]/link[48]/link[49]/link[50]/link[51]/link[52]/link[53]/link[54]/body[1]/img[1]/img[2]/img[3]/img[4]/img[5]/img[6]/img[7]/img[8]/img[9]/img[10]/img[11]/img[12]/img[13]/img[14]/img[15]/img[16]/img[17]/img[18]/div[27]/header[2]/div[31]/div[61]/div[62]/div[64]/div[65]/div[66]/div[86]/main[1]/div[87]/section[2]/div[88]/div[123]/div[124]/div[125]/div[173]/div[174]/div[175]/ul[6]/li[33]/div[176]/li[34]/div[187]/li[35]/div[201]/li[36]/div[212]/li[37]/div[226]/section[8]/img[32]/div[227]/div[228]/div[229]/div[230]/div[234]/div[235]/div[236]", + "html_file": "/Volumes/KINGSTON/data/glam/data/custodian/person/affiliated/manual/(16) Die Erfenisstigting _ The Heritage Foundation_ People _ LinkedIn.html", + "xpath_match_score": 1.0, + "retrieval_agent": "extract_persons_with_provenance.py" + } + ], + "linkedin_slug": "estelle-pretorius-bb9b43156" +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ESTELLE-PRETORIUS-bb8c06ad_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ESTELLE-PRETORIUS-bb8c06ad_20260115_114918.json new file mode 100644 index 0000000000..6f7d79b0cf --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ESTELLE-PRETORIUS-bb8c06ad_20260115_114918.json @@ -0,0 +1,128 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ESTELLE-PRETORIUS-bb8c06ad", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "ESTELLE", + "PRETORIUS" + ], + "collision_uuid": "bb8c06ad" + }, + "name": "Estelle Pretorius", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "279423", + "username": "estellepretori…", + "username_url": "/user/279423", + "abs_id": "110.1064820", + "crm_id": "4c155a50-0f2b-ee11-8160-f5e4c0714e07" + }, + "contact_details": { + "email": "estellepretorius60@gmail.com", + "email_domain": "gmail.com" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "di 25-07-2023 - 19:18", + "last_access": "1 jaar 5 maanden ago", + "operations": [ + { + "text": "Bewerken", + "url": "/user/279423/edit?destination=/admin/people%3Fpage%3D2375" + }, + { + "text": "Rollen", + "url": "/user/279423/roles?destination=/admin/people%3Fpage%3D2375" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 2, + "wikipedia_url": null, + "match_candidates": [ + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ESTELLE-PRETORIUS", + "linkedin_name": "Estelle Pretorius", + "linkedin_slug": "estelle-pretorius-bb9b43156", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + }, + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ERNAMARIE-PRETORIUS", + "linkedin_name": { + "full_name": "Erna-Marié Pretorius", + "display_name": "Erna-Marié Pretorius", + "name_romanized": null, + "name_tokens": [ + "ERNAMARIE", + "PRETORIUS" + ], + "source": "linkedin_profile" + }, + "linkedin_slug": "erna-marié-pretorius-30470142", + "confidence_score": 0.51, + "match_signals": [ + "strong_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:24.820782+00:00", + "annotation_script": "annotate_match_candidates.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_resume.py", + "extraction_date": "2026-01-11T20:53:32.070370+00:00", + "source_file": "users/user_279423.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_279423.json", + "original_user_id": "279423", + "migrated_at": "2026-01-11T20:53:32.070390+00:00", + "migration_script": "migrate_wcms_resume.py", + "migration_version": "2.0" + } +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_FLOORTJE-TUINSTRA-79069b72_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_FLOORTJE-TUINSTRA-79069b72_20260115_114918.json new file mode 100644 index 0000000000..1cec7a0d9c --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_FLOORTJE-TUINSTRA-79069b72_20260115_114918.json @@ -0,0 +1,464 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_FLOORTJE-TUINSTRA-79069b72", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "FLOORTJE", + "TUINSTRA" + ], + "collision_uuid": "79069b72" + }, + "name": "Floortje Tuinstra", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "160097", + "username": "TuinstraHUA", + "username_url": "/user/160097", + "abs_id": "110.301720", + "crm_id": "A7D6A658-E671-E211-B615-005056930016" + }, + "contact_details": { + "email": "f.tuinstra@hetutrechtsarchief.nl", + "email_domain": "hetutrechtsarchief.nl" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "vr 08-02-2013 - 12:54", + "last_access": "12 jaar 10 maanden ago", + "operations": [ + { + "text": "Bewerken", + "url": "/en/user/160097/edit?destination=/admin/people%3Fpage%3D4466" + }, + { + "text": "Rollen", + "url": "/user/160097/roles?destination=/admin/people%3Fpage%3D4466" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 2, + "match_candidates": [ + { + "linkedin_ppid": "ID_NL-ZH-LEI_196X_NL-UT-UTR_XXXX_FLOORTJE-TUINSTRA", + "linkedin_name": { + "full_name": "Floortje Tuinstra", + "display_name": "Floortje Tuinstra", + "name_romanized": null, + "name_tokens": [ + "FLOORTJE", + "TUINSTRA" + ], + "source": "linkedin_profile" + }, + "linkedin_slug": "floortje-tuinstra-52941531", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": true, + "review_decision": "match", + "reviewed_by": "reviewer", + "reviewed_at": "2026-01-13T12:43:31.354705+00:00" + }, + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_FLOORTJE-TUINSTRA", + "linkedin_name": "Floortje Tuinstra", + "linkedin_slug": "floortje-tuinstra-52941531", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:24.958610+00:00", + "annotation_script": "annotate_match_candidates.py", + "resolved": true, + "resolved_linkedin_ppid": "ID_NL-ZH-LEI_196X_NL-UT-UTR_XXXX_FLOORTJE-TUINSTRA", + "resolved_linkedin_slug": "floortje-tuinstra-52941531", + "resolution_confidence": 0.65, + "resolution_signals": [ + "email_name_parts", + "exact_name_match", + "email_institution", + "email_institutional" + ], + "resolution_decision": "match", + "resolved_by": "reviewer", + "resolved_at": "2026-01-13T12:43:31.354705+00:00", + "merge_timestamp": "2026-01-15T10:49:18.566164+00:00", + "merge_script": "merge_reviewed_profiles.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms", + "linkedin" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_users.py", + "extraction_date": "2026-01-11T17:07:34.373050+00:00", + "source_file": "users/user_160097.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_160097.json", + "original_user_id": "160097", + "migrated_at": "2026-01-11T17:07:34.373065+00:00", + "migration_script": "migrate_wcms_users.py", + "migration_version": "1.0" + }, + "profile_data": { + "headline": "Coordinator Team Verwerven & Metadateren\nHet Utrechts Archief", + "location": "The Randstad, Netherlands (NL)", + "about": "Total Experience: 27 years", + "experience": [ + { + "title": "Coordinator Team Verwerven Metadateren, Afdeling Inspectie En Collectiebeheer", + "company": "Het Utrechts Archief", + "date_range": "Feb 2021 - Present", + "location": "Utrecht, Netherlands" + }, + { + "title": "Vakspecialist Acquisitie En Inventarisatie", + "company": "Het Utrechts Archief", + "date_range": "Jan 2001 - Present" + }, + { + "title": "Redacteur Jaarboek Oud-Utrecht", + "company": "Vereniging Oud-Utrecht", + "date_range": "Oct 2021 - Present" + }, + { + "title": "Raad Van Toezicht", + "company": "Stichting De Inktpot", + "date_range": "Sep 2020 - Present", + "location": "Utrecht, Netherlands" + }, + { + "title": "Medewerker Educatie", + "company": "Het Utrechts Archief", + "date_range": "Sep 1999 - Sep 2008" + }, + { + "title": "Redacteur", + "company": "Archievenblad", + "date_range": "Oct 2011 - Dec 2019" + }, + { + "title": "Inventarisator Archief Nieuw Burgerlijk Wetboek", + "company": "Ministerie van Justitie en Veiligheid", + "date_range": "Jan 1999 - Dec 2001", + "location": "The Hague, South Holland, Netherlands" + }, + { + "title": "Stagiaire Archivistiek A", + "company": "Streekarchiefdienst Hollands-Midden", + "date_range": "Jan 1997 - Jan 1998", + "location": "Gouda, South Holland, Netherlands" + } + ], + "education": [ + { + "degree": "Archivistiek A", + "institution": "Rijksarchiefschool, Den Haag", + "date_range": "1997 - 1998" + }, + { + "degree": "drs., Geschiedenis", + "institution": "Rijksuniversiteit Leiden", + "date_range": "1990 - 1996" + }, + { + "degree": "VWO", + "institution": "Rijnlands Lyceum Wassenaar", + "date_range": "1984 - 1990" + } + ], + "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2", + "linkedin_url": "https://www.linkedin.com/in/floortje-tuinstra-52941531" + }, + "affiliations": [ + { + "custodian_name": "Het Utrechts Archief", + "custodian_slug": "het-utrechts-archief", + "ghcid": "NL-UT-UTR-A-HUA", + "role_title": "Coordinator Team Verwerven & Metadateren", + "department": "Afdeling Inspectie en Collectiebeheer", + "heritage_relevant": true, + "heritage_type": "A", + "current": true, + "start_date": "2021-02", + "observed_on": "2025-12-14T11:22:09Z", + "source_url": "https://www.linkedin.com/in/floortje-tuinstra-52941531" + } + ], + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "A" + ], + "rationale": "Senior archivist with 27+ year career in Dutch archival sector. Currently Coordinator Team Acquisition & Metadata at Het Utrechts Archief (since 2021, HUA since 2001). Trained at Rijksarchiefschool (Archivistiek A). Former 8-year editorial role at Archievenblad (major Dutch archival publication). Current editor Jaarboek Oud-Utrecht and Raad van Toezicht member at Stichting De Inktpot. Expert in archival acquisition, inventorying, and metadata practices. Contributed to KIA Community discussions on archival theory and practice." + }, + "web_claims": [ + { + "claim_type": "full_name", + "claim_value": "Floortje Tuinstra", + "source_url": "https://www.linkedin.com/in/floortje-tuinstra-52941531", + "retrieved_on": "2025-12-14T11:22:09Z", + "retrieval_agent": "linkedin_html_parser", + "content_hash": { + "algorithm": "sha256", + "value": "sha256-MqmiDzXMh8HSPafVsVX1C/W2YpzR7nB2hc+LJCAHWmI=", + "scope": "extracted_text" + }, + "text_fragment": "#:~:text=Floortje%20Tuinstra", + "w3c_selectors": [ + { + "type": "TextQuoteSelector", + "exact": "Floortje Tuinstra", + "prefix": "", + "suffix": "" + } + ], + "prov": { + "wasDerivedFrom": "https://www.linkedin.com/in/floortje-tuinstra-52941531" + }, + "verification": { + "status": "verified", + "last_verified": "2025-12-28T18:39:01.663303+00:00" + } + }, + { + "claim_type": "role_title", + "claim_value": "Coordinator Team Verwerven & Metadateren Het Utrechts Archief", + "source_url": "https://www.linkedin.com/in/floortje-tuinstra-52941531", + "retrieved_on": "2025-12-14T11:22:09Z", + "retrieval_agent": "linkedin_html_parser", + "content_hash": { + "algorithm": "sha256", + "value": "sha256-yrpM8qikoJK7H2tb7xC3axGmx92Li8kZtGzQuHlPVyg=", + "scope": "extracted_text" + }, + "text_fragment": "#:~:text=Coordinator%20Team%20Verwerven%20%26%20Metadateren%20Het%20Utrechts%20Archief", + "w3c_selectors": [ + { + "type": "TextQuoteSelector", + "exact": "Coordinator Team Verwerven & Metadateren Het Utrechts Archief", + "prefix": "null", + "suffix": "null" + } + ], + "prov": { + "wasDerivedFrom": "https://www.linkedin.com/in/floortje-tuinstra-52941531" + }, + "verification": { + "status": "verified", + "last_verified": "2025-12-28T18:39:03.290096+00:00" + } + }, + { + "claim_type": "position", + "claim_value": "Coordinator Team Verwerven & Metadateren at Het Utrechts Archief since February 2021", + "source_url": "https://www.linkedin.com/in/floortje-tuinstra-52941531", + "retrieved_on": "2026-01-10T00:00:00Z", + "retrieval_agent": "opencode-claude-sonnet-4", + "text_fragment": "Coordinator Team Verwerven Metadateren, Afdeling Inspectie En Collectiebeheer at Het Utrechts Archief, Feb 2021 - Present", + "verification": { + "status": "verified", + "last_verified": "2026-01-10T00:00:00Z" + } + }, + { + "claim_type": "position", + "claim_value": "Vakspecialist Acquisitie en Inventarisatie at Het Utrechts Archief since January 2001 - 24+ years continuous employment", + "source_url": "https://www.linkedin.com/in/floortje-tuinstra-52941531", + "retrieved_on": "2026-01-10T00:00:00Z", + "retrieval_agent": "opencode-claude-sonnet-4", + "text_fragment": "Vakspecialist Acquisitie En Inventarisatie at Het Utrechts Archief, Jan 2001 - Present", + "verification": { + "status": "verified", + "last_verified": "2026-01-10T00:00:00Z" + } + }, + { + "claim_type": "position", + "claim_value": "Redacteur Jaarboek Oud-Utrecht at Vereniging Oud-Utrecht since October 2021", + "source_url": "https://www.linkedin.com/in/floortje-tuinstra-52941531", + "retrieved_on": "2026-01-10T00:00:00Z", + "retrieval_agent": "opencode-claude-sonnet-4", + "text_fragment": "Redacteur Jaarboek Oud-Utrecht at Vereniging Oud-Utrecht (Current), Oct 2021 - Present", + "verification": { + "status": "verified", + "last_verified": "2026-01-10T00:00:00Z" + } + }, + { + "claim_type": "position", + "claim_value": "Raad van Toezicht (Supervisory Board) at Stichting De Inktpot since September 2020", + "source_url": "https://www.linkedin.com/in/floortje-tuinstra-52941531", + "retrieved_on": "2026-01-10T00:00:00Z", + "retrieval_agent": "opencode-claude-sonnet-4", + "text_fragment": "Raad Van Toezicht at Stichting De Inktpot (Current), Sep 2020 - Present, Utrecht, Netherlands", + "verification": { + "status": "verified", + "last_verified": "2026-01-10T00:00:00Z" + } + }, + { + "claim_type": "position", + "claim_value": "Redacteur at Archievenblad from October 2011 to December 2019 - 8+ years", + "source_url": "https://www.linkedin.com/in/floortje-tuinstra-52941531", + "retrieved_on": "2026-01-10T00:00:00Z", + "retrieval_agent": "opencode-claude-sonnet-4", + "text_fragment": "Redacteur at Archievenblad, Oct 2011 - Dec 2019", + "verification": { + "status": "verified", + "last_verified": "2026-01-10T00:00:00Z" + } + }, + { + "claim_type": "position", + "claim_value": "Medewerker Educatie at Het Utrechts Archief from September 1999 to September 2008 - 9 years", + "source_url": "https://www.linkedin.com/in/floortje-tuinstra-52941531", + "retrieved_on": "2026-01-10T00:00:00Z", + "retrieval_agent": "opencode-claude-sonnet-4", + "text_fragment": "Medewerker Educatie at Het Utrechts Archief, Sep 1999 - Sep 2008", + "verification": { + "status": "verified", + "last_verified": "2026-01-10T00:00:00Z" + } + }, + { + "claim_type": "position", + "claim_value": "Inventarisator Archief Nieuw Burgerlijk Wetboek at Ministerie van Justitie en Veiligheid from January 1999 to December 2001", + "source_url": "https://www.linkedin.com/in/floortje-tuinstra-52941531", + "retrieved_on": "2026-01-10T00:00:00Z", + "retrieval_agent": "opencode-claude-sonnet-4", + "text_fragment": "Inventarisator Archief Nieuw Burgerlijk Wetboek at Ministerie van Justitie en Veiligheid, Jan 1999 - Dec 2001, The Hague", + "verification": { + "status": "verified", + "last_verified": "2026-01-10T00:00:00Z" + } + }, + { + "claim_type": "education", + "claim_value": "Archivistiek A at Rijksarchiefschool, Den Haag (1997-1998)", + "source_url": "https://www.linkedin.com/in/floortje-tuinstra-52941531", + "retrieved_on": "2026-01-10T00:00:00Z", + "retrieval_agent": "opencode-claude-sonnet-4", + "text_fragment": "Archivistiek A at Rijksarchiefschool, Den Haag, 1997 - 1998", + "verification": { + "status": "verified", + "last_verified": "2026-01-10T00:00:00Z" + } + }, + { + "claim_type": "education", + "claim_value": "drs. Geschiedenis at Rijksuniversiteit Leiden (1990-1996)", + "source_url": "https://www.linkedin.com/in/floortje-tuinstra-52941531", + "retrieved_on": "2026-01-10T00:00:00Z", + "retrieval_agent": "opencode-claude-sonnet-4", + "text_fragment": "drs., Geschiedenis at Rijksuniversiteit Leiden, 1990 - 1996", + "verification": { + "status": "verified", + "last_verified": "2026-01-10T00:00:00Z" + } + }, + { + "claim_type": "professional_philosophy", + "claim_value": "Advocates for archival articles that tell engaging stories with a narrative arc, rather than being mere 'toppled card catalogs' of facts. Emphasizes the importance of structuring archival writing with build-up to significant moments.", + "source_url": "https://oud-utrecht.nl/nieuws/1167-een-artikel-moet-geen-omgevallen-kaartenbak-zijn", + "retrieved_on": "2026-01-10T00:00:00Z", + "retrieval_agent": "opencode-claude-sonnet-4", + "text_fragment": "Een artikel moet geen omgevallen kaartenbak zijn", + "verification": { + "status": "verified", + "last_verified": "2026-01-10T00:00:00Z" + }, + "note": "Interview as editor of Jaarboek Oud-Utrecht on editorial principles for archival publications" + }, + { + "claim_type": "organizational_contribution", + "claim_value": "As Redacteur of Jaarboek Oud-Utrecht, applies editorial criteria focused on narrative quality: articles must have clear structure with build-up, and tell stories that engage readers rather than simply listing archival facts", + "source_url": "https://oud-utrecht.nl/nieuws/1167-een-artikel-moet-geen-omgevallen-kaartenbak-zijn", + "retrieved_on": "2026-01-10T00:00:00Z", + "retrieval_agent": "opencode-claude-sonnet-4", + "text_fragment": "Een artikel moet geen omgevallen kaartenbak zijn", + "verification": { + "status": "verified", + "last_verified": "2026-01-10T00:00:00Z" + } + }, + { + "claim_type": "professional_contribution", + "claim_value": "Active contributor to KIA (Kennisnetwerk Informatie en Archief) Community discussions on archival theory and practice", + "source_url": "https://kiacommunity.nl/thoughts/17757", + "retrieved_on": "2026-01-10T00:00:00Z", + "retrieval_agent": "opencode-claude-sonnet-4", + "text_fragment": "KIA Community contribution by Floortje Tuinstra", + "verification": { + "status": "verified", + "last_verified": "2026-01-10T00:00:00Z" + } + }, + { + "claim_type": "media_appearance", + "claim_value": "Appeared on RTV Utrecht Bureau Hengeveld program regarding discovery of centuries-old documents, demonstrating expertise in archival acquisition and provenance research", + "source_url": "https://www.rtvutrecht.nl/bureau-hengeveld/3888957/eigenaar-van-eeuwenoude-documenten-gezocht", + "retrieved_on": "2026-01-10T00:00:00Z", + "retrieval_agent": "opencode-claude-sonnet-4", + "text_fragment": "Bureau Hengeveld - Eigenaar van eeuwenoude documenten gezocht", + "verification": { + "status": "verified", + "last_verified": "2026-01-10T00:00:00Z" + }, + "note": "Media appearance as archival expert on regional TV" + }, + { + "claim_type": "expertise", + "claim_value": "27+ years experience in Dutch archival sector spanning acquisition, inventorying, metadata, education, and editorial work", + "source_url": "https://www.linkedin.com/in/floortje-tuinstra-52941531", + "retrieved_on": "2026-01-10T00:00:00Z", + "retrieval_agent": "opencode-claude-sonnet-4", + "text_fragment": "Total Experience: 27 years", + "verification": { + "status": "verified", + "last_verified": "2026-01-10T00:00:00Z" + } + } + ], + "linkedin_slug": "floortje-tuinstra-52941531" +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_FRANS-VAN-DEN-BEDEM_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_FRANS-VAN-DEN-BEDEM_20260115_114918.json new file mode 100644 index 0000000000..06991e23f2 --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_FRANS-VAN-DEN-BEDEM_20260115_114918.json @@ -0,0 +1,105 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_FRANS-VAN-DEN-BEDEM", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "FRANS", + "VAN", + "DEN", + "BEDEM" + ] + }, + "name": "Frans van den Bedem", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "213353", + "username": "fvandenbedem", + "username_url": "/user/213353", + "abs_id": "110.986153", + "crm_id": "db09308e-88e3-e911-811a-bda2ade00f92" + }, + "contact_details": { + "email": "fvandenbedemm@live.com", + "email_domain": "live.com" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "ma 30-09-2019 - 15:45", + "last_access": "4 jaar 6 maanden ago", + "operations": [ + { + "text": "Bewerken", + "url": "/user/213353/edit?destination=/admin/people%3Fpage%3D3647" + }, + { + "text": "Rollen", + "url": "/user/213353/roles?destination=/admin/people%3Fpage%3D3647" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 1, + "match_candidates": [ + { + "linkedin_ppid": "ID_NL-OV-ENS_196X_XX-XX-XXX_XXXX_FRANS-BEDEM", + "linkedin_name": "Frans Van Den Bedem", + "linkedin_slug": "frans-van-den-bedem-a4511312", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:25.591879+00:00", + "annotation_script": "annotate_match_candidates.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_users.py", + "extraction_date": "2026-01-11T17:16:05.470199+00:00", + "source_file": "users/user_213353.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_213353.json", + "original_user_id": "213353", + "migrated_at": "2026-01-11T17:16:05.470208+00:00", + "migration_script": "migrate_wcms_users.py", + "migration_version": "1.0" + } +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_GERDA-ZEEKANT-ba3c3d58_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_GERDA-ZEEKANT-ba3c3d58_20260115_114918.json new file mode 100644 index 0000000000..682e1e5411 --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_GERDA-ZEEKANT-ba3c3d58_20260115_114918.json @@ -0,0 +1,106 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_GERDA-ZEEKANT-ba3c3d58", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "GERDA", + "ZEEKANT" + ], + "collision_uuid": "ba3c3d58" + }, + "name": "gerda zeekant", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "239607", + "username": "gerda.zeekant", + "username_url": "/user/239607", + "abs_id": "110.1018889", + "crm_id": "d8b5afa5-93bf-eb11-813f-a83009ef7e1b" + }, + "contact_details": { + "email": "gerdazeekant@live.com", + "email_domain": "live.com" + }, + "wcms_activity": { + "status": "Active", + "roles": [ + "Beta gebruiker" + ], + "registered_since": "vr 28-05-2021 - 11:04", + "last_access": "1 maand ago", + "operations": [ + { + "text": "Bewerken", + "url": "/user/239607/edit?destination=/admin/people%3Fpage%3D3151" + }, + { + "text": "Rollen", + "url": "/user/239607/roles?destination=/admin/people%3Fpage%3D3151" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 1, + "match_candidates": [ + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_GERDA-ZEEKANT", + "linkedin_name": "Gerda Zeekant", + "linkedin_slug": "gerda-zeekant-7b600a15a", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:24.770832+00:00", + "annotation_script": "annotate_match_candidates.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_users.py", + "extraction_date": "2026-01-11T17:38:49.045942+00:00", + "source_file": "users/user_239607.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_239607.json", + "original_user_id": "239607", + "migrated_at": "2026-01-11T17:38:49.045998+00:00", + "migration_script": "migrate_wcms_users.py", + "migration_version": "1.0" + } +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_GERRIT-VISSER-b10f429b_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_GERRIT-VISSER-b10f429b_20260115_114918.json new file mode 100644 index 0000000000..ceeb27a3e4 --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_GERRIT-VISSER-b10f429b_20260115_114918.json @@ -0,0 +1,169 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_GERRIT-VISSER-b10f429b", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "GERRIT", + "VISSER" + ], + "collision_uuid": "b10f429b" + }, + "name": "Gerrit Visser", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "219251", + "username": "gerritvi", + "username_url": "/user/219251", + "abs_id": "110.993468", + "crm_id": "ed1c4bd1-7262-ea11-8125-d99ad8ceec4f" + }, + "contact_details": { + "email": "gerritv48@outlook.com", + "email_domain": "outlook.com" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "di 10-03-2020 - 02:59", + "last_access": "1 jaar 4 maanden ago", + "operations": [ + { + "text": "Bewerken", + "url": "/user/219251/edit?destination=/admin/people%3Fpage%3D3539" + }, + { + "text": "Rollen", + "url": "/user/219251/roles?destination=/admin/people%3Fpage%3D3539" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 5, + "match_candidates": [ + { + "linkedin_ppid": "ID_NL-GR-GRO_194X_NL-ZH-TH_XXXX_GERRIT-VISSER", + "linkedin_name": "Gerrit Visser", + "linkedin_slug": "gerritvisser", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + }, + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_GERRIT-VISSER", + "linkedin_name": { + "full_name": "Gerrit Visser", + "display_name": "Gerrit Visser", + "name_romanized": null, + "name_tokens": [ + "GERRIT", + "VISSER" + ], + "source": "linkedin_profile" + }, + "linkedin_slug": "gerritvisser", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + }, + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_GERINE-VISSER", + "linkedin_name": "Gerine Visser", + "linkedin_slug": "gerine", + "confidence_score": 0.51, + "match_signals": [ + "strong_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + }, + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_GUUSTA-VISSER", + "linkedin_name": "Guusta Visser", + "linkedin_slug": "guustavisser", + "confidence_score": 0.51, + "match_signals": [ + "strong_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + }, + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_GERBEN-VISSER", + "linkedin_name": "Gerben Visser", + "linkedin_slug": "gerben-visser-48a17045", + "confidence_score": 0.51, + "match_signals": [ + "strong_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:27.813165+00:00", + "annotation_script": "annotate_match_candidates.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_users.py", + "extraction_date": "2026-01-11T17:17:55.175741+00:00", + "source_file": "users/user_219251.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_219251.json", + "original_user_id": "219251", + "migrated_at": "2026-01-11T17:17:55.175755+00:00", + "migration_script": "migrate_wcms_users.py", + "migration_version": "1.0" + } +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HARM-PETER-DE-VRIES-e6cc2d8c_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HARM-PETER-DE-VRIES-e6cc2d8c_20260115_114918.json new file mode 100644 index 0000000000..0ff555b1ac --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HARM-PETER-DE-VRIES-e6cc2d8c_20260115_114918.json @@ -0,0 +1,163 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HARM-PETER-DE-VRIES-e6cc2d8c", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "HARM", + "PETER", + "DE", + "VRIES" + ], + "collision_uuid": "e6cc2d8c" + }, + "name": "Harm Peter De Vries", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "279762", + "username": "harmpeterdevries", + "username_url": "/user/279762", + "abs_id": "110.1065171", + "crm_id": "1580e3b9-6830-ee11-8160-f5e4c0714e07" + }, + "contact_details": { + "email": "hpdevries@hotmail.com", + "email_domain": "hotmail.com" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "di 01-08-2023 - 14:41", + "last_access": "2 jaar 5 maanden ago", + "operations": [ + { + "text": "Bewerken", + "url": "/user/279762/edit?destination=/admin/people%3Fpage%3D2368" + }, + { + "text": "Rollen", + "url": "/user/279762/roles?destination=/admin/people%3Fpage%3D2368" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 5, + "wikipedia_url": null, + "match_candidates": [ + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HARM-PETER-DE-VRIES", + "linkedin_name": "Harm Peter de Vries", + "linkedin_slug": "harm-peter-de-vries-8656218a", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + }, + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HENK-DE-VRIES", + "linkedin_name": "Henk de Vries", + "linkedin_slug": "henk-de-vries-7890507", + "confidence_score": 0.51, + "match_signals": [ + "strong_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + }, + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HENNIE-DE-VRIES", + "linkedin_name": "Hennie De Vries", + "linkedin_slug": "hennie-de-vries-a9401730", + "confidence_score": 0.51, + "match_signals": [ + "strong_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + }, + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HANS-VRIES", + "linkedin_name": "Hans de Vries", + "linkedin_slug": "hans-de-vries-2a603a12", + "confidence_score": 0.51, + "match_signals": [ + "strong_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + }, + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HUGO-DE-VRIES", + "linkedin_name": "Hugo de Vries", + "linkedin_slug": "hugolodocusdevries", + "confidence_score": 0.51, + "match_signals": [ + "strong_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:25.822219+00:00", + "annotation_script": "annotate_match_candidates.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_resume.py", + "extraction_date": "2026-01-11T20:53:43.034015+00:00", + "source_file": "users/user_279762.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_279762.json", + "original_user_id": "279762", + "migrated_at": "2026-01-11T20:53:43.034037+00:00", + "migration_script": "migrate_wcms_resume.py", + "migration_version": "2.0" + } +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HEDWIG-SLEURINK-78259049_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HEDWIG-SLEURINK-78259049_20260115_114918.json new file mode 100644 index 0000000000..3a50a1790e --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HEDWIG-SLEURINK-78259049_20260115_114918.json @@ -0,0 +1,104 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HEDWIG-SLEURINK-78259049", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "HEDWIG", + "SLEURINK" + ], + "collision_uuid": "78259049" + }, + "name": "Hedwig Sleurink", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "260442", + "username": "HedwigSleurink", + "username_url": "/user/260442", + "abs_id": "110.1043438", + "crm_id": "c2814348-7925-ed11-814f-839be4df6757" + }, + "contact_details": { + "email": "hedwigsleurink@live.nl", + "email_domain": "live.nl" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "vr 26-08-2022 - 21:57", + "last_access": "3 jaar 4 maanden ago", + "operations": [ + { + "text": "Bewerken", + "url": "/user/260442/edit?destination=/admin/people%3Fpage%3D2748" + }, + { + "text": "Rollen", + "url": "/user/260442/roles?destination=/admin/people%3Fpage%3D2748" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 1, + "match_candidates": [ + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_HEDWIG-SLEURINK", + "linkedin_name": "Hedwig Sleurink", + "linkedin_slug": "hedwig-sleurink-bb0a16201", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:24.864690+00:00", + "annotation_script": "annotate_match_candidates.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_users.py", + "extraction_date": "2026-01-11T17:49:11.739741+00:00", + "source_file": "users/user_260442.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_260442.json", + "original_user_id": "260442", + "migrated_at": "2026-01-11T17:49:11.739751+00:00", + "migration_script": "migrate_wcms_users.py", + "migration_version": "1.0" + } +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_INA-DIJKMAN-a7d1c92d_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_INA-DIJKMAN-a7d1c92d_20260115_114918.json new file mode 100644 index 0000000000..0ddbf164fd --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_INA-DIJKMAN-a7d1c92d_20260115_114918.json @@ -0,0 +1,385 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_INA-DIJKMAN-a7d1c92d", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "INA", + "DIJKMAN" + ], + "collision_uuid": "a7d1c92d" + }, + "name": "Ina Dijkman", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "229438", + "username": "Wilhelmina Dijkman", + "username_url": "/user/229438", + "abs_id": "110.1006412", + "crm_id": "7dddd3be-153f-eb11-8135-e9d8a6aacc90" + }, + "contact_details": { + "email": "idijkman1@gmail.com", + "email_domain": "gmail.com" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "di 15-12-2020 - 21:40", + "last_access": "5 jaar ago", + "operations": [ + { + "text": "Bewerken", + "url": "/user/229438/edit?destination=/admin/people%3Fpage%3D3350" + }, + { + "text": "Rollen", + "url": "/user/229438/roles?destination=/admin/people%3Fpage%3D3350" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 3, + "match_candidates": [ + { + "linkedin_ppid": "ID_NL-ZH-LEI_197X_NL-ZH-TH_XXXX_INA-DIJKMAN", + "linkedin_name": "Ina Dijkman", + "linkedin_slug": "ina-dijkman-aa2a4115", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": true, + "review_decision": "match", + "reviewed_by": "reviewer", + "reviewed_at": "2026-01-13T11:23:38.729091+00:00" + }, + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_INA-DIJKMAN", + "linkedin_name": { + "full_name": "Ina Dijkman", + "display_name": "Ina Dijkman", + "name_romanized": null, + "name_tokens": [ + "INA", + "DIJKMAN" + ], + "source": "linkedin_profile" + }, + "linkedin_slug": "ina-dijkman-aa2a4115", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": true, + "review_decision": "match", + "reviewed_by": "reviewer", + "reviewed_at": "2026-01-13T12:35:20.997617+00:00" + }, + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_INGEBORG-DIJKMAN", + "linkedin_name": "Ingeborg Dijkman", + "linkedin_slug": "ingeborg-dijkman-abb8b03", + "confidence_score": 0.51, + "match_signals": [ + "strong_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:24.861354+00:00", + "annotation_script": "annotate_match_candidates.py", + "resolved": true, + "resolved_linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_INA-DIJKMAN", + "resolved_linkedin_slug": "ina-dijkman-aa2a4115", + "resolution_confidence": 0.65, + "resolution_signals": [ + "email_name_parts", + "exact_name_match" + ], + "resolution_decision": "match", + "resolved_by": "reviewer", + "resolved_at": "2026-01-13T12:35:20.997617+00:00", + "merge_timestamp": "2026-01-15T10:49:18.547217+00:00", + "merge_script": "merge_reviewed_profiles.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms", + "linkedin" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_users.py", + "extraction_date": "2026-01-11T17:34:06.042520+00:00", + "source_file": "users/user_229438.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_229438.json", + "original_user_id": "229438", + "migrated_at": "2026-01-11T17:34:06.042527+00:00", + "migration_script": "migrate_wcms_users.py", + "migration_version": "1.0" + }, + "profile_data": { + "headline": "Hoofd Dienstverlening bij Nationaal Archief", + "location": "The Hague, South Holland, Netherlands (NL)", + "about": "Total Experience: 24 years and 7 months", + "experience": [ + { + "title": "Hoofd Dienstverlening", + "company": "Nationaal Archief", + "date_range": "Jan 2013 - Present • 12 years and 9 months" + }, + { + "title": "Hoofd Afdeling Digitale Archiefdiensten A.i.", + "company": "Nationaal Archief", + "date_range": "Jan 2019 - Oct 2020 • 1 year and 9 months", + "location": "Den Haag en omgeving, Nederland" + }, + { + "title": "Stuurgroep Netwerk Oorlogsbronnen", + "company": "Netwerk Oorlogsbronnen", + "date_range": "Sep 2016 - Jul 2024 • 7 years and 10 months", + "location": "Amsterdam en omgeving, Nederland" + }, + { + "title": "Voorzitter Domeingroep Zichtbaar", + "company": "Netwerk Digitaal Erfgoed", + "date_range": "May 2019 - Jun 2020 • 1 year and 1 month", + "location": "Den Haag en omgeving, Nederland" + }, + { + "title": "Kwartiermaker Het Flevolands Archief", + "company": "Nieuw Land Erfgoedcentrum", + "date_range": "Oct 2016 - Jul 2017 • 9 months", + "location": "Lelystad, Provincie Flevoland, Nederland", + "description": "Klus afgerond, Het Flevolands Archief is een feit." + }, + { + "title": "Waarnemend Hoofd Dienstverlening", + "company": "Nationaal Archief", + "date_range": "Jun 2011 - Jan 2013 • 1 year and 7 months", + "location": "Den Haag" + }, + { + "title": "Programmamanager Webteam", + "company": "Nationaal Archief", + "date_range": "May 2009 - Jan 2013 • 3 years and 8 months", + "location": "Het programma is samengevoegd met de afdeling Dienstverlening" + }, + { + "title": "Medewerker Presentatie", + "company": "nationaal archief", + "date_range": "Jan 2007 - Jan 2008 • 1 year" + } + ], + "education": [ + { + "degree": "Kunstgeschiedenis", + "institution": "Leiden University", + "date_range": "1996 - 2002 • 6 years" + } + ], + "profile_image_url": "https://media.licdn.com/dms/image/v2/C4D03AQHpMjgdL3isIQ/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1516574333634?e=2147483647&v=beta&t=7PWimh3YhOMwJXONyWt8bD5PeVX8da63HlQPXTCrz-s", + "linkedin_url": "https://www.linkedin.com/in/ina-dijkman-aa2a4115" + }, + "affiliations": [ + { + "custodian_name": "Nationaal Archief", + "custodian_slug": "nationaal-archief", + "role_title": "Hoofd Dienstverlening bij Nationaal Archief", + "affiliation_provenance": { + "source": "LinkedIn company people page", + "source_url": "https://www.linkedin.com/in/ina-dijkman-aa2a4115", + "retrieved_on": "2025-12-10T15:04:12.140000+00:00", + "retrieval_agent": "extract_persons_with_provenance.py" + } + } + ], + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "A" + ], + "rationale": "Identified as staff at Nationaal Archief" + }, + "web_claims": [ + { + "claim_type": "legal_name_initials", + "claim_value": "W.E. (Ina) Dijkman", + "source_url": "https://www.nationaalarchief.nl/over-het-na/organisatie/directie-en-afdelingen", + "retrieved_on": "2026-01-10T00:15:00Z", + "retrieval_agent": "opencode-claude-sonnet-4", + "text_fragment": "Mw. W.E. (Ina) Dijkman info@nationaalarchief.nl 070 - 3315400", + "verification": { + "status": "verified", + "last_verified": "2026-01-10T00:15:00Z" + } + }, + { + "claim_type": "position", + "claim_value": "Hoofd Dienstverlening, Nationaal Archief", + "source_url": "https://www.nationaalarchief.nl/over-het-na/organisatie/directie-en-afdelingen", + "retrieved_on": "2026-01-10T00:15:00Z", + "retrieval_agent": "opencode-claude-sonnet-4", + "text_fragment": "Mw. W.E. (Ina) Dijkman info@nationaalarchief.nl 070 - 3315400", + "verification": { + "status": "verified", + "last_verified": "2026-01-10T00:15:00Z" + } + }, + { + "claim_type": "role_description", + "claim_value": "Manages public services making almost 1000 years of Dutch history accessible", + "source_url": "https://thecuriousnetwork.nl/nieuws/tpost/2bt8yf8ct1-wat-is-de-inhoud-interessant-maar-ook-wa", + "retrieved_on": "2026-01-10T00:15:00Z", + "retrieval_agent": "opencode-claude-sonnet-4", + "text_fragment": "Duizend jaar geschiedenis Ina Dijkman zorgt dat bijna duizend jaar geschiedenis van Nederland toegankelijk is voor iedereen die dat wil. Als zij instapt als deelnemer van Trading Places is zij bij het Nationaal Archief leidinggevende van de afdeling Dienstverlening: het contact naar de buitenwereld.", + "verification": { + "status": "verified", + "last_verified": "2026-01-10T00:15:00Z" + } + }, + { + "claim_type": "professional_development", + "claim_value": "Participated in Trading Places program, temporarily served at Kadaster as afdelingshoofd", + "source_url": "https://thecuriousnetwork.nl/nieuws/tpost/2bt8yf8ct1-wat-is-de-inhoud-interessant-maar-ook-wa", + "retrieved_on": "2026-01-10T00:15:00Z", + "retrieval_agent": "opencode-claude-sonnet-4", + "text_fragment": "Kadaster Bij de start van het programma matcht Ina Dijkman zichzelf met een leidinggevende rol bij het Kadaster. Hier wordt zij voor een half jaar afdelingshoofd van een afdeling die zich bezighoudt met het de ontwikkeling product en proces innovatie op het terrein van geo- en vastgoedinformatie.", + "verification": { + "status": "verified", + "last_verified": "2026-01-10T00:15:00Z" + } + }, + { + "claim_type": "achievement", + "claim_value": "Established Het Flevolands Archief as Kwartiermaker", + "source_url": "https://www.linkedin.com/in/ina-dijkman-aa2a4115", + "retrieved_on": "2026-01-10T00:15:00Z", + "retrieval_agent": "opencode-claude-sonnet-4", + "text_fragment": "Klus afgerond, Het Flevolands Archief is een feit.", + "verification": { + "status": "verified", + "last_verified": "2026-01-10T00:15:00Z" + } + }, + { + "claim_type": "event_speaker", + "claim_value": "Opened event at Nationaal Archief on innovative and inspiring entrepreneurship", + "source_url": "https://www.multicultureelnetwerkrijksambtenaren.nl/event/innovatief-en-inspirerend-ondernemerschap/", + "retrieved_on": "2026-01-10T00:15:00Z", + "retrieval_agent": "opencode-claude-sonnet-4", + "text_fragment": "14.30 uur Opening en Welkomstwoord door het Hoofd van de afdeling Dienstverlening van het Nationaal Archief, Ina Dijkman", + "verification": { + "status": "verified", + "last_verified": "2026-01-10T00:15:00Z" + } + }, + { + "claim_type": "project_involvement", + "claim_value": "Key role in CABR (Centraal Archief Bijzondere Rechtspleging) online access project - largest war archive in Netherlands", + "source_url": "https://www.linkedin.com/posts/ina-dijkman-aa2a4115_vandaag-in-dagblad-trouw-een-redactioneel-activity-7232653918210588673-uj3m", + "retrieved_on": "2026-01-10T00:15:00Z", + "retrieval_agent": "opencode-claude-sonnet-4", + "text_fragment": "Met verschillende stappen en veel overleg werken we samen aan een bijzonder en belangrijk project. Informatie die voor velen belangrijk is zo goed mogelijk toegankelijk maken.", + "verification": { + "status": "verified", + "last_verified": "2026-01-10T00:15:00Z" + } + }, + { + "claim_type": "education", + "claim_value": "Kunstgeschiedenis (Art History), Leiden University, 1996-2002", + "source_url": "https://www.linkedin.com/in/ina-dijkman-aa2a4115", + "retrieved_on": "2026-01-10T00:15:00Z", + "retrieval_agent": "opencode-claude-sonnet-4", + "text_fragment": "Kunstgeschiedenis, Leiden University, 1996 - 2002 • 6 years", + "verification": { + "status": "verified", + "last_verified": "2026-01-10T00:15:00Z" + } + }, + { + "claim_type": "linkedin_url", + "claim_value": "https://www.linkedin.com/in/ina-dijkman-aa2a4115", + "source_url": "https://www.linkedin.com/company/nationaal-archief/people/", + "retrieved_on": "2025-12-10T15:04:12.140000+00:00", + "statement_created_at": "2026-01-09T22:46:01.399518+00:00", + "source_archived_at": "2025-12-10T15:04:12.140000+00:00", + "xpath": "/html[1]/head[1]/meta[1]/meta[2]/meta[3]/meta[4]/meta[5]/meta[6]/meta[7]/meta[8]/meta[9]/meta[10]/meta[11]/meta[12]/meta[13]/meta[14]/link[1]/link[2]/link[3]/link[4]/link[5]/link[6]/link[7]/meta[15]/meta[16]/meta[17]/meta[18]/meta[19]/meta[20]/meta[21]/meta[22]/meta[23]/meta[24]/meta[25]/meta[26]/link[8]/link[9]/link[10]/link[11]/link[12]/meta[27]/meta[28]/meta[29]/meta[30]/meta[31]/meta[32]/meta[33]/meta[34]/meta[35]/meta[36]/meta[37]/meta[38]/meta[39]/meta[40]/meta[41]/meta[42]/meta[43]/meta[44]/meta[45]/meta[46]/meta[47]/meta[48]/meta[49]/meta[50]/meta[51]/meta[52]/meta[53]/meta[54]/meta[55]/meta[56]/meta[57]/meta[58]/meta[59]/meta[60]/meta[61]/meta[62]/meta[63]/meta[64]/meta[65]/meta[66]/meta[67]/meta[68]/meta[69]/meta[70]/meta[71]/meta[72]/meta[73]/meta[74]/meta[75]/meta[76]/meta[77]/meta[78]/meta[79]/meta[80]/meta[81]/meta[82]/meta[83]/meta[84]/meta[85]/meta[86]/meta[87]/meta[88]/meta[89]/meta[90]/meta[91]/meta[92]/meta[93]/meta[94]/meta[95]/meta[96]/meta[97]/meta[98]/meta[99]/meta[100]/meta[101]/meta[102]/meta[103]/meta[104]/meta[105]/meta[106]/meta[107]/meta[108]/meta[109]/meta[110]/meta[111]/meta[112]/meta[113]/meta[114]/meta[115]/meta[116]/meta[117]/meta[118]/meta[119]/meta[120]/meta[121]/meta[122]/meta[123]/meta[124]/meta[125]/meta[126]/meta[127]/meta[128]/meta[129]/meta[130]/meta[131]/meta[132]/meta[133]/meta[134]/meta[135]/meta[136]/meta[137]/meta[138]/meta[139]/meta[140]/meta[141]/link[13]/link[14]/meta[142]/meta[143]/link[15]/link[16]/link[17]/link[18]/link[19]/link[20]/link[21]/link[22]/link[23]/link[24]/link[25]/link[26]/link[27]/link[28]/link[29]/link[30]/link[31]/link[32]/link[33]/link[34]/link[35]/link[36]/link[37]/link[38]/link[39]/link[40]/link[41]/link[42]/link[43]/link[44]/body[1]/img[1]/img[2]/img[3]/img[4]/img[5]/img[6]/img[7]/img[8]/img[9]/img[10]/img[11]/img[12]/img[13]/img[14]/img[15]/img[16]/img[17]/img[18]/img[19]/div[28]/header[2]/div[32]/div[62]/div[63]/div[65]/div[66]/div[67]/div[87]/main[1]/div[88]/section[2]/div[124]/div[125]/div[126]/div[174]/div[175]/div[176]/ul[6]/li[33]/div[177]/li[34]/div[189]/li[35]/div[201]/li[36]/div[213]/li[37]/div[225]/li[38]/div[237]/li[39]/div[249]/li[40]/div[261]/li[41]/div[273]/li[42]/div[285]/li[43]/div[297]/li[44]/div[309]/li[45]/div[321]/li[46]/div[333]/li[47]/div[345]/li[48]/div[357]/li[49]/div[369]/li[50]/div[381]/li[51]/div[393]/li[52]/div[405]/li[53]/div[417]/li[54]/div[429]/li[55]/div[441]/li[56]/div[453]/li[57]/div[465]/li[58]/div[477]/li[59]/div[489]/li[60]/div[501]/li[61]/div[513]/li[62]/div[525]/li[63]/div[537]/li[64]/div[549]/li[65]/div[561]/li[66]/div[573]/li[67]/div[585]/li[68]/div[597]/li[69]/div[609]/li[70]/div[621]/li[71]/div[633]/li[72]/div[645]/li[73]/div[657]/li[74]/div[669]/li[75]/div[681]/li[76]/div[693]/li[77]/div[705]/li[78]/div[717]/li[79]/div[729]/li[80]/div[741]/li[81]/div[753]/li[82]/div[765]/li[83]/div[777]/li[84]/div[789]/li[85]/div[801]/li[86]/div[813]/li[87]/div[825]/li[88]/div[837]/li[89]/div[849]/li[90]/div[861]/li[91]/div[873]/li[92]/div[885]/li[93]/div[897]/li[94]/div[909]/li[95]/div[921]/li[96]/div[933]/li[97]/div[945]/li[98]/div[957]/li[99]/div[969]/li[100]/div[981]/li[101]/div[993]/li[102]/div[1005]/li[103]/div[1017]/li[104]/div[1029]/li[105]/div[1041]/li[106]/div[1053]/section[77]/img[170]/div[1054]/div[1055]/div[1056]/a[170]", + "html_file": "/Volumes/KINGSTON/data/glam/data/custodian/person/affiliated/manual/(8) Nationaal Archief_ People _ LinkedIn.html", + "xpath_match_score": 1.0, + "retrieval_agent": "extract_persons_with_provenance.py" + }, + { + "claim_type": "full_name", + "claim_value": "Ina Dijkman", + "source_url": "https://www.linkedin.com/company/nationaal-archief/people/", + "retrieved_on": "2025-12-10T15:04:12.140000+00:00", + "statement_created_at": "2026-01-09T22:46:01.399541+00:00", + "source_archived_at": "2025-12-10T15:04:12.140000+00:00", + "xpath": "/html[1]/head[1]/meta[1]/meta[2]/meta[3]/meta[4]/meta[5]/meta[6]/meta[7]/meta[8]/meta[9]/meta[10]/meta[11]/meta[12]/meta[13]/meta[14]/link[1]/link[2]/link[3]/link[4]/link[5]/link[6]/link[7]/meta[15]/meta[16]/meta[17]/meta[18]/meta[19]/meta[20]/meta[21]/meta[22]/meta[23]/meta[24]/meta[25]/meta[26]/link[8]/link[9]/link[10]/link[11]/link[12]/meta[27]/meta[28]/meta[29]/meta[30]/meta[31]/meta[32]/meta[33]/meta[34]/meta[35]/meta[36]/meta[37]/meta[38]/meta[39]/meta[40]/meta[41]/meta[42]/meta[43]/meta[44]/meta[45]/meta[46]/meta[47]/meta[48]/meta[49]/meta[50]/meta[51]/meta[52]/meta[53]/meta[54]/meta[55]/meta[56]/meta[57]/meta[58]/meta[59]/meta[60]/meta[61]/meta[62]/meta[63]/meta[64]/meta[65]/meta[66]/meta[67]/meta[68]/meta[69]/meta[70]/meta[71]/meta[72]/meta[73]/meta[74]/meta[75]/meta[76]/meta[77]/meta[78]/meta[79]/meta[80]/meta[81]/meta[82]/meta[83]/meta[84]/meta[85]/meta[86]/meta[87]/meta[88]/meta[89]/meta[90]/meta[91]/meta[92]/meta[93]/meta[94]/meta[95]/meta[96]/meta[97]/meta[98]/meta[99]/meta[100]/meta[101]/meta[102]/meta[103]/meta[104]/meta[105]/meta[106]/meta[107]/meta[108]/meta[109]/meta[110]/meta[111]/meta[112]/meta[113]/meta[114]/meta[115]/meta[116]/meta[117]/meta[118]/meta[119]/meta[120]/meta[121]/meta[122]/meta[123]/meta[124]/meta[125]/meta[126]/meta[127]/meta[128]/meta[129]/meta[130]/meta[131]/meta[132]/meta[133]/meta[134]/meta[135]/meta[136]/meta[137]/meta[138]/meta[139]/meta[140]/meta[141]/link[13]/link[14]/meta[142]/meta[143]/link[15]/link[16]/link[17]/link[18]/link[19]/link[20]/link[21]/link[22]/link[23]/link[24]/link[25]/link[26]/link[27]/link[28]/link[29]/link[30]/link[31]/link[32]/link[33]/link[34]/link[35]/link[36]/link[37]/link[38]/link[39]/link[40]/link[41]/link[42]/link[43]/link[44]/body[1]/img[1]/img[2]/img[3]/img[4]/img[5]/img[6]/img[7]/img[8]/img[9]/img[10]/img[11]/img[12]/img[13]/img[14]/img[15]/img[16]/img[17]/img[18]/img[19]/div[28]/header[2]/div[32]/div[62]/div[63]/div[65]/div[66]/div[67]/div[87]/main[1]/div[88]/section[2]/div[124]/div[125]/div[126]/div[174]/div[175]/div[176]/ul[6]/li[33]/div[177]/li[34]/div[189]/li[35]/div[201]/li[36]/div[213]/li[37]/div[225]/li[38]/div[237]/li[39]/div[249]/li[40]/div[261]/li[41]/div[273]/li[42]/div[285]/li[43]/div[297]/li[44]/div[309]/li[45]/div[321]/li[46]/div[333]/li[47]/div[345]/li[48]/div[357]/li[49]/div[369]/li[50]/div[381]/li[51]/div[393]/li[52]/div[405]/li[53]/div[417]/li[54]/div[429]/li[55]/div[441]/li[56]/div[453]/li[57]/div[465]/li[58]/div[477]/li[59]/div[489]/li[60]/div[501]/li[61]/div[513]/li[62]/div[525]/li[63]/div[537]/li[64]/div[549]/li[65]/div[561]/li[66]/div[573]/li[67]/div[585]/li[68]/div[597]/li[69]/div[609]/li[70]/div[621]/li[71]/div[633]/li[72]/div[645]/li[73]/div[657]/li[74]/div[669]/li[75]/div[681]/li[76]/div[693]/li[77]/div[705]/li[78]/div[717]/li[79]/div[729]/li[80]/div[741]/li[81]/div[753]/li[82]/div[765]/li[83]/div[777]/li[84]/div[789]/li[85]/div[801]/li[86]/div[813]/li[87]/div[825]/li[88]/div[837]/li[89]/div[849]/li[90]/div[861]/li[91]/div[873]/li[92]/div[885]/li[93]/div[897]/li[94]/div[909]/li[95]/div[921]/li[96]/div[933]/li[97]/div[945]/li[98]/div[957]/li[99]/div[969]/li[100]/div[981]/li[101]/div[993]/li[102]/div[1005]/li[103]/div[1017]/li[104]/div[1029]/li[105]/div[1041]/li[106]/div[1053]/section[77]/img[170]/div[1054]/div[1055]/div[1056]/a[170]/img[171]/@alt", + "html_file": "/Volumes/KINGSTON/data/glam/data/custodian/person/affiliated/manual/(8) Nationaal Archief_ People _ LinkedIn.html", + "xpath_match_score": 1.0, + "retrieval_agent": "extract_persons_with_provenance.py" + }, + { + "claim_type": "connection_degree", + "claim_value": "2nd", + "source_url": "https://www.linkedin.com/company/nationaal-archief/people/", + "retrieved_on": "2025-12-10T15:04:12.140000+00:00", + "statement_created_at": "2026-01-09T22:46:01.399610+00:00", + "source_archived_at": "2025-12-10T15:04:12.140000+00:00", + "xpath": "/html[1]/head[1]/meta[1]/meta[2]/meta[3]/meta[4]/meta[5]/meta[6]/meta[7]/meta[8]/meta[9]/meta[10]/meta[11]/meta[12]/meta[13]/meta[14]/link[1]/link[2]/link[3]/link[4]/link[5]/link[6]/link[7]/meta[15]/meta[16]/meta[17]/meta[18]/meta[19]/meta[20]/meta[21]/meta[22]/meta[23]/meta[24]/meta[25]/meta[26]/link[8]/link[9]/link[10]/link[11]/link[12]/meta[27]/meta[28]/meta[29]/meta[30]/meta[31]/meta[32]/meta[33]/meta[34]/meta[35]/meta[36]/meta[37]/meta[38]/meta[39]/meta[40]/meta[41]/meta[42]/meta[43]/meta[44]/meta[45]/meta[46]/meta[47]/meta[48]/meta[49]/meta[50]/meta[51]/meta[52]/meta[53]/meta[54]/meta[55]/meta[56]/meta[57]/meta[58]/meta[59]/meta[60]/meta[61]/meta[62]/meta[63]/meta[64]/meta[65]/meta[66]/meta[67]/meta[68]/meta[69]/meta[70]/meta[71]/meta[72]/meta[73]/meta[74]/meta[75]/meta[76]/meta[77]/meta[78]/meta[79]/meta[80]/meta[81]/meta[82]/meta[83]/meta[84]/meta[85]/meta[86]/meta[87]/meta[88]/meta[89]/meta[90]/meta[91]/meta[92]/meta[93]/meta[94]/meta[95]/meta[96]/meta[97]/meta[98]/meta[99]/meta[100]/meta[101]/meta[102]/meta[103]/meta[104]/meta[105]/meta[106]/meta[107]/meta[108]/meta[109]/meta[110]/meta[111]/meta[112]/meta[113]/meta[114]/meta[115]/meta[116]/meta[117]/meta[118]/meta[119]/meta[120]/meta[121]/meta[122]/meta[123]/meta[124]/meta[125]/meta[126]/meta[127]/meta[128]/meta[129]/meta[130]/meta[131]/meta[132]/meta[133]/meta[134]/meta[135]/meta[136]/meta[137]/meta[138]/meta[139]/meta[140]/meta[141]/link[13]/link[14]/meta[142]/meta[143]/link[15]/link[16]/link[17]/link[18]/link[19]/link[20]/link[21]/link[22]/link[23]/link[24]/link[25]/link[26]/link[27]/link[28]/link[29]/link[30]/link[31]/link[32]/link[33]/link[34]/link[35]/link[36]/link[37]/link[38]/link[39]/link[40]/link[41]/link[42]/link[43]/link[44]/body[1]/img[1]/img[2]/img[3]/img[4]/img[5]/img[6]/img[7]/img[8]/img[9]/img[10]/img[11]/img[12]/img[13]/img[14]/img[15]/img[16]/img[17]/img[18]/img[19]/div[28]/header[2]/div[32]/div[62]/div[63]/div[65]/div[66]/div[67]/div[87]/main[1]/div[88]/section[2]/div[124]/div[125]/div[126]/div[174]/div[175]/div[176]/ul[6]/li[33]/div[177]/li[34]/div[189]/li[35]/div[201]/li[36]/div[213]/li[37]/div[225]/li[38]/div[237]/li[39]/div[249]/li[40]/div[261]/li[41]/div[273]/li[42]/div[285]/li[43]/div[297]/li[44]/div[309]/li[45]/div[321]/li[46]/div[333]/li[47]/div[345]/li[48]/div[357]/li[49]/div[369]/li[50]/div[381]/li[51]/div[393]/li[52]/div[405]/li[53]/div[417]/li[54]/div[429]/li[55]/div[441]/li[56]/div[453]/li[57]/div[465]/li[58]/div[477]/li[59]/div[489]/li[60]/div[501]/li[61]/div[513]/li[62]/div[525]/li[63]/div[537]/li[64]/div[549]/li[65]/div[561]/li[66]/div[573]/li[67]/div[585]/li[68]/div[597]/li[69]/div[609]/li[70]/div[621]/li[71]/div[633]/li[72]/div[645]/li[73]/div[657]/li[74]/div[669]/li[75]/div[681]/li[76]/div[693]/li[77]/div[705]/li[78]/div[717]/li[79]/div[729]/li[80]/div[741]/li[81]/div[753]/li[82]/div[765]/li[83]/div[777]/li[84]/div[789]/li[85]/div[801]/li[86]/div[813]/li[87]/div[825]/li[88]/div[837]/li[89]/div[849]/li[90]/div[861]/li[91]/div[873]/li[92]/div[885]/li[93]/div[897]/li[94]/div[909]/li[95]/div[921]/li[96]/div[933]/li[97]/div[945]/li[98]/div[957]/li[99]/div[969]/li[100]/div[981]/li[101]/div[993]/li[102]/div[1005]/li[103]/div[1017]/li[104]/div[1029]/li[105]/div[1041]/li[106]/div[1053]/section[77]/img[170]/div[1054]/div[1055]/div[1056]/div[1057]/div[1060]", + "html_file": "/Volumes/KINGSTON/data/glam/data/custodian/person/affiliated/manual/(8) Nationaal Archief_ People _ LinkedIn.html", + "xpath_match_score": 1.0, + "retrieval_agent": "extract_persons_with_provenance.py" + }, + { + "claim_type": "headline", + "claim_value": "Hoofd Dienstverlening bij Nationaal Archief", + "source_url": "https://www.linkedin.com/company/nationaal-archief/people/", + "retrieved_on": "2025-12-10T15:04:12.140000+00:00", + "statement_created_at": "2026-01-09T22:46:01.399642+00:00", + "source_archived_at": "2025-12-10T15:04:12.140000+00:00", + "xpath": "/html[1]/head[1]/meta[1]/meta[2]/meta[3]/meta[4]/meta[5]/meta[6]/meta[7]/meta[8]/meta[9]/meta[10]/meta[11]/meta[12]/meta[13]/meta[14]/link[1]/link[2]/link[3]/link[4]/link[5]/link[6]/link[7]/meta[15]/meta[16]/meta[17]/meta[18]/meta[19]/meta[20]/meta[21]/meta[22]/meta[23]/meta[24]/meta[25]/meta[26]/link[8]/link[9]/link[10]/link[11]/link[12]/meta[27]/meta[28]/meta[29]/meta[30]/meta[31]/meta[32]/meta[33]/meta[34]/meta[35]/meta[36]/meta[37]/meta[38]/meta[39]/meta[40]/meta[41]/meta[42]/meta[43]/meta[44]/meta[45]/meta[46]/meta[47]/meta[48]/meta[49]/meta[50]/meta[51]/meta[52]/meta[53]/meta[54]/meta[55]/meta[56]/meta[57]/meta[58]/meta[59]/meta[60]/meta[61]/meta[62]/meta[63]/meta[64]/meta[65]/meta[66]/meta[67]/meta[68]/meta[69]/meta[70]/meta[71]/meta[72]/meta[73]/meta[74]/meta[75]/meta[76]/meta[77]/meta[78]/meta[79]/meta[80]/meta[81]/meta[82]/meta[83]/meta[84]/meta[85]/meta[86]/meta[87]/meta[88]/meta[89]/meta[90]/meta[91]/meta[92]/meta[93]/meta[94]/meta[95]/meta[96]/meta[97]/meta[98]/meta[99]/meta[100]/meta[101]/meta[102]/meta[103]/meta[104]/meta[105]/meta[106]/meta[107]/meta[108]/meta[109]/meta[110]/meta[111]/meta[112]/meta[113]/meta[114]/meta[115]/meta[116]/meta[117]/meta[118]/meta[119]/meta[120]/meta[121]/meta[122]/meta[123]/meta[124]/meta[125]/meta[126]/meta[127]/meta[128]/meta[129]/meta[130]/meta[131]/meta[132]/meta[133]/meta[134]/meta[135]/meta[136]/meta[137]/meta[138]/meta[139]/meta[140]/meta[141]/link[13]/link[14]/meta[142]/meta[143]/link[15]/link[16]/link[17]/link[18]/link[19]/link[20]/link[21]/link[22]/link[23]/link[24]/link[25]/link[26]/link[27]/link[28]/link[29]/link[30]/link[31]/link[32]/link[33]/link[34]/link[35]/link[36]/link[37]/link[38]/link[39]/link[40]/link[41]/link[42]/link[43]/link[44]/body[1]/img[1]/img[2]/img[3]/img[4]/img[5]/img[6]/img[7]/img[8]/img[9]/img[10]/img[11]/img[12]/img[13]/img[14]/img[15]/img[16]/img[17]/img[18]/img[19]/div[28]/header[2]/div[32]/div[62]/div[63]/div[65]/div[66]/div[67]/div[87]/main[1]/div[88]/section[2]/div[124]/div[125]/div[126]/div[174]/div[175]/div[176]/ul[6]/li[33]/div[177]/li[34]/div[189]/li[35]/div[201]/li[36]/div[213]/li[37]/div[225]/li[38]/div[237]/li[39]/div[249]/li[40]/div[261]/li[41]/div[273]/li[42]/div[285]/li[43]/div[297]/li[44]/div[309]/li[45]/div[321]/li[46]/div[333]/li[47]/div[345]/li[48]/div[357]/li[49]/div[369]/li[50]/div[381]/li[51]/div[393]/li[52]/div[405]/li[53]/div[417]/li[54]/div[429]/li[55]/div[441]/li[56]/div[453]/li[57]/div[465]/li[58]/div[477]/li[59]/div[489]/li[60]/div[501]/li[61]/div[513]/li[62]/div[525]/li[63]/div[537]/li[64]/div[549]/li[65]/div[561]/li[66]/div[573]/li[67]/div[585]/li[68]/div[597]/li[69]/div[609]/li[70]/div[621]/li[71]/div[633]/li[72]/div[645]/li[73]/div[657]/li[74]/div[669]/li[75]/div[681]/li[76]/div[693]/li[77]/div[705]/li[78]/div[717]/li[79]/div[729]/li[80]/div[741]/li[81]/div[753]/li[82]/div[765]/li[83]/div[777]/li[84]/div[789]/li[85]/div[801]/li[86]/div[813]/li[87]/div[825]/li[88]/div[837]/li[89]/div[849]/li[90]/div[861]/li[91]/div[873]/li[92]/div[885]/li[93]/div[897]/li[94]/div[909]/li[95]/div[921]/li[96]/div[933]/li[97]/div[945]/li[98]/div[957]/li[99]/div[969]/li[100]/div[981]/li[101]/div[993]/li[102]/div[1005]/li[103]/div[1017]/li[104]/div[1029]/li[105]/div[1041]/li[106]/div[1053]/section[77]/img[170]/div[1054]/div[1055]/div[1056]/div[1057]/div[1061]/div[1062]/div[1063]", + "html_file": "/Volumes/KINGSTON/data/glam/data/custodian/person/affiliated/manual/(8) Nationaal Archief_ People _ LinkedIn.html", + "xpath_match_score": 1.0, + "retrieval_agent": "extract_persons_with_provenance.py" + } + ], + "linkedin_slug": "ina-dijkman-aa2a4115" +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_INSOO-RADSTAKE-98fb392c_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_INSOO-RADSTAKE-98fb392c_20260115_114918.json new file mode 100644 index 0000000000..52a3b70ef7 --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_INSOO-RADSTAKE-98fb392c_20260115_114918.json @@ -0,0 +1,104 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_INSOO-RADSTAKE-98fb392c", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "INSOO", + "RADSTAKE" + ], + "collision_uuid": "98fb392c" + }, + "name": "In-Soo Radstake", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "248026", + "username": "InSooHH", + "username_url": "/user/248026", + "abs_id": "110.1028795", + "crm_id": "f0b802ac-6457-ec11-8147-805012a870bf" + }, + "contact_details": { + "email": "mail@in-soo.com", + "email_domain": "in-soo.com" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "di 07-12-2021 - 14:50", + "last_access": "3 jaar 2 maanden ago", + "operations": [ + { + "text": "Bewerken", + "url": "/user/248026/edit?destination=/admin/people%3Fpage%3D2990" + }, + { + "text": "Rollen", + "url": "/user/248026/roles?destination=/admin/people%3Fpage%3D2990" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 1, + "match_candidates": [ + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_INSOO-RADSTAKE", + "linkedin_name": "In-Soo Radstake", + "linkedin_slug": "insooradstake", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:24.942197+00:00", + "annotation_script": "annotate_match_candidates.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_users.py", + "extraction_date": "2026-01-11T17:43:08.762668+00:00", + "source_file": "users/user_248026.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_248026.json", + "original_user_id": "248026", + "migrated_at": "2026-01-11T17:43:08.762676+00:00", + "migration_script": "migrate_wcms_users.py", + "migration_version": "1.0" + } +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JACQUELINE-VAN-LEEUWEN-37715460_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JACQUELINE-VAN-LEEUWEN-37715460_20260115_114918.json new file mode 100644 index 0000000000..8fbc9abad6 --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JACQUELINE-VAN-LEEUWEN-37715460_20260115_114918.json @@ -0,0 +1,161 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JACQUELINE-VAN-LEEUWEN-37715460", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "JACQUELINE", + "VAN", + "LEEUWEN" + ], + "collision_uuid": "37715460" + }, + "name": "Jacqueline van Leeuwen", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "223464", + "username": "Jacqueline77", + "username_url": "/user/223464", + "abs_id": "110.999156", + "crm_id": "2940d3a4-93e0-ea11-812c-a66b9878f949" + }, + "contact_details": { + "email": "jacquelin77@hotmail.com", + "email_domain": "hotmail.com" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "ma 17-08-2020 - 16:12", + "last_access": "5 jaar 4 maanden ago", + "operations": [ + { + "text": "Bewerken", + "url": "/user/223464/edit?destination=/admin/people%3Fpage%3D3466" + }, + { + "text": "Rollen", + "url": "/user/223464/roles?destination=/admin/people%3Fpage%3D3466" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 5, + "match_candidates": [ + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JACQUELINE-VAN-LEEUWEN", + "linkedin_name": "Jacqueline van Leeuwen", + "linkedin_slug": "jacqueline-van-leeuwen-40a4a010", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + }, + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JAAP-LEEUWEN", + "linkedin_name": "Jaap van Leeuwen", + "linkedin_slug": "jaap-van-leeuwen-2a592314", + "confidence_score": 0.51, + "match_signals": [ + "strong_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + }, + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JURGEN-LEEUWEN", + "linkedin_name": "Jurgen van Leeuwen", + "linkedin_slug": "jurgen-van-leeuwen-22652215a", + "confidence_score": 0.51, + "match_signals": [ + "strong_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + }, + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JASMIJN-LEEUWEN", + "linkedin_name": "Jasmijn van Leeuwen", + "linkedin_slug": "jasmijn-van-leeuwen-675907308", + "confidence_score": 0.51, + "match_signals": [ + "strong_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + }, + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JEROEN-VAN-LEEUWEN", + "linkedin_name": "Jeroen van Leeuwen", + "linkedin_slug": "jeroenpvanleeuwen", + "confidence_score": 0.51, + "match_signals": [ + "strong_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:26.017326+00:00", + "annotation_script": "annotate_match_candidates.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_users.py", + "extraction_date": "2026-01-11T17:19:08.325155+00:00", + "source_file": "users/user_223464.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_223464.json", + "original_user_id": "223464", + "migrated_at": "2026-01-11T17:19:08.325166+00:00", + "migration_script": "migrate_wcms_users.py", + "migration_version": "1.0" + } +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JASPER-SLOB-c6928299_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JASPER-SLOB-c6928299_20260115_114918.json new file mode 100644 index 0000000000..3cac084558 --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JASPER-SLOB-c6928299_20260115_114918.json @@ -0,0 +1,111 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JASPER-SLOB-c6928299", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "JASPER", + "SLOB" + ], + "collision_uuid": "c6928299" + }, + "name": "Jasper Slob", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "251419", + "username": "Jasper Slob", + "username_url": "/user/251419", + "abs_id": "110.1032696", + "crm_id": "571d924d-e288-ec11-814a-e9fdc806755a" + }, + "contact_details": { + "email": "jasper.slob@nationaalarchief.nl", + "email_domain": "nationaalarchief.nl" + }, + "wcms_activity": { + "status": "Active", + "roles": [ + "Redacteur" + ], + "registered_since": "di 08-02-2022 - 14:23", + "last_access": "11 maanden ago", + "operations": [] + }, + "entity_resolution": { + "potential_linkedin_matches": 2, + "match_candidates": [ + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JASPER-SLOB", + "linkedin_name": "Jasper Slob", + "linkedin_slug": "jasper-slob-05bb6994", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + }, + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JESSIE-SLOB", + "linkedin_name": "Jessie Slob", + "linkedin_slug": "jessie-slob-00ab73310", + "confidence_score": 0.51, + "match_signals": [ + "strong_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:24.976277+00:00", + "annotation_script": "annotate_match_candidates.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_users.py", + "extraction_date": "2026-01-11T17:44:46.227162+00:00", + "source_file": "users/user_251419.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_251419.json", + "original_user_id": "251419", + "migrated_at": "2026-01-11T17:44:46.227175+00:00", + "migration_script": "migrate_wcms_users.py", + "migration_version": "1.0" + } +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JEANBAPTISTE-CLAIS-c83e8011_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JEANBAPTISTE-CLAIS-c83e8011_20260115_114918.json new file mode 100644 index 0000000000..4bffc29431 --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JEANBAPTISTE-CLAIS-c83e8011_20260115_114918.json @@ -0,0 +1,104 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JEANBAPTISTE-CLAIS-c83e8011", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "JEANBAPTISTE", + "CLAIS" + ], + "collision_uuid": "c83e8011" + }, + "name": "jean-baptiste clais", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "236731", + "username": "jbclais", + "username_url": "/user/236731", + "abs_id": "110.1015585", + "crm_id": "ee77d0fc-60a3-eb11-813b-c30266646166" + }, + "contact_details": { + "email": "jean-baptiste.clais@louvre.fr", + "email_domain": "louvre.fr" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "do 22-04-2021 - 13:50", + "last_access": "4 jaar 8 maanden ago", + "operations": [ + { + "text": "Bewerken", + "url": "/user/236731/edit?destination=/admin/people%3Fpage%3D3207" + }, + { + "text": "Rollen", + "url": "/user/236731/roles?destination=/admin/people%3Fpage%3D3207" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 1, + "match_candidates": [ + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JEANBAPTISTE-CLAIS", + "linkedin_name": "Jean-Baptiste Clais", + "linkedin_slug": "jean-baptiste-clais", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:25.002895+00:00", + "annotation_script": "annotate_match_candidates.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_users.py", + "extraction_date": "2026-01-11T17:37:30.683163+00:00", + "source_file": "users/user_236731.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_236731.json", + "original_user_id": "236731", + "migrated_at": "2026-01-11T17:37:30.683173+00:00", + "migration_script": "migrate_wcms_users.py", + "migration_version": "1.0" + } +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JITSKE-HELL-cf5f8ce8_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JITSKE-HELL-cf5f8ce8_20260115_114918.json new file mode 100644 index 0000000000..8e44873658 --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JITSKE-HELL-cf5f8ce8_20260115_114918.json @@ -0,0 +1,104 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JITSKE-HELL-cf5f8ce8", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "JITSKE", + "HELL" + ], + "collision_uuid": "cf5f8ce8" + }, + "name": "Jitske Hell", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "264204", + "username": "Jitske Hell", + "username_url": "/user/264204", + "abs_id": "110.1047955", + "crm_id": "d8e1c577-5e6a-ed11-8151-977a4cb1ef80" + }, + "contact_details": { + "email": "j.hell@hetutrechtsarchief.nl", + "email_domain": "hetutrechtsarchief.nl" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "di 22-11-2022 - 13:09", + "last_access": "3 jaar 1 maand ago", + "operations": [ + { + "text": "Bewerken", + "url": "/user/264204/edit?destination=/admin/people%3Fpage%3D2674" + }, + { + "text": "Rollen", + "url": "/user/264204/roles?destination=/admin/people%3Fpage%3D2674" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 1, + "match_candidates": [ + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_JITSKE-HELL", + "linkedin_name": "Jitske Hell", + "linkedin_slug": "jitske-hell-3a4370238", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:25.260740+00:00", + "annotation_script": "annotate_match_candidates.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_users.py", + "extraction_date": "2026-01-11T17:50:57.186026+00:00", + "source_file": "users/user_264204.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_264204.json", + "original_user_id": "264204", + "migrated_at": "2026-01-11T17:50:57.186034+00:00", + "migration_script": "migrate_wcms_users.py", + "migration_version": "1.0" + } +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_LAURA-VAN-HASSELT-597e7524_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_LAURA-VAN-HASSELT-597e7524_20260115_114918.json new file mode 100644 index 0000000000..65acf06b19 --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_LAURA-VAN-HASSELT-597e7524_20260115_114918.json @@ -0,0 +1,105 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_LAURA-VAN-HASSELT-597e7524", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "LAURA", + "VAN", + "HASSELT" + ], + "collision_uuid": "597e7524" + }, + "name": "Laura van Hasselt", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "239065", + "username": "Van Hasselt", + "username_url": "/user/239065", + "abs_id": "110.1018247", + "crm_id": "e7120b8d-80b8-eb11-813e-e5929d7ab1c5" + }, + "contact_details": { + "email": "l.h.vanhasselt@uva.nl", + "email_domain": "uva.nl" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "wo 19-05-2021 - 10:59", + "last_access": "4 jaar 2 maanden ago", + "operations": [ + { + "text": "Bewerken", + "url": "/user/239065/edit?destination=/admin/people%3Fpage%3D3161" + }, + { + "text": "Rollen", + "url": "/user/239065/roles?destination=/admin/people%3Fpage%3D3161" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 1, + "match_candidates": [ + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_LAURA-HASSELT", + "linkedin_name": "Laura Van Hasselt", + "linkedin_slug": "laura-van-hasselt-0214b913", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:25.609083+00:00", + "annotation_script": "annotate_match_candidates.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_users.py", + "extraction_date": "2026-01-11T17:38:35.998112+00:00", + "source_file": "users/user_239065.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_239065.json", + "original_user_id": "239065", + "migrated_at": "2026-01-11T17:38:35.998120+00:00", + "migration_script": "migrate_wcms_users.py", + "migration_version": "1.0" + } +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_LEONIE-BERGWERFFKORNMANN-92830b6e_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_LEONIE-BERGWERFFKORNMANN-92830b6e_20260115_114918.json new file mode 100644 index 0000000000..662a28059e --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_LEONIE-BERGWERFFKORNMANN-92830b6e_20260115_114918.json @@ -0,0 +1,104 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_LEONIE-BERGWERFFKORNMANN-92830b6e", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "LEONIE", + "BERGWERFFKORNMANN" + ], + "collision_uuid": "92830b6e" + }, + "name": "Leonie Bergwerff-Kornmann", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "175063", + "username": "Leonie76", + "username_url": "/user/175063", + "abs_id": "110.331744", + "crm_id": "b5b5ca67-0b11-407b-a7f1-2b2e7cffbff0" + }, + "contact_details": { + "email": "l_kornmann@hotmail.com", + "email_domain": "hotmail.com" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "do 03-12-2015 - 14:05", + "last_access": "2 maanden ago", + "operations": [ + { + "text": "Bewerken", + "url": "/user/175063/edit?destination=/admin/people%3Fpage%3D4167" + }, + { + "text": "Rollen", + "url": "/user/175063/roles?destination=/admin/people%3Fpage%3D4167" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 1, + "match_candidates": [ + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_LEONIE-BERGWERFFKORNMANN", + "linkedin_name": "Leonie Bergwerff-Kornmann", + "linkedin_slug": "leonie-bergwerff-kornmann-86654012", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:25.256565+00:00", + "annotation_script": "annotate_match_candidates.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_users.py", + "extraction_date": "2026-01-11T17:10:05.317062+00:00", + "source_file": "users/user_175063.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_175063.json", + "original_user_id": "175063", + "migrated_at": "2026-01-11T17:10:05.317064+00:00", + "migration_script": "migrate_wcms_users.py", + "migration_version": "1.0" + } +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_LOUIS-VELDHUIS-560850c5_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_LOUIS-VELDHUIS-560850c5_20260115_114918.json new file mode 100644 index 0000000000..b997645a70 --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_LOUIS-VELDHUIS-560850c5_20260115_114918.json @@ -0,0 +1,104 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_LOUIS-VELDHUIS-560850c5", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "LOUIS", + "VELDHUIS" + ], + "collision_uuid": "560850c5" + }, + "name": "Louis Veldhuis", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "190563", + "username": "LOUIS VELDHUIS", + "username_url": "/user/190563", + "abs_id": "110.967671", + "crm_id": "a57110eb-0664-e811-80ff-9f86b66faf29" + }, + "contact_details": { + "email": "louis.1952@hotmail.com", + "email_domain": "hotmail.com" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "wo 30-05-2018 - 14:42", + "last_access": "7 jaar 4 maanden ago", + "operations": [ + { + "text": "Bewerken", + "url": "/user/190563/edit?destination=/admin/people%3Fpage%3D3888" + }, + { + "text": "Rollen", + "url": "/user/190563/roles?destination=/admin/people%3Fpage%3D3888" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 1, + "match_candidates": [ + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_LOUIS-VELDHUIS", + "linkedin_name": "Louis Veldhuis", + "linkedin_slug": "louis-veldhuis-898377148", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:25.219677+00:00", + "annotation_script": "annotate_match_candidates.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_users.py", + "extraction_date": "2026-01-11T17:12:41.174877+00:00", + "source_file": "users/user_190563.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_190563.json", + "original_user_id": "190563", + "migrated_at": "2026-01-11T17:12:41.174885+00:00", + "migration_script": "migrate_wcms_users.py", + "migration_version": "1.0" + } +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MACHTELD-VAN-VOSKUILEN-b675cf4d_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MACHTELD-VAN-VOSKUILEN-b675cf4d_20260115_114918.json new file mode 100644 index 0000000000..be889e7ecb --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MACHTELD-VAN-VOSKUILEN-b675cf4d_20260115_114918.json @@ -0,0 +1,105 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MACHTELD-VAN-VOSKUILEN-b675cf4d", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "MACHTELD", + "VAN", + "VOSKUILEN" + ], + "collision_uuid": "b675cf4d" + }, + "name": "Machteld van Voskuilen", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "246249", + "username": "MachteldV", + "username_url": "/user/246249", + "abs_id": "110.1026785", + "crm_id": "74364c91-c93b-ec11-8145-d317fc4f8963" + }, + "contact_details": { + "email": "m.van.voskuilen@niod.knaw.nl", + "email_domain": "niod.knaw.nl" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "di 02-11-2021 - 11:42", + "last_access": "1 maand ago", + "operations": [ + { + "text": "Bewerken", + "url": "/user/246249/edit?destination=/admin/people%3Fpage%3D3024" + }, + { + "text": "Rollen", + "url": "/user/246249/roles?destination=/admin/people%3Fpage%3D3024" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 1, + "match_candidates": [ + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MACHTELD-VOSKUILEN", + "linkedin_name": "Machteld Van Voskuilen", + "linkedin_slug": "machteld-van-voskuilen-6b073858", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:25.876327+00:00", + "annotation_script": "annotate_match_candidates.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_users.py", + "extraction_date": "2026-01-11T17:42:13.602252+00:00", + "source_file": "users/user_246249.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_246249.json", + "original_user_id": "246249", + "migrated_at": "2026-01-11T17:42:13.602294+00:00", + "migration_script": "migrate_wcms_users.py", + "migration_version": "1.0" + } +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARIJN-KOOLEN-2910be1c_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARIJN-KOOLEN-2910be1c_20260115_114918.json new file mode 100644 index 0000000000..b7d3ed0918 --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARIJN-KOOLEN-2910be1c_20260115_114918.json @@ -0,0 +1,119 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARIJN-KOOLEN-2910be1c", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "MARIJN", + "KOOLEN" + ], + "collision_uuid": "2910be1c" + }, + "name": "Marijn Koolen", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "271339", + "username": "marijnkoolen", + "username_url": "/user/271339", + "abs_id": "110.1056253", + "crm_id": "5c53d239-22bf-ed11-815b-ee2fefaf505f" + }, + "contact_details": { + "email": "marijn.koolen@gmail.com", + "email_domain": "gmail.com" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "vr 10-03-2023 - 10:02", + "last_access": "2 jaar 9 maanden ago", + "operations": [ + { + "text": "Bewerken", + "url": "/user/271339/edit?destination=/admin/people%3Fpage%3D2533" + }, + { + "text": "Rollen", + "url": "/user/271339/roles?destination=/admin/people%3Fpage%3D2533" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 2, + "wikipedia_url": null, + "match_candidates": [ + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MARIJN-KOOLEN", + "linkedin_name": "Marijn Koolen", + "linkedin_slug": "marijnkoolen", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + }, + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MONIQUE-KOOLEN", + "linkedin_name": "Monique Koolen", + "linkedin_slug": "monique-koolen-a094991a", + "confidence_score": 0.51, + "match_signals": [ + "strong_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:24.795126+00:00", + "annotation_script": "annotate_match_candidates.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_resume.py", + "extraction_date": "2026-01-11T20:47:11.252514+00:00", + "source_file": "users/user_271339.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_271339.json", + "original_user_id": "271339", + "migrated_at": "2026-01-11T20:47:11.252541+00:00", + "migration_script": "migrate_wcms_resume.py", + "migration_version": "2.0" + } +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MATTHIJS-OLIEROOK-345df02f_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MATTHIJS-OLIEROOK-345df02f_20260115_114918.json new file mode 100644 index 0000000000..5f3c1226fc --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MATTHIJS-OLIEROOK-345df02f_20260115_114918.json @@ -0,0 +1,105 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MATTHIJS-OLIEROOK-345df02f", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "MATTHIJS", + "OLIEROOK" + ], + "collision_uuid": "345df02f" + }, + "name": "Matthijs Olierook", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "272470", + "username": "MatthijsOlierook", + "username_url": "/user/272470", + "abs_id": "110.1057555", + "crm_id": "d91423f8-8acc-ed11-815c-8eb83bda5b05" + }, + "contact_details": { + "email": "matthijsolierook@gmail.com", + "email_domain": "gmail.com" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "ma 27-03-2023 - 12:34", + "last_access": "2 jaar 9 maanden ago", + "operations": [ + { + "text": "Bewerken", + "url": "/user/272470/edit?destination=/admin/people%3Fpage%3D2510" + }, + { + "text": "Rollen", + "url": "/user/272470/roles?destination=/admin/people%3Fpage%3D2510" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 1, + "wikipedia_url": null, + "match_candidates": [ + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MATTHIJS-OLIEROOK", + "linkedin_name": "Matthijs Olierook", + "linkedin_slug": "matthijs-olierook", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:25.056151+00:00", + "annotation_script": "annotate_match_candidates.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_resume.py", + "extraction_date": "2026-01-11T20:47:43.978730+00:00", + "source_file": "users/user_272470.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_272470.json", + "original_user_id": "272470", + "migrated_at": "2026-01-11T20:47:43.978755+00:00", + "migration_script": "migrate_wcms_resume.py", + "migration_version": "2.0" + } +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MELINDA-SUSANTO-3050a7d4_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MELINDA-SUSANTO-3050a7d4_20260115_114918.json new file mode 100644 index 0000000000..61f2bf246e --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MELINDA-SUSANTO-3050a7d4_20260115_114918.json @@ -0,0 +1,104 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MELINDA-SUSANTO-3050a7d4", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "MELINDA", + "SUSANTO" + ], + "collision_uuid": "3050a7d4" + }, + "name": "Melinda Susanto", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "192547", + "username": "msusanto", + "username_url": "/user/192547", + "abs_id": "110.971137", + "crm_id": "3da39481-2db7-e811-8104-c4a5c1fa9eeb" + }, + "contact_details": { + "email": "melinda.susanto@gmail.com", + "email_domain": "gmail.com" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "do 13-09-2018 - 10:17", + "last_access": "1 jaar 4 maanden ago", + "operations": [ + { + "text": "Bewerken", + "url": "/user/192547/edit?destination=/admin/people%3Fpage%3D3852" + }, + { + "text": "Rollen", + "url": "/user/192547/roles?destination=/admin/people%3Fpage%3D3852" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 1, + "match_candidates": [ + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MELINDA-SUSANTO", + "linkedin_name": "Melinda Susanto", + "linkedin_slug": "melindasusanto", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:24.719511+00:00", + "annotation_script": "annotate_match_candidates.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_users.py", + "extraction_date": "2026-01-11T17:13:03.506896+00:00", + "source_file": "users/user_192547.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_192547.json", + "original_user_id": "192547", + "migrated_at": "2026-01-11T17:13:03.506913+00:00", + "migration_script": "migrate_wcms_users.py", + "migration_version": "1.0" + } +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MIRJAM-KOOIMAN-ea242de2_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MIRJAM-KOOIMAN-ea242de2_20260115_114918.json new file mode 100644 index 0000000000..55cabbeff3 --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MIRJAM-KOOIMAN-ea242de2_20260115_114918.json @@ -0,0 +1,118 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MIRJAM-KOOIMAN-ea242de2", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "MIRJAM", + "KOOIMAN" + ], + "collision_uuid": "ea242de2" + }, + "name": "Mirjam Kooiman", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "178040", + "username": "mirjamkooiman", + "username_url": "/user/178040", + "abs_id": "110.955971", + "crm_id": "ee42a700-cf45-e711-80e3-e0d9967f2c50" + }, + "contact_details": { + "email": "mirjam.kooiman@hotmail.com", + "email_domain": "hotmail.com" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "wo 01-06-2016 - 09:57", + "last_access": "1 jaar 11 maanden ago", + "operations": [ + { + "text": "Bewerken", + "url": "/user/178040/edit?destination=/admin/people%3Fpage%3D4112" + }, + { + "text": "Rollen", + "url": "/user/178040/roles?destination=/admin/people%3Fpage%3D4112" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 2, + "match_candidates": [ + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MIRJAM-KOOIMAN", + "linkedin_name": "Mirjam Kooiman", + "linkedin_slug": "mirjam-kooiman-6b707153", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + }, + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_MAURICE-KOOIMAN", + "linkedin_name": "Maurice Kooiman", + "linkedin_slug": "maurice-kooiman-915740150", + "confidence_score": 0.51, + "match_signals": [ + "strong_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:25.056874+00:00", + "annotation_script": "annotate_match_candidates.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_users.py", + "extraction_date": "2026-01-11T17:10:26.635660+00:00", + "source_file": "users/user_178040.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_178040.json", + "original_user_id": "178040", + "migrated_at": "2026-01-11T17:10:26.635668+00:00", + "migration_script": "migrate_wcms_users.py", + "migration_version": "1.0" + } +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_NANCY-JOUWE-872fe168_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_NANCY-JOUWE-872fe168_20260115_114918.json new file mode 100644 index 0000000000..819ec58aa9 --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_NANCY-JOUWE-872fe168_20260115_114918.json @@ -0,0 +1,127 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_NANCY-JOUWE-872fe168", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "NANCY", + "JOUWE" + ], + "collision_uuid": "872fe168" + }, + "name": "Nancy Jouwe", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "165652", + "username": "NLJouwe", + "username_url": "/user/165652", + "abs_id": "110.310513", + "crm_id": "4106FF1A-8AA0-E311-983B-005056930016" + }, + "contact_details": { + "email": "nljouwe@gmail.com", + "email_domain": "gmail.com" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "vr 28-02-2014 - 16:07", + "last_access": "2 weken 4 dagen ago", + "operations": [ + { + "text": "Bewerken", + "url": "/en/user/165652/edit?destination=/admin/people%3Fpage%3D4355" + }, + { + "text": "Rollen", + "url": "/user/165652/roles?destination=/admin/people%3Fpage%3D4355" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 2, + "match_candidates": [ + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_NANCY-JOUWE", + "linkedin_name": "Nancy Jouwe", + "linkedin_slug": "nancy-jouwe-6329935", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + }, + { + "linkedin_ppid": "ID_NL-UT-UTR_196X_NL-OV-NED_XXXX_NANCY-JOUWE", + "linkedin_name": { + "full_name": "Nancy Jouwe", + "display_name": "Nancy Jouwe", + "name_romanized": null, + "name_tokens": [ + "NANCY", + "JOUWE" + ], + "source": "linkedin_profile" + }, + "linkedin_slug": "nancy-jouwe-6329935", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:25.045455+00:00", + "annotation_script": "annotate_match_candidates.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_users.py", + "extraction_date": "2026-01-11T17:09:56.538995+00:00", + "source_file": "users/user_165652.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_165652.json", + "original_user_id": "165652", + "migrated_at": "2026-01-11T17:09:56.538997+00:00", + "migration_script": "migrate_wcms_users.py", + "migration_version": "1.0" + } +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_NANCY-JOUWE-872fe168_20260115_115029.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_NANCY-JOUWE-872fe168_20260115_115029.json new file mode 100644 index 0000000000..c886fdc12a --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_NANCY-JOUWE-872fe168_20260115_115029.json @@ -0,0 +1,422 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_NANCY-JOUWE-872fe168", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "NANCY", + "JOUWE" + ], + "collision_uuid": "872fe168" + }, + "name": "Nancy Jouwe", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "165652", + "username": "NLJouwe", + "username_url": "/user/165652", + "abs_id": "110.310513", + "crm_id": "4106FF1A-8AA0-E311-983B-005056930016" + }, + "contact_details": { + "email": "nljouwe@gmail.com", + "email_domain": "gmail.com" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "vr 28-02-2014 - 16:07", + "last_access": "2 weken 4 dagen ago", + "operations": [ + { + "text": "Bewerken", + "url": "/en/user/165652/edit?destination=/admin/people%3Fpage%3D4355" + }, + { + "text": "Rollen", + "url": "/user/165652/roles?destination=/admin/people%3Fpage%3D4355" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 2, + "match_candidates": [ + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_NANCY-JOUWE", + "linkedin_name": "Nancy Jouwe", + "linkedin_slug": "nancy-jouwe-6329935", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": true, + "review_decision": "match", + "reviewed_by": "reviewer", + "reviewed_at": "2026-01-13T12:45:03.013612+00:00" + }, + { + "linkedin_ppid": "ID_NL-UT-UTR_196X_NL-OV-NED_XXXX_NANCY-JOUWE", + "linkedin_name": { + "full_name": "Nancy Jouwe", + "display_name": "Nancy Jouwe", + "name_romanized": null, + "name_tokens": [ + "NANCY", + "JOUWE" + ], + "source": "linkedin_profile" + }, + "linkedin_slug": "nancy-jouwe-6329935", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:25.045455+00:00", + "annotation_script": "annotate_match_candidates.py", + "resolved": true, + "resolved_linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_NANCY-JOUWE", + "resolved_linkedin_slug": "nancy-jouwe-6329935", + "resolution_confidence": 0.65, + "resolution_signals": [ + "email_name_parts", + "exact_name_match" + ], + "resolution_decision": "match", + "resolved_by": "reviewer", + "resolved_at": "2026-01-13T12:45:03.013612+00:00", + "merge_timestamp": "2026-01-15T10:49:18.589178+00:00", + "merge_script": "merge_reviewed_profiles.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms", + "linkedin" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_users.py", + "extraction_date": "2026-01-11T17:09:56.538995+00:00", + "source_file": "users/user_165652.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_165652.json", + "original_user_id": "165652", + "migrated_at": "2026-01-11T17:09:56.538997+00:00", + "migration_script": "migrate_wcms_users.py", + "migration_version": "1.0" + }, + "profile_data": { + "headline": "Freelance researcher, writer, curator", + "location": "The Randstad, Netherlands (NL)", + "experience": [ + { + "title": "Kroonlid", + "company": "Raad voor Cultuur", + "date_range": "Feb 2023 - Present • 2 years and 8 months", + "location": "Nederland", + "description": "Nederland" + }, + { + "title": "Fellow", + "company": "HKU Faculty of Arts", + "date_range": "Sep 2022 - Present • 1 year and 1 month", + "location": "Utrecht, Nederland", + "description": "In my three year fellowship, our research on the history of slavery in Utrecht and the implications in today’s society will serve as a starting point for convos, gatherings and other forms of being, sharing and learning together." + }, + { + "title": "PHD Candidate (external)", + "company": "Vrije Universiteit Amsterdam", + "date_range": "May 2023 - Present • 5 months", + "location": "Amsterdam, Noord-Holland, Nederland", + "description": "In my PhD, I will focus on the diaspora community of Papuans in the Netherlands." + }, + { + "title": "Public Speaker Researcher Lecturer", + "company": "Self-Employed (Current)", + "date_range": "Jan 2006 - Present • 17 years and 9 months", + "location": "Utrecht, Nederland", + "description": "Currently: research + consultancy municipality of Delft & museum Prinsenhof. Clients include: ArtEZ, Afrovibes, Utrecht and Amsterdam Municipalities, University of Amsterdam, Utrecht University, Tong Tong Fair, Spui25, Imagine IC, De Nieuwe Liefde, Van Abbe museum, Research Centre for Material Culture, Nationaal Archief, Haags Historisch Museum, Rijksmuseum, Scheepvaartmuseum, Museum Sophiahof, Le Guess Who, IDFA, Read My World, Border Kitchen, TivoliVredenburg, De Balie, Pakhuis de Zwijger. Show less" + }, + { + "title": "Projectleader", + "company": "Kosmopolis Utrecht 2013 (Current)", + "date_range": "Aug 2013 - Present • 10 years and 2 months", + "description": "Utrecht/Amsterdam" + }, + { + "title": "Affiliated Researcher Gender Studies", + "company": "Universiteit Utrecht", + "date_range": "Jul 2018 - Present • 5 years and 3 months", + "location": "Utrecht en omgeving, Nederland", + "description": "Part of MOED team." + }, + { + "title": "Course Coordinator Lecturer 1 Race In The Netherlands 2 Gender, Race, Sexuality Popular Culture", + "company": "CIEE Council on International Educational Exchange", + "date_range": "Jun 2016 - Mar 2024 • 7 years and 9 months", + "location": "Amsterdam Area, Netherlands", + "description": "CIEE offers semesters and summer courses across the globe, including Amsterdam, on a broad range of different topics, including public health, popular culture, and race." + }, + { + "title": "Lecturer", + "company": "Universiteit Utrecht", + "date_range": "Sep 2016 - Aug 2018 • 1 year and 11 months", + "location": "Utrecht Area, Netherlands" + }, + { + "title": "Lecturer MA Fine Arts", + "company": "HKU", + "date_range": "Feb 2019 - Sep 2022 • 3 years and 7 months", + "location": "HKU Loods" + }, + { + "title": "External Lecturer Global Identity Experience", + "company": "Amsterdam University College", + "date_range": "Dec 2016 - Dec 2020 • 4 years" + }, + { + "title": "Research Fellow (freelance)", + "company": "International Institute for Social History", + "date_range": "Nov 2019 - Sep 2020 • 10 months" + }, + { + "title": "Lecturer Visual Culture", + "company": "Willem de Kooning Academy Rotterdam", + "date_range": "Aug 2017 - Jul 2019 • 1 year and 11 months", + "location": "Rotterdam" + }, + { + "title": "Academic Tutor", + "company": "Sandberg Instituut", + "date_range": "Oct 2018 - Jun 2019 • 8 months", + "location": "Amsterdam en omgeving, Nederland", + "description": "Tutor with the Radical Cut Up MA program." + }, + { + "title": "Modulecoordinator Lecturer Gender, Sexuality Postcolonial Communities", + "company": "SIT Graduate Institute", + "date_range": "Aug 2013 - Dec 2017 • 4 years and 4 months", + "location": "Amsterdam Area, Netherlands", + "description": "SIT Study Abroad offers experiential, field-based study abroad programs. At the Amsterdam branch LGBT/Feminist studies and Migration, Gender & Sexuality studies are offered." + }, + { + "title": "External Lecturer Cultural Entrepeneurship Creative Process", + "company": "Hogeschool van Amsterdam", + "date_range": "Aug 2016 - Nov 2016 • 3 months", + "location": "Amsterdam Area, Netherlands" + }, + { + "title": "Adviseur Commissie Meerjarenbeleidsplan Kunst En Cultuur 2017-2020", + "company": "Gemeente Den Haag", + "date_range": "Dec 2015 - Mar 2016 • 3 months", + "location": "Den Haag" + }, + { + "title": "Researcher", + "company": "University of Humanistic Studies", + "date_range": "Aug 2014 - Mar 2016 • 1 year and 7 months", + "location": "Utrecht Area, Netherlands", + "description": "I'm part of a research project that focuses on how postcolonial and post-war memories of different generations have influenced each other and how this is connected to a culture of compensation for victims (of war). A comparative study is done between people from Jewish, Indonesian and Afro-Caribbean communities. The research project is part of the theme group Globalisation Studies." + }, + { + "title": "Member Advisory Selection Committees", + "company": "Mondriaan Fund", + "date_range": "Jan 2010 - Aug 2013 • 3 years and 7 months", + "location": "Amsterdam Area, Netherlands", + "description": "A culture fund that financially supports museums, visual arts and design projects." + }, + { + "title": "Co-founder Framer Framed", + "company": "Framer Framed", + "date_range": "Jan 2009 - Jan 2015 • 6 years" + }, + { + "title": "Artistic Director", + "company": "Kosmopolis Utrecht", + "date_range": "Oct 2006 - Jan 2013 • 6 years and 3 months", + "description": "Kosmopolis Utrecht creates and strengthens intercultural connections through arts, culture and debate in Utrecht city. My work involved general management (team, finances, planning), fundraising plus reporting, projectmanagement, building partnerships and curating." + }, + { + "title": "Member Selection Committee International Projects", + "company": "Movies that Matter", + "date_range": "May 2007 - May 2011 • 4 years", + "location": "Amsterdam Area, Netherlands" + }, + { + "title": "Managing Director", + "company": "Papua Heritage Foundation", + "date_range": "Aug 2006 - Jan 2010 • 3 years and 5 months", + "description": "Digitization of Dutch-based Papua heritage: artefacts, documents and books, films, photo’s, audio and oral history. My work involved leading the team (6 team members and 10-15 volunteers), creating and strengthening a relevant network in Papua, Indonesia and The Netherlands. Curating, finances, fundraising, program management, dbase/PR coordination. Projectmanagement of oral history project, commissioning dbase/digital infrastucture." + }, + { + "title": "Committee Member Cultural Projects", + "company": "Gemeente Utrecht", + "date_range": "Jun 2006 - Jan 2010 • 3 years and 7 months", + "description": "Advising on project proposals of cultural projects in Utrecht city." + }, + { + "title": "Advisor", + "company": "Netwerk CS", + "date_range": "Jan 2003 - Jan 2007 • 4 years", + "location": "Platform for promoting diversity in the cultural sector in the Netherlands" + }, + { + "title": "Producer (freelance)", + "company": "Mijn Wereld in Amsterdam", + "date_range": "Mar 2006 - Oct 2006 • 7 months", + "description": "Producer for cultural project in schools in Amsterdam West, teaching predominantly Islamic schoolkids age 15-18 on self-image and representation through photography. Project set up by Riette Mellink and Sharog Heshmat Manesh." + }, + { + "title": "Deputy Director Program Manager Europe Fund Culture Fund", + "company": "Mama Cash", + "date_range": "Apr 1997 - Jan 2006 • 8 years and 9 months", + "location": "Amsterdam Area, Netherlands", + "description": "Internal management and assistent director of the organisation; managing funding applications of women's projects in the European and former Soviet Union region; 20 fte, annual budget around 4 million euros. Managing the Culture Fund (till Feb 2001) involved managing funding applications of women's projects in arts, culture and social activities. Coordinating the annual Mama Cash art prizes (including exhibits). Part of project team for 15th anniversary 1998." + }, + { + "title": "Advisor For Humanities Science Shop", + "company": "Universiteit Utrecht", + "date_range": "Jan 2001 - Jan 2006 • 5 years", + "description": "The Humanities Science Shop coordinates academic research projects commissioned by organisations and businesses and carried out by students under the supervision of academic experts. This gives the students the opportunity to put their knowledge into practice while providing your organisation with custom-tailored academic research at a relatively low cost." + }, + { + "title": "Interim Director, Deputy Director, Grants Manager", + "company": "Mama Cash", + "date_range": "Apr 1997 - Jan 2006 • 8 years and 9 months" + }, + { + "title": "Junior Researcher", + "company": "University of Utrecht", + "date_range": "Jan 1997 - Jan 2000 • 3 years", + "description": "Research and production of publication of Black and migrant women's movement in the Netherlands, titled: Caleidoscopic Visions, together with Maayke Botman and Gloria Wekker at GEM: the expertise centre for Gender, Ethnicity and Multiculturality." + }, + { + "title": "Coordinator", + "company": "Foundation Papua Peoples", + "date_range": "Jan 1996 - Dec 1997 • 1 year and 11 months", + "description": "Inter/national lobby and information dissemination on the current situation of the people of Papua." + } + ], + "education": [ + { + "degree": "Master in gender studies", + "institution": "University of York", + "date_range": "1992 - 1993 • 1 year" + }, + { + "degree": "master, Master in Gender Studies, minor in cultural history and English", + "institution": "Utrecht University", + "date_range": "1988 - 1994 • 6 years" + }, + { + "institution": "at Grotius college", + "date_range": "1979 - 1985 • 6 years" + } + ], + "linkedin_url": "https://www.linkedin.com/in/nancy-jouwe-6329935" + }, + "affiliations": [ + { + "custodian_name": "Raad voor Cultuur", + "custodian_slug": "raad-voor-cultuur", + "role_title": "Freelance researcher, writer, curator", + "affiliation_provenance": { + "source": "LinkedIn company people page", + "source_url": "https://www.linkedin.com/in/nancy-jouwe-6329935", + "retrieved_on": "2025-12-13T10:47:24.080000+00:00", + "retrieval_agent": "extract_persons_with_provenance.py" + } + } + ], + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "M" + ], + "rationale": "Identified as heritage staff at Raad voor Cultuur" + }, + "web_claims": [ + { + "claim_type": "linkedin_url", + "claim_value": "https://www.linkedin.com/in/nancy-jouwe-6329935", + "source_url": "https://www.linkedin.com/company/raad-voor-cultuur/people/", + "retrieved_on": "2025-12-13T10:47:24.080000+00:00", + "statement_created_at": "2026-01-09T22:46:26.647428+00:00", + "source_archived_at": "2025-12-13T10:47:24.080000+00:00", + "xpath": "/html[1]/head[1]/meta[1]/meta[2]/meta[3]/meta[4]/meta[5]/meta[6]/meta[7]/meta[8]/meta[9]/meta[10]/meta[11]/meta[12]/meta[13]/meta[14]/link[1]/link[2]/link[3]/link[4]/link[5]/link[6]/link[7]/meta[15]/meta[16]/meta[17]/meta[18]/meta[19]/meta[20]/meta[21]/meta[22]/meta[23]/meta[24]/meta[25]/meta[26]/link[8]/link[9]/link[10]/link[11]/link[12]/meta[27]/meta[28]/meta[29]/meta[30]/meta[31]/meta[32]/meta[33]/meta[34]/meta[35]/meta[36]/meta[37]/meta[38]/meta[39]/meta[40]/meta[41]/meta[42]/meta[43]/meta[44]/meta[45]/meta[46]/meta[47]/meta[48]/meta[49]/meta[50]/meta[51]/meta[52]/meta[53]/meta[54]/meta[55]/meta[56]/meta[57]/meta[58]/meta[59]/meta[60]/meta[61]/meta[62]/meta[63]/meta[64]/meta[65]/meta[66]/meta[67]/meta[68]/meta[69]/meta[70]/meta[71]/meta[72]/meta[73]/meta[74]/meta[75]/meta[76]/meta[77]/meta[78]/meta[79]/meta[80]/meta[81]/meta[82]/meta[83]/meta[84]/meta[85]/meta[86]/meta[87]/meta[88]/meta[89]/meta[90]/meta[91]/meta[92]/meta[93]/meta[94]/meta[95]/meta[96]/meta[97]/meta[98]/meta[99]/meta[100]/meta[101]/meta[102]/meta[103]/meta[104]/meta[105]/meta[106]/meta[107]/meta[108]/meta[109]/meta[110]/meta[111]/meta[112]/meta[113]/meta[114]/meta[115]/meta[116]/meta[117]/meta[118]/meta[119]/meta[120]/meta[121]/meta[122]/meta[123]/meta[124]/meta[125]/meta[126]/meta[127]/meta[128]/meta[129]/meta[130]/meta[131]/meta[132]/meta[133]/meta[134]/meta[135]/meta[136]/meta[137]/meta[138]/meta[139]/meta[140]/meta[141]/link[13]/link[14]/meta[142]/meta[143]/link[15]/link[16]/link[17]/link[18]/link[19]/link[20]/link[21]/link[22]/link[23]/link[24]/link[25]/link[26]/link[27]/link[28]/link[29]/link[30]/link[31]/link[32]/link[33]/link[34]/link[35]/link[36]/link[37]/link[38]/link[39]/link[40]/link[41]/link[42]/link[43]/link[44]/link[45]/link[46]/link[47]/link[48]/link[49]/link[50]/body[1]/img[1]/img[2]/img[3]/img[4]/img[5]/img[6]/div[27]/header[2]/div[31]/div[62]/div[63]/div[65]/div[66]/div[67]/div[87]/main[1]/div[88]/section[2]/div[89]/div[90]/div[127]/div[128]/div[129]/div[177]/div[178]/div[179]/ul[6]/li[33]/div[180]/li[34]/div[194]/li[35]/div[208]/section[6]/img[17]/div[209]/div[210]/div[211]/a[26]", + "html_file": "/Volumes/KINGSTON/data/glam/data/custodian/person/affiliated/manual/(9) Raad voor Cultuur_ People _ LinkedIn.html", + "xpath_match_score": 1.0, + "retrieval_agent": "extract_persons_with_provenance.py" + }, + { + "claim_type": "full_name", + "claim_value": "Nancy Jouwe", + "source_url": "https://www.linkedin.com/company/raad-voor-cultuur/people/", + "retrieved_on": "2025-12-13T10:47:24.080000+00:00", + "statement_created_at": "2026-01-09T22:46:26.647450+00:00", + "source_archived_at": "2025-12-13T10:47:24.080000+00:00", + "xpath": "/html[1]/head[1]/meta[1]/meta[2]/meta[3]/meta[4]/meta[5]/meta[6]/meta[7]/meta[8]/meta[9]/meta[10]/meta[11]/meta[12]/meta[13]/meta[14]/link[1]/link[2]/link[3]/link[4]/link[5]/link[6]/link[7]/meta[15]/meta[16]/meta[17]/meta[18]/meta[19]/meta[20]/meta[21]/meta[22]/meta[23]/meta[24]/meta[25]/meta[26]/link[8]/link[9]/link[10]/link[11]/link[12]/meta[27]/meta[28]/meta[29]/meta[30]/meta[31]/meta[32]/meta[33]/meta[34]/meta[35]/meta[36]/meta[37]/meta[38]/meta[39]/meta[40]/meta[41]/meta[42]/meta[43]/meta[44]/meta[45]/meta[46]/meta[47]/meta[48]/meta[49]/meta[50]/meta[51]/meta[52]/meta[53]/meta[54]/meta[55]/meta[56]/meta[57]/meta[58]/meta[59]/meta[60]/meta[61]/meta[62]/meta[63]/meta[64]/meta[65]/meta[66]/meta[67]/meta[68]/meta[69]/meta[70]/meta[71]/meta[72]/meta[73]/meta[74]/meta[75]/meta[76]/meta[77]/meta[78]/meta[79]/meta[80]/meta[81]/meta[82]/meta[83]/meta[84]/meta[85]/meta[86]/meta[87]/meta[88]/meta[89]/meta[90]/meta[91]/meta[92]/meta[93]/meta[94]/meta[95]/meta[96]/meta[97]/meta[98]/meta[99]/meta[100]/meta[101]/meta[102]/meta[103]/meta[104]/meta[105]/meta[106]/meta[107]/meta[108]/meta[109]/meta[110]/meta[111]/meta[112]/meta[113]/meta[114]/meta[115]/meta[116]/meta[117]/meta[118]/meta[119]/meta[120]/meta[121]/meta[122]/meta[123]/meta[124]/meta[125]/meta[126]/meta[127]/meta[128]/meta[129]/meta[130]/meta[131]/meta[132]/meta[133]/meta[134]/meta[135]/meta[136]/meta[137]/meta[138]/meta[139]/meta[140]/meta[141]/link[13]/link[14]/meta[142]/meta[143]/link[15]/link[16]/link[17]/link[18]/link[19]/link[20]/link[21]/link[22]/link[23]/link[24]/link[25]/link[26]/link[27]/link[28]/link[29]/link[30]/link[31]/link[32]/link[33]/link[34]/link[35]/link[36]/link[37]/link[38]/link[39]/link[40]/link[41]/link[42]/link[43]/link[44]/link[45]/link[46]/link[47]/link[48]/link[49]/link[50]/body[1]/img[1]/img[2]/img[3]/img[4]/img[5]/img[6]/div[27]/header[2]/div[31]/div[62]/div[63]/div[65]/div[66]/div[67]/div[87]/main[1]/div[88]/section[2]/div[89]/div[90]/div[127]/div[128]/div[129]/div[177]/div[178]/div[179]/ul[6]/li[33]/div[180]/li[34]/div[194]/li[35]/div[208]/section[6]/img[17]/div[209]/div[210]/div[211]/a[26]/img[18]/@alt", + "html_file": "/Volumes/KINGSTON/data/glam/data/custodian/person/affiliated/manual/(9) Raad voor Cultuur_ People _ LinkedIn.html", + "xpath_match_score": 1.0, + "retrieval_agent": "extract_persons_with_provenance.py" + }, + { + "claim_type": "connection_degree", + "claim_value": "2nd", + "source_url": "https://www.linkedin.com/company/raad-voor-cultuur/people/", + "retrieved_on": "2025-12-13T10:47:24.080000+00:00", + "statement_created_at": "2026-01-09T22:46:26.647518+00:00", + "source_archived_at": "2025-12-13T10:47:24.080000+00:00", + "xpath": "/html[1]/head[1]/meta[1]/meta[2]/meta[3]/meta[4]/meta[5]/meta[6]/meta[7]/meta[8]/meta[9]/meta[10]/meta[11]/meta[12]/meta[13]/meta[14]/link[1]/link[2]/link[3]/link[4]/link[5]/link[6]/link[7]/meta[15]/meta[16]/meta[17]/meta[18]/meta[19]/meta[20]/meta[21]/meta[22]/meta[23]/meta[24]/meta[25]/meta[26]/link[8]/link[9]/link[10]/link[11]/link[12]/meta[27]/meta[28]/meta[29]/meta[30]/meta[31]/meta[32]/meta[33]/meta[34]/meta[35]/meta[36]/meta[37]/meta[38]/meta[39]/meta[40]/meta[41]/meta[42]/meta[43]/meta[44]/meta[45]/meta[46]/meta[47]/meta[48]/meta[49]/meta[50]/meta[51]/meta[52]/meta[53]/meta[54]/meta[55]/meta[56]/meta[57]/meta[58]/meta[59]/meta[60]/meta[61]/meta[62]/meta[63]/meta[64]/meta[65]/meta[66]/meta[67]/meta[68]/meta[69]/meta[70]/meta[71]/meta[72]/meta[73]/meta[74]/meta[75]/meta[76]/meta[77]/meta[78]/meta[79]/meta[80]/meta[81]/meta[82]/meta[83]/meta[84]/meta[85]/meta[86]/meta[87]/meta[88]/meta[89]/meta[90]/meta[91]/meta[92]/meta[93]/meta[94]/meta[95]/meta[96]/meta[97]/meta[98]/meta[99]/meta[100]/meta[101]/meta[102]/meta[103]/meta[104]/meta[105]/meta[106]/meta[107]/meta[108]/meta[109]/meta[110]/meta[111]/meta[112]/meta[113]/meta[114]/meta[115]/meta[116]/meta[117]/meta[118]/meta[119]/meta[120]/meta[121]/meta[122]/meta[123]/meta[124]/meta[125]/meta[126]/meta[127]/meta[128]/meta[129]/meta[130]/meta[131]/meta[132]/meta[133]/meta[134]/meta[135]/meta[136]/meta[137]/meta[138]/meta[139]/meta[140]/meta[141]/link[13]/link[14]/meta[142]/meta[143]/link[15]/link[16]/link[17]/link[18]/link[19]/link[20]/link[21]/link[22]/link[23]/link[24]/link[25]/link[26]/link[27]/link[28]/link[29]/link[30]/link[31]/link[32]/link[33]/link[34]/link[35]/link[36]/link[37]/link[38]/link[39]/link[40]/link[41]/link[42]/link[43]/link[44]/link[45]/link[46]/link[47]/link[48]/link[49]/link[50]/body[1]/img[1]/img[2]/img[3]/img[4]/img[5]/img[6]/div[27]/header[2]/div[31]/div[62]/div[63]/div[65]/div[66]/div[67]/div[87]/main[1]/div[88]/section[2]/div[89]/div[90]/div[127]/div[128]/div[129]/div[177]/div[178]/div[179]/ul[6]/li[33]/div[180]/li[34]/div[194]/li[35]/div[208]/section[6]/img[17]/div[209]/div[210]/div[211]/div[212]/div[215]", + "html_file": "/Volumes/KINGSTON/data/glam/data/custodian/person/affiliated/manual/(9) Raad voor Cultuur_ People _ LinkedIn.html", + "xpath_match_score": 1.0, + "retrieval_agent": "extract_persons_with_provenance.py" + }, + { + "claim_type": "headline", + "claim_value": "Freelance researcher, writer, curator", + "source_url": "https://www.linkedin.com/company/raad-voor-cultuur/people/", + "retrieved_on": "2025-12-13T10:47:24.080000+00:00", + "statement_created_at": "2026-01-09T22:46:26.647547+00:00", + "source_archived_at": "2025-12-13T10:47:24.080000+00:00", + "xpath": "/html[1]/head[1]/meta[1]/meta[2]/meta[3]/meta[4]/meta[5]/meta[6]/meta[7]/meta[8]/meta[9]/meta[10]/meta[11]/meta[12]/meta[13]/meta[14]/link[1]/link[2]/link[3]/link[4]/link[5]/link[6]/link[7]/meta[15]/meta[16]/meta[17]/meta[18]/meta[19]/meta[20]/meta[21]/meta[22]/meta[23]/meta[24]/meta[25]/meta[26]/link[8]/link[9]/link[10]/link[11]/link[12]/meta[27]/meta[28]/meta[29]/meta[30]/meta[31]/meta[32]/meta[33]/meta[34]/meta[35]/meta[36]/meta[37]/meta[38]/meta[39]/meta[40]/meta[41]/meta[42]/meta[43]/meta[44]/meta[45]/meta[46]/meta[47]/meta[48]/meta[49]/meta[50]/meta[51]/meta[52]/meta[53]/meta[54]/meta[55]/meta[56]/meta[57]/meta[58]/meta[59]/meta[60]/meta[61]/meta[62]/meta[63]/meta[64]/meta[65]/meta[66]/meta[67]/meta[68]/meta[69]/meta[70]/meta[71]/meta[72]/meta[73]/meta[74]/meta[75]/meta[76]/meta[77]/meta[78]/meta[79]/meta[80]/meta[81]/meta[82]/meta[83]/meta[84]/meta[85]/meta[86]/meta[87]/meta[88]/meta[89]/meta[90]/meta[91]/meta[92]/meta[93]/meta[94]/meta[95]/meta[96]/meta[97]/meta[98]/meta[99]/meta[100]/meta[101]/meta[102]/meta[103]/meta[104]/meta[105]/meta[106]/meta[107]/meta[108]/meta[109]/meta[110]/meta[111]/meta[112]/meta[113]/meta[114]/meta[115]/meta[116]/meta[117]/meta[118]/meta[119]/meta[120]/meta[121]/meta[122]/meta[123]/meta[124]/meta[125]/meta[126]/meta[127]/meta[128]/meta[129]/meta[130]/meta[131]/meta[132]/meta[133]/meta[134]/meta[135]/meta[136]/meta[137]/meta[138]/meta[139]/meta[140]/meta[141]/link[13]/link[14]/meta[142]/meta[143]/link[15]/link[16]/link[17]/link[18]/link[19]/link[20]/link[21]/link[22]/link[23]/link[24]/link[25]/link[26]/link[27]/link[28]/link[29]/link[30]/link[31]/link[32]/link[33]/link[34]/link[35]/link[36]/link[37]/link[38]/link[39]/link[40]/link[41]/link[42]/link[43]/link[44]/link[45]/link[46]/link[47]/link[48]/link[49]/link[50]/body[1]/img[1]/img[2]/img[3]/img[4]/img[5]/img[6]/div[27]/header[2]/div[31]/div[62]/div[63]/div[65]/div[66]/div[67]/div[87]/main[1]/div[88]/section[2]/div[89]/div[90]/div[127]/div[128]/div[129]/div[177]/div[178]/div[179]/ul[6]/li[33]/div[180]/li[34]/div[194]/li[35]/div[208]/section[6]/img[17]/div[209]/div[210]/div[211]/div[212]/div[216]/div[217]/div[218]", + "html_file": "/Volumes/KINGSTON/data/glam/data/custodian/person/affiliated/manual/(9) Raad voor Cultuur_ People _ LinkedIn.html", + "xpath_match_score": 1.0, + "retrieval_agent": "extract_persons_with_provenance.py" + } + ], + "linkedin_slug": "nancy-jouwe-6329935" +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PAUL-VAN-CAPELLEVEEN-4559eaa5_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PAUL-VAN-CAPELLEVEEN-4559eaa5_20260115_114918.json new file mode 100644 index 0000000000..3910e29731 --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PAUL-VAN-CAPELLEVEEN-4559eaa5_20260115_114918.json @@ -0,0 +1,234 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PAUL-VAN-CAPELLEVEEN-4559eaa5", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "PAUL", + "VAN", + "CAPELLEVEEN" + ], + "collision_uuid": "4559eaa5" + }, + "name": "Paul van Capelleveen", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "176116", + "username": "Paul van Capelleveen", + "username_url": "/user/176116", + "abs_id": "110.333528", + "crm_id": "e952a237-b932-4fe6-907e-d378099aac94" + }, + "contact_details": { + "email": "paul.vancapelleveen@kb.nl", + "email_domain": "kb.nl" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "ma 08-02-2016 - 17:25", + "last_access": "7 jaar 9 maanden ago", + "operations": [ + { + "text": "Bewerken", + "url": "/en/user/176116/edit?destination=/admin/people%3Fpage%3D4147" + }, + { + "text": "Rollen", + "url": "/user/176116/roles?destination=/admin/people%3Fpage%3D4147" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 2, + "match_candidates": [ + { + "linkedin_ppid": "ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_PAUL-CAPELLEVEEN", + "linkedin_name": "Paul Van Capelleveen", + "linkedin_slug": "paul-van-capelleveen-0bb9b610", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": true, + "review_decision": "match", + "reviewed_by": "reviewer", + "reviewed_at": "2026-01-13T11:24:26.364904+00:00" + }, + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PAUL-CAPELLEVEEN", + "linkedin_name": { + "full_name": "Paul Van Capelleveen", + "display_name": "Paul Van Capelleveen", + "name_romanized": null, + "name_tokens": [ + "PAUL", + "CAPELLEVEEN" + ], + "source": "linkedin_profile" + }, + "linkedin_slug": "paul-van-capelleveen-0bb9b610", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:24.975185+00:00", + "annotation_script": "annotate_match_candidates.py", + "resolved": true, + "resolved_linkedin_ppid": "ID_XX-XX-XXX_196X_NL-ZH-TH_XXXX_PAUL-CAPELLEVEEN", + "resolved_linkedin_slug": "paul-van-capelleveen-0bb9b610", + "resolution_confidence": 0.65, + "resolution_signals": [ + "email_name_parts", + "exact_name_match", + "email_institution", + "email_institutional" + ], + "resolution_decision": "match", + "resolved_by": "reviewer", + "resolved_at": "2026-01-13T11:24:26.364904+00:00", + "merge_timestamp": "2026-01-15T10:49:18.569853+00:00", + "merge_script": "merge_reviewed_profiles.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms", + "linkedin" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_users.py", + "extraction_date": "2026-01-11T17:10:07.247954+00:00", + "source_file": "users/user_176116.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_176116.json", + "original_user_id": "176116", + "migrated_at": "2026-01-11T17:10:07.247962+00:00", + "migration_script": "migrate_wcms_users.py", + "migration_version": "1.0" + }, + "profile_data": { + "headline": "Conservator at Koninklijke Bibliotheek", + "location": "The Hague, South Holland, Netherlands (NL)", + "about": "Total Experience: 26 years", + "experience": [ + { + "title": "Curator", + "company": "Koninklijke Bibliotheek", + "date_range": "Jan 1985 - Present • 40 years and 9 months" + }, + { + "title": "Curator", + "company": "Museum Meermanno", + "date_range": "Jan 2006 - Jan 2011 • 5 years" + } + ], + "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2", + "linkedin_url": "https://www.linkedin.com/in/paul-van-capelleveen-0bb9b610" + }, + "affiliations": [ + { + "custodian_name": "KB nationale bibliotheek", + "custodian_slug": "kb-nationale-bibliotheek", + "role_title": "Conservator at Koninklijke Bibliotheek", + "affiliation_provenance": { + "source": "LinkedIn company people page", + "source_url": "https://www.linkedin.com/in/paul-van-capelleveen-0bb9b610", + "retrieved_on": "2025-12-10T14:51:23.110000+00:00", + "retrieval_agent": "extract_persons_with_provenance.py" + } + } + ], + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "L" + ], + "rationale": "Identified as staff at KB nationale bibliotheek" + }, + "web_claims": [ + { + "claim_type": "linkedin_url", + "claim_value": "https://www.linkedin.com/in/paul-van-capelleveen-0bb9b610", + "source_url": "https://www.linkedin.com/company/kb-nationale-bibliotheek/people/", + "retrieved_on": "2025-12-10T14:51:23.110000+00:00", + "statement_created_at": "2026-01-09T22:45:58.481952+00:00", + "source_archived_at": "2025-12-10T14:51:23.110000+00:00", + "xpath": "/html[1]/head[1]/meta[1]/meta[2]/meta[3]/meta[4]/meta[5]/meta[6]/meta[7]/meta[8]/meta[9]/meta[10]/meta[11]/meta[12]/meta[13]/meta[14]/link[1]/link[2]/link[3]/link[4]/link[5]/link[6]/link[7]/meta[15]/meta[16]/meta[17]/meta[18]/meta[19]/meta[20]/meta[21]/meta[22]/meta[23]/meta[24]/meta[25]/meta[26]/link[8]/link[9]/link[10]/link[11]/link[12]/meta[27]/meta[28]/meta[29]/meta[30]/meta[31]/meta[32]/meta[33]/meta[34]/meta[35]/meta[36]/meta[37]/meta[38]/meta[39]/meta[40]/meta[41]/meta[42]/meta[43]/meta[44]/meta[45]/meta[46]/meta[47]/meta[48]/meta[49]/meta[50]/meta[51]/meta[52]/meta[53]/meta[54]/meta[55]/meta[56]/meta[57]/meta[58]/meta[59]/meta[60]/meta[61]/meta[62]/meta[63]/meta[64]/meta[65]/meta[66]/meta[67]/meta[68]/meta[69]/meta[70]/meta[71]/meta[72]/meta[73]/meta[74]/meta[75]/meta[76]/meta[77]/meta[78]/meta[79]/meta[80]/meta[81]/meta[82]/meta[83]/meta[84]/meta[85]/meta[86]/meta[87]/meta[88]/meta[89]/meta[90]/meta[91]/meta[92]/meta[93]/meta[94]/meta[95]/meta[96]/meta[97]/meta[98]/meta[99]/meta[100]/meta[101]/meta[102]/meta[103]/meta[104]/meta[105]/meta[106]/meta[107]/meta[108]/meta[109]/meta[110]/meta[111]/meta[112]/meta[113]/meta[114]/meta[115]/meta[116]/meta[117]/meta[118]/meta[119]/meta[120]/meta[121]/meta[122]/meta[123]/meta[124]/meta[125]/meta[126]/meta[127]/meta[128]/meta[129]/meta[130]/meta[131]/meta[132]/meta[133]/meta[134]/meta[135]/meta[136]/meta[137]/meta[138]/meta[139]/meta[140]/meta[141]/link[13]/link[14]/meta[142]/meta[143]/link[15]/link[16]/link[17]/link[18]/link[19]/link[20]/link[21]/link[22]/link[23]/link[24]/link[25]/link[26]/link[27]/link[28]/link[29]/link[30]/link[31]/link[32]/link[33]/link[34]/link[35]/link[36]/link[37]/link[38]/link[39]/link[40]/link[41]/link[42]/body[1]/img[1]/img[2]/img[3]/img[4]/img[5]/img[6]/img[7]/img[8]/img[9]/img[10]/img[11]/img[12]/img[13]/div[28]/header[2]/div[32]/div[35]/div[36]/div[37]/input[1]/div[40]/div[85]/div[86]/div[88]/div[89]/div[90]/div[110]/main[1]/div[111]/section[2]/div[148]/div[149]/div[150]/div[198]/div[199]/div[200]/ul[8]/li[41]/div[201]/li[42]/div[213]/li[43]/div[225]/li[44]/div[237]/li[45]/div[249]/li[46]/div[261]/li[47]/div[273]/li[48]/div[285]/li[49]/div[297]/li[50]/div[309]/li[51]/div[321]/li[52]/div[335]/li[53]/div[347]/li[54]/div[359]/li[55]/div[373]/li[56]/div[387]/li[57]/div[399]/li[58]/div[411]/li[59]/div[423]/li[60]/div[435]/li[61]/div[447]/li[62]/div[459]/li[63]/div[471]/li[64]/div[483]/li[65]/div[495]/li[66]/div[507]/li[67]/div[519]/li[68]/div[533]/li[69]/div[545]/li[70]/div[557]/li[71]/div[571]/li[72]/div[583]/li[73]/div[595]/li[74]/div[607]/li[75]/div[619]/li[76]/div[631]/li[77]/div[643]/li[78]/div[655]/li[79]/div[667]/li[80]/div[679]/li[81]/div[691]/li[82]/div[703]/li[83]/div[715]/li[84]/div[727]/li[85]/div[739]/li[86]/div[751]/li[87]/div[763]/li[88]/div[775]/li[89]/div[787]/li[90]/div[799]/li[91]/div[811]/li[92]/div[823]/li[93]/div[835]/li[94]/div[847]/li[95]/div[859]/li[96]/div[871]/li[97]/div[883]/li[98]/div[895]/li[99]/div[907]/li[100]/div[919]/li[101]/div[931]/li[102]/div[943]/li[103]/div[955]/li[104]/div[967]/li[105]/div[979]/li[106]/div[991]/li[107]/div[1003]/li[108]/div[1015]/li[109]/div[1027]/li[110]/div[1039]/li[111]/div[1051]/li[112]/div[1063]/li[113]/div[1075]/li[114]/div[1087]/li[115]/div[1099]/li[116]/div[1111]/section[79]/img[173]/div[1112]/div[1113]/div[1114]/a[173]", + "html_file": "/Volumes/KINGSTON/data/glam/data/custodian/person/affiliated/manual/(8) KB nationale bibliotheek_ People _ LinkedIn.html", + "xpath_match_score": 1.0, + "retrieval_agent": "extract_persons_with_provenance.py" + }, + { + "claim_type": "full_name", + "claim_value": "Paul Van Capelleveen", + "source_url": "https://www.linkedin.com/company/kb-nationale-bibliotheek/people/", + "retrieved_on": "2025-12-10T14:51:23.110000+00:00", + "statement_created_at": "2026-01-09T22:45:58.481976+00:00", + "source_archived_at": "2025-12-10T14:51:23.110000+00:00", + "xpath": "/html[1]/head[1]/meta[1]/meta[2]/meta[3]/meta[4]/meta[5]/meta[6]/meta[7]/meta[8]/meta[9]/meta[10]/meta[11]/meta[12]/meta[13]/meta[14]/link[1]/link[2]/link[3]/link[4]/link[5]/link[6]/link[7]/meta[15]/meta[16]/meta[17]/meta[18]/meta[19]/meta[20]/meta[21]/meta[22]/meta[23]/meta[24]/meta[25]/meta[26]/link[8]/link[9]/link[10]/link[11]/link[12]/meta[27]/meta[28]/meta[29]/meta[30]/meta[31]/meta[32]/meta[33]/meta[34]/meta[35]/meta[36]/meta[37]/meta[38]/meta[39]/meta[40]/meta[41]/meta[42]/meta[43]/meta[44]/meta[45]/meta[46]/meta[47]/meta[48]/meta[49]/meta[50]/meta[51]/meta[52]/meta[53]/meta[54]/meta[55]/meta[56]/meta[57]/meta[58]/meta[59]/meta[60]/meta[61]/meta[62]/meta[63]/meta[64]/meta[65]/meta[66]/meta[67]/meta[68]/meta[69]/meta[70]/meta[71]/meta[72]/meta[73]/meta[74]/meta[75]/meta[76]/meta[77]/meta[78]/meta[79]/meta[80]/meta[81]/meta[82]/meta[83]/meta[84]/meta[85]/meta[86]/meta[87]/meta[88]/meta[89]/meta[90]/meta[91]/meta[92]/meta[93]/meta[94]/meta[95]/meta[96]/meta[97]/meta[98]/meta[99]/meta[100]/meta[101]/meta[102]/meta[103]/meta[104]/meta[105]/meta[106]/meta[107]/meta[108]/meta[109]/meta[110]/meta[111]/meta[112]/meta[113]/meta[114]/meta[115]/meta[116]/meta[117]/meta[118]/meta[119]/meta[120]/meta[121]/meta[122]/meta[123]/meta[124]/meta[125]/meta[126]/meta[127]/meta[128]/meta[129]/meta[130]/meta[131]/meta[132]/meta[133]/meta[134]/meta[135]/meta[136]/meta[137]/meta[138]/meta[139]/meta[140]/meta[141]/link[13]/link[14]/meta[142]/meta[143]/link[15]/link[16]/link[17]/link[18]/link[19]/link[20]/link[21]/link[22]/link[23]/link[24]/link[25]/link[26]/link[27]/link[28]/link[29]/link[30]/link[31]/link[32]/link[33]/link[34]/link[35]/link[36]/link[37]/link[38]/link[39]/link[40]/link[41]/link[42]/body[1]/img[1]/img[2]/img[3]/img[4]/img[5]/img[6]/img[7]/img[8]/img[9]/img[10]/img[11]/img[12]/img[13]/div[28]/header[2]/div[32]/div[35]/div[36]/div[37]/input[1]/div[40]/div[85]/div[86]/div[88]/div[89]/div[90]/div[110]/main[1]/div[111]/section[2]/div[148]/div[149]/div[150]/div[198]/div[199]/div[200]/ul[8]/li[41]/div[201]/li[42]/div[213]/li[43]/div[225]/li[44]/div[237]/li[45]/div[249]/li[46]/div[261]/li[47]/div[273]/li[48]/div[285]/li[49]/div[297]/li[50]/div[309]/li[51]/div[321]/li[52]/div[335]/li[53]/div[347]/li[54]/div[359]/li[55]/div[373]/li[56]/div[387]/li[57]/div[399]/li[58]/div[411]/li[59]/div[423]/li[60]/div[435]/li[61]/div[447]/li[62]/div[459]/li[63]/div[471]/li[64]/div[483]/li[65]/div[495]/li[66]/div[507]/li[67]/div[519]/li[68]/div[533]/li[69]/div[545]/li[70]/div[557]/li[71]/div[571]/li[72]/div[583]/li[73]/div[595]/li[74]/div[607]/li[75]/div[619]/li[76]/div[631]/li[77]/div[643]/li[78]/div[655]/li[79]/div[667]/li[80]/div[679]/li[81]/div[691]/li[82]/div[703]/li[83]/div[715]/li[84]/div[727]/li[85]/div[739]/li[86]/div[751]/li[87]/div[763]/li[88]/div[775]/li[89]/div[787]/li[90]/div[799]/li[91]/div[811]/li[92]/div[823]/li[93]/div[835]/li[94]/div[847]/li[95]/div[859]/li[96]/div[871]/li[97]/div[883]/li[98]/div[895]/li[99]/div[907]/li[100]/div[919]/li[101]/div[931]/li[102]/div[943]/li[103]/div[955]/li[104]/div[967]/li[105]/div[979]/li[106]/div[991]/li[107]/div[1003]/li[108]/div[1015]/li[109]/div[1027]/li[110]/div[1039]/li[111]/div[1051]/li[112]/div[1063]/li[113]/div[1075]/li[114]/div[1087]/li[115]/div[1099]/li[116]/div[1111]/section[79]/img[173]/div[1112]/div[1113]/div[1114]/a[173]/img[174]/@alt", + "html_file": "/Volumes/KINGSTON/data/glam/data/custodian/person/affiliated/manual/(8) KB nationale bibliotheek_ People _ LinkedIn.html", + "xpath_match_score": 1.0, + "retrieval_agent": "extract_persons_with_provenance.py" + }, + { + "claim_type": "connection_degree", + "claim_value": "2nd", + "source_url": "https://www.linkedin.com/company/kb-nationale-bibliotheek/people/", + "retrieved_on": "2025-12-10T14:51:23.110000+00:00", + "statement_created_at": "2026-01-09T22:45:58.482044+00:00", + "source_archived_at": "2025-12-10T14:51:23.110000+00:00", + "xpath": "/html[1]/head[1]/meta[1]/meta[2]/meta[3]/meta[4]/meta[5]/meta[6]/meta[7]/meta[8]/meta[9]/meta[10]/meta[11]/meta[12]/meta[13]/meta[14]/link[1]/link[2]/link[3]/link[4]/link[5]/link[6]/link[7]/meta[15]/meta[16]/meta[17]/meta[18]/meta[19]/meta[20]/meta[21]/meta[22]/meta[23]/meta[24]/meta[25]/meta[26]/link[8]/link[9]/link[10]/link[11]/link[12]/meta[27]/meta[28]/meta[29]/meta[30]/meta[31]/meta[32]/meta[33]/meta[34]/meta[35]/meta[36]/meta[37]/meta[38]/meta[39]/meta[40]/meta[41]/meta[42]/meta[43]/meta[44]/meta[45]/meta[46]/meta[47]/meta[48]/meta[49]/meta[50]/meta[51]/meta[52]/meta[53]/meta[54]/meta[55]/meta[56]/meta[57]/meta[58]/meta[59]/meta[60]/meta[61]/meta[62]/meta[63]/meta[64]/meta[65]/meta[66]/meta[67]/meta[68]/meta[69]/meta[70]/meta[71]/meta[72]/meta[73]/meta[74]/meta[75]/meta[76]/meta[77]/meta[78]/meta[79]/meta[80]/meta[81]/meta[82]/meta[83]/meta[84]/meta[85]/meta[86]/meta[87]/meta[88]/meta[89]/meta[90]/meta[91]/meta[92]/meta[93]/meta[94]/meta[95]/meta[96]/meta[97]/meta[98]/meta[99]/meta[100]/meta[101]/meta[102]/meta[103]/meta[104]/meta[105]/meta[106]/meta[107]/meta[108]/meta[109]/meta[110]/meta[111]/meta[112]/meta[113]/meta[114]/meta[115]/meta[116]/meta[117]/meta[118]/meta[119]/meta[120]/meta[121]/meta[122]/meta[123]/meta[124]/meta[125]/meta[126]/meta[127]/meta[128]/meta[129]/meta[130]/meta[131]/meta[132]/meta[133]/meta[134]/meta[135]/meta[136]/meta[137]/meta[138]/meta[139]/meta[140]/meta[141]/link[13]/link[14]/meta[142]/meta[143]/link[15]/link[16]/link[17]/link[18]/link[19]/link[20]/link[21]/link[22]/link[23]/link[24]/link[25]/link[26]/link[27]/link[28]/link[29]/link[30]/link[31]/link[32]/link[33]/link[34]/link[35]/link[36]/link[37]/link[38]/link[39]/link[40]/link[41]/link[42]/body[1]/img[1]/img[2]/img[3]/img[4]/img[5]/img[6]/img[7]/img[8]/img[9]/img[10]/img[11]/img[12]/img[13]/div[28]/header[2]/div[32]/div[35]/div[36]/div[37]/input[1]/div[40]/div[85]/div[86]/div[88]/div[89]/div[90]/div[110]/main[1]/div[111]/section[2]/div[148]/div[149]/div[150]/div[198]/div[199]/div[200]/ul[8]/li[41]/div[201]/li[42]/div[213]/li[43]/div[225]/li[44]/div[237]/li[45]/div[249]/li[46]/div[261]/li[47]/div[273]/li[48]/div[285]/li[49]/div[297]/li[50]/div[309]/li[51]/div[321]/li[52]/div[335]/li[53]/div[347]/li[54]/div[359]/li[55]/div[373]/li[56]/div[387]/li[57]/div[399]/li[58]/div[411]/li[59]/div[423]/li[60]/div[435]/li[61]/div[447]/li[62]/div[459]/li[63]/div[471]/li[64]/div[483]/li[65]/div[495]/li[66]/div[507]/li[67]/div[519]/li[68]/div[533]/li[69]/div[545]/li[70]/div[557]/li[71]/div[571]/li[72]/div[583]/li[73]/div[595]/li[74]/div[607]/li[75]/div[619]/li[76]/div[631]/li[77]/div[643]/li[78]/div[655]/li[79]/div[667]/li[80]/div[679]/li[81]/div[691]/li[82]/div[703]/li[83]/div[715]/li[84]/div[727]/li[85]/div[739]/li[86]/div[751]/li[87]/div[763]/li[88]/div[775]/li[89]/div[787]/li[90]/div[799]/li[91]/div[811]/li[92]/div[823]/li[93]/div[835]/li[94]/div[847]/li[95]/div[859]/li[96]/div[871]/li[97]/div[883]/li[98]/div[895]/li[99]/div[907]/li[100]/div[919]/li[101]/div[931]/li[102]/div[943]/li[103]/div[955]/li[104]/div[967]/li[105]/div[979]/li[106]/div[991]/li[107]/div[1003]/li[108]/div[1015]/li[109]/div[1027]/li[110]/div[1039]/li[111]/div[1051]/li[112]/div[1063]/li[113]/div[1075]/li[114]/div[1087]/li[115]/div[1099]/li[116]/div[1111]/section[79]/img[173]/div[1112]/div[1113]/div[1114]/div[1115]/div[1118]", + "html_file": "/Volumes/KINGSTON/data/glam/data/custodian/person/affiliated/manual/(8) KB nationale bibliotheek_ People _ LinkedIn.html", + "xpath_match_score": 1.0, + "retrieval_agent": "extract_persons_with_provenance.py" + }, + { + "claim_type": "headline", + "claim_value": "Conservator at Koninklijke Bibliotheek", + "source_url": "https://www.linkedin.com/company/kb-nationale-bibliotheek/people/", + "retrieved_on": "2025-12-10T14:51:23.110000+00:00", + "statement_created_at": "2026-01-09T22:45:58.482075+00:00", + "source_archived_at": "2025-12-10T14:51:23.110000+00:00", + "xpath": "/html[1]/head[1]/meta[1]/meta[2]/meta[3]/meta[4]/meta[5]/meta[6]/meta[7]/meta[8]/meta[9]/meta[10]/meta[11]/meta[12]/meta[13]/meta[14]/link[1]/link[2]/link[3]/link[4]/link[5]/link[6]/link[7]/meta[15]/meta[16]/meta[17]/meta[18]/meta[19]/meta[20]/meta[21]/meta[22]/meta[23]/meta[24]/meta[25]/meta[26]/link[8]/link[9]/link[10]/link[11]/link[12]/meta[27]/meta[28]/meta[29]/meta[30]/meta[31]/meta[32]/meta[33]/meta[34]/meta[35]/meta[36]/meta[37]/meta[38]/meta[39]/meta[40]/meta[41]/meta[42]/meta[43]/meta[44]/meta[45]/meta[46]/meta[47]/meta[48]/meta[49]/meta[50]/meta[51]/meta[52]/meta[53]/meta[54]/meta[55]/meta[56]/meta[57]/meta[58]/meta[59]/meta[60]/meta[61]/meta[62]/meta[63]/meta[64]/meta[65]/meta[66]/meta[67]/meta[68]/meta[69]/meta[70]/meta[71]/meta[72]/meta[73]/meta[74]/meta[75]/meta[76]/meta[77]/meta[78]/meta[79]/meta[80]/meta[81]/meta[82]/meta[83]/meta[84]/meta[85]/meta[86]/meta[87]/meta[88]/meta[89]/meta[90]/meta[91]/meta[92]/meta[93]/meta[94]/meta[95]/meta[96]/meta[97]/meta[98]/meta[99]/meta[100]/meta[101]/meta[102]/meta[103]/meta[104]/meta[105]/meta[106]/meta[107]/meta[108]/meta[109]/meta[110]/meta[111]/meta[112]/meta[113]/meta[114]/meta[115]/meta[116]/meta[117]/meta[118]/meta[119]/meta[120]/meta[121]/meta[122]/meta[123]/meta[124]/meta[125]/meta[126]/meta[127]/meta[128]/meta[129]/meta[130]/meta[131]/meta[132]/meta[133]/meta[134]/meta[135]/meta[136]/meta[137]/meta[138]/meta[139]/meta[140]/meta[141]/link[13]/link[14]/meta[142]/meta[143]/link[15]/link[16]/link[17]/link[18]/link[19]/link[20]/link[21]/link[22]/link[23]/link[24]/link[25]/link[26]/link[27]/link[28]/link[29]/link[30]/link[31]/link[32]/link[33]/link[34]/link[35]/link[36]/link[37]/link[38]/link[39]/link[40]/link[41]/link[42]/body[1]/img[1]/img[2]/img[3]/img[4]/img[5]/img[6]/img[7]/img[8]/img[9]/img[10]/img[11]/img[12]/img[13]/div[28]/header[2]/div[32]/div[35]/div[36]/div[37]/input[1]/div[40]/div[85]/div[86]/div[88]/div[89]/div[90]/div[110]/main[1]/div[111]/section[2]/div[148]/div[149]/div[150]/div[198]/div[199]/div[200]/ul[8]/li[41]/div[201]/li[42]/div[213]/li[43]/div[225]/li[44]/div[237]/li[45]/div[249]/li[46]/div[261]/li[47]/div[273]/li[48]/div[285]/li[49]/div[297]/li[50]/div[309]/li[51]/div[321]/li[52]/div[335]/li[53]/div[347]/li[54]/div[359]/li[55]/div[373]/li[56]/div[387]/li[57]/div[399]/li[58]/div[411]/li[59]/div[423]/li[60]/div[435]/li[61]/div[447]/li[62]/div[459]/li[63]/div[471]/li[64]/div[483]/li[65]/div[495]/li[66]/div[507]/li[67]/div[519]/li[68]/div[533]/li[69]/div[545]/li[70]/div[557]/li[71]/div[571]/li[72]/div[583]/li[73]/div[595]/li[74]/div[607]/li[75]/div[619]/li[76]/div[631]/li[77]/div[643]/li[78]/div[655]/li[79]/div[667]/li[80]/div[679]/li[81]/div[691]/li[82]/div[703]/li[83]/div[715]/li[84]/div[727]/li[85]/div[739]/li[86]/div[751]/li[87]/div[763]/li[88]/div[775]/li[89]/div[787]/li[90]/div[799]/li[91]/div[811]/li[92]/div[823]/li[93]/div[835]/li[94]/div[847]/li[95]/div[859]/li[96]/div[871]/li[97]/div[883]/li[98]/div[895]/li[99]/div[907]/li[100]/div[919]/li[101]/div[931]/li[102]/div[943]/li[103]/div[955]/li[104]/div[967]/li[105]/div[979]/li[106]/div[991]/li[107]/div[1003]/li[108]/div[1015]/li[109]/div[1027]/li[110]/div[1039]/li[111]/div[1051]/li[112]/div[1063]/li[113]/div[1075]/li[114]/div[1087]/li[115]/div[1099]/li[116]/div[1111]/section[79]/img[173]/div[1112]/div[1113]/div[1114]/div[1115]/div[1119]/div[1120]/div[1121]", + "html_file": "/Volumes/KINGSTON/data/glam/data/custodian/person/affiliated/manual/(8) KB nationale bibliotheek_ People _ LinkedIn.html", + "xpath_match_score": 1.0, + "retrieval_agent": "extract_persons_with_provenance.py" + } + ], + "linkedin_slug": "paul-van-capelleveen-0bb9b610" +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PETER-VERBRUGGE-3d35f627_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PETER-VERBRUGGE-3d35f627_20260115_114918.json new file mode 100644 index 0000000000..d484338554 --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PETER-VERBRUGGE-3d35f627_20260115_114918.json @@ -0,0 +1,104 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PETER-VERBRUGGE-3d35f627", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "PETER", + "VERBRUGGE" + ], + "collision_uuid": "3d35f627" + }, + "name": "Peter Verbrugge", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "181400", + "username": "PVerbrugge", + "username_url": "/user/181400", + "abs_id": "110.952215", + "crm_id": "b2d457ad-278c-4814-8d8e-f6da32431132" + }, + "contact_details": { + "email": "peterverbrugge@ziggo.nl", + "email_domain": "ziggo.nl" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "vr 20-01-2017 - 11:46", + "last_access": "8 jaar 10 maanden ago", + "operations": [ + { + "text": "Bewerken", + "url": "/en/user/181400/edit?destination=/admin/people%3Fpage%3D4052" + }, + { + "text": "Rollen", + "url": "/user/181400/roles?destination=/admin/people%3Fpage%3D4052" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 1, + "match_candidates": [ + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_PETER-VERBRUGGE", + "linkedin_name": "Peter Verbrugge", + "linkedin_slug": "peter-verbrugge-93222514", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:25.290438+00:00", + "annotation_script": "annotate_match_candidates.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_users.py", + "extraction_date": "2026-01-11T17:11:03.287896+00:00", + "source_file": "users/user_181400.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_181400.json", + "original_user_id": "181400", + "migrated_at": "2026-01-11T17:11:03.287911+00:00", + "migration_script": "migrate_wcms_users.py", + "migration_version": "1.0" + } +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_QUINSY-GARIO-3a522d24_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_QUINSY-GARIO-3a522d24_20260115_114918.json new file mode 100644 index 0000000000..f96341da6e --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_QUINSY-GARIO-3a522d24_20260115_114918.json @@ -0,0 +1,105 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_QUINSY-GARIO-3a522d24", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "QUINSY", + "GARIO" + ], + "collision_uuid": "3a522d24" + }, + "name": "Quinsy Gario", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "273045", + "username": "quinsy.gario", + "username_url": "/user/273045", + "abs_id": "110.1058239", + "crm_id": "ad3f71dd-1ed3-ed11-815c-8eb83bda5b05" + }, + "contact_details": { + "email": "q.gario@vu.nl", + "email_domain": "vu.nl" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "di 04-04-2023 - 21:28", + "last_access": "8 maanden 2 weken ago", + "operations": [ + { + "text": "Bewerken", + "url": "/user/273045/edit?destination=/admin/people%3Fpage%3D2499" + }, + { + "text": "Rollen", + "url": "/user/273045/roles?destination=/admin/people%3Fpage%3D2499" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 1, + "wikipedia_url": null, + "match_candidates": [ + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_QUINSY-GARIO", + "linkedin_name": "Quinsy Gario", + "linkedin_slug": "qgario", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:24.774275+00:00", + "annotation_script": "annotate_match_candidates.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_resume.py", + "extraction_date": "2026-01-11T20:47:59.055633+00:00", + "source_file": "users/user_273045.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_273045.json", + "original_user_id": "273045", + "migrated_at": "2026-01-11T20:47:59.055648+00:00", + "migration_script": "migrate_wcms_resume.py", + "migration_version": "2.0" + } +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_RIVKA-BAUM-d210ea12_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_RIVKA-BAUM-d210ea12_20260115_114918.json new file mode 100644 index 0000000000..c3143d5c0f --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_RIVKA-BAUM-d210ea12_20260115_114918.json @@ -0,0 +1,104 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_RIVKA-BAUM-d210ea12", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "RIVKA", + "BAUM" + ], + "collision_uuid": "d210ea12" + }, + "name": "Rivka Baum", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "195139", + "username": "RivkaBaum", + "username_url": "/user/195139", + "abs_id": "110.978364", + "crm_id": "1a96759e-0144-e911-810b-cd3e0bfadf9c" + }, + "contact_details": { + "email": "rivka.baum@gmail.com", + "email_domain": "gmail.com" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "ma 11-03-2019 - 14:28", + "last_access": "3 jaar 3 maanden ago", + "operations": [ + { + "text": "Bewerken", + "url": "/user/195139/edit?destination=/admin/people%3Fpage%3D3758" + }, + { + "text": "Rollen", + "url": "/user/195139/roles?destination=/admin/people%3Fpage%3D3758" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 1, + "match_candidates": [ + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_RIVKA-BAUM", + "linkedin_name": "Rivka Baum", + "linkedin_slug": "rivka-baum-54572811a", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:26.019378+00:00", + "annotation_script": "annotate_match_candidates.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_users.py", + "extraction_date": "2026-01-11T17:14:21.999163+00:00", + "source_file": "users/user_195139.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_195139.json", + "original_user_id": "195139", + "migrated_at": "2026-01-11T17:14:21.999172+00:00", + "migration_script": "migrate_wcms_users.py", + "migration_version": "1.0" + } +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ROB-CAMPS-db710ad9_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ROB-CAMPS-db710ad9_20260115_114918.json new file mode 100644 index 0000000000..5d7718e3f9 --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ROB-CAMPS-db710ad9_20260115_114918.json @@ -0,0 +1,118 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ROB-CAMPS-db710ad9", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "ROB", + "CAMPS" + ], + "collision_uuid": "db710ad9" + }, + "name": "Rob Camps", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "195553", + "username": "rcampie", + "username_url": "/user/195553", + "abs_id": "110.975740", + "crm_id": "8ef6bc0c-b115-e911-8109-f1cdc9802167" + }, + "contact_details": { + "email": "campsglorie@glazenkamp.net", + "email_domain": "glazenkamp.net" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "vr 11-01-2019 - 15:56", + "last_access": "1 jaar 7 maanden ago", + "operations": [ + { + "text": "Bewerken", + "url": "/en/user/195553/edit?destination=/admin/people%3Fpage%3D3791" + }, + { + "text": "Rollen", + "url": "/user/195553/roles?destination=/admin/people%3Fpage%3D3791" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 2, + "match_candidates": [ + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ROB-CAMPS", + "linkedin_name": "Rob Camps", + "linkedin_slug": "robcamps", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + }, + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_ROBINSON-CAMPS", + "linkedin_name": "Robinson Camps", + "linkedin_slug": "robinson-camps-60398b31a", + "confidence_score": 0.51, + "match_signals": [ + "strong_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:25.156236+00:00", + "annotation_script": "annotate_match_candidates.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_users.py", + "extraction_date": "2026-01-11T17:13:54.568276+00:00", + "source_file": "users/user_195553.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_195553.json", + "original_user_id": "195553", + "migrated_at": "2026-01-11T17:13:54.568285+00:00", + "migration_script": "migrate_wcms_users.py", + "migration_version": "1.0" + } +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_RUTGER-VAN-KOERT_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_RUTGER-VAN-KOERT_20260115_114918.json new file mode 100644 index 0000000000..8e31f3296f --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_RUTGER-VAN-KOERT_20260115_114918.json @@ -0,0 +1,104 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_RUTGER-VAN-KOERT", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "RUTGER", + "VAN", + "KOERT" + ] + }, + "name": "Rutger van Koert", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "180154", + "username": "rutgervankoert", + "username_url": "/user/180154", + "abs_id": "110.339728", + "crm_id": "dcd30873-f5a2-4973-bd26-a518fa04d5d2" + }, + "contact_details": { + "email": "r.c.van.koert@gmail.com", + "email_domain": "gmail.com" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "ma 07-11-2016 - 15:38", + "last_access": "7 maanden 3 weken ago", + "operations": [ + { + "text": "Bewerken", + "url": "/user/180154/edit?destination=/admin/people%3Fpage%3D4074" + }, + { + "text": "Rollen", + "url": "/user/180154/roles?destination=/admin/people%3Fpage%3D4074" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 1, + "match_candidates": [ + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_RUTGER-KOERT", + "linkedin_name": "Rutger van Koert", + "linkedin_slug": "rutgervankoert", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:25.116254+00:00", + "annotation_script": "annotate_match_candidates.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_users.py", + "extraction_date": "2026-01-11T17:10:51.650180+00:00", + "source_file": "users/user_180154.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_180154.json", + "original_user_id": "180154", + "migrated_at": "2026-01-11T17:10:51.650195+00:00", + "migration_script": "migrate_wcms_users.py", + "migration_version": "1.0" + } +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_SIGNE-TROOST-568421e0_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_SIGNE-TROOST-568421e0_20260115_114918.json new file mode 100644 index 0000000000..bc13a3d817 --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_SIGNE-TROOST-568421e0_20260115_114918.json @@ -0,0 +1,104 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_SIGNE-TROOST-568421e0", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "SIGNE", + "TROOST" + ], + "collision_uuid": "568421e0" + }, + "name": "Signe Troost", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "158559", + "username": "SigneTroost", + "username_url": "/user/158559", + "abs_id": "110.299296", + "crm_id": "DCE64867-511C-E211-B361-005056930016" + }, + "contact_details": { + "email": "signe.troost@gmail.com", + "email_domain": "gmail.com" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "ma 22-10-2012 - 16:04", + "last_access": "13 jaar 1 maand ago", + "operations": [ + { + "text": "Bewerken", + "url": "/en/user/158559/edit?destination=/admin/people%3Fpage%3D4497" + }, + { + "text": "Rollen", + "url": "/user/158559/roles?destination=/admin/people%3Fpage%3D4497" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 1, + "match_candidates": [ + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_SIGNE-TROOST", + "linkedin_name": "Signe Troost", + "linkedin_slug": "signe-troost", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:25.382456+00:00", + "annotation_script": "annotate_match_candidates.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_users.py", + "extraction_date": "2026-01-11T17:07:31.010029+00:00", + "source_file": "users/user_158559.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_158559.json", + "original_user_id": "158559", + "migrated_at": "2026-01-11T17:07:31.010033+00:00", + "migration_script": "migrate_wcms_users.py", + "migration_version": "1.0" + } +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_SUSAN-DE-THOUARS-88d52e11_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_SUSAN-DE-THOUARS-88d52e11_20260115_114918.json new file mode 100644 index 0000000000..2cea0defca --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_SUSAN-DE-THOUARS-88d52e11_20260115_114918.json @@ -0,0 +1,106 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_SUSAN-DE-THOUARS-88d52e11", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "SUSAN", + "DE", + "THOUARS" + ], + "collision_uuid": "88d52e11" + }, + "name": "Susan de Thouars", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "286966", + "username": "susandet", + "username_url": "/user/286966", + "abs_id": "110.1072470", + "crm_id": "cc88105e-e67e-ee11-816c-c2af9f731bbb" + }, + "contact_details": { + "email": "susan.de.thouars@wo2net.nl", + "email_domain": "wo2net.nl" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "do 09-11-2023 - 10:57", + "last_access": "2 jaar 1 maand ago", + "operations": [ + { + "text": "Bewerken", + "url": "/user/286966/edit?destination=/admin/people%3Fpage%3D2226" + }, + { + "text": "Rollen", + "url": "/user/286966/roles?destination=/admin/people%3Fpage%3D2226" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 1, + "wikipedia_url": null, + "match_candidates": [ + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_SUSAN-DE-THOUARS", + "linkedin_name": "Susan de Thouars", + "linkedin_slug": "susan-de-thouars-41b201167", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:25.143910+00:00", + "annotation_script": "annotate_match_candidates.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_resume.py", + "extraction_date": "2026-01-11T21:24:11.094792+00:00", + "source_file": "users/user_286966.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_286966.json", + "original_user_id": "286966", + "migrated_at": "2026-01-11T21:24:11.094805+00:00", + "migration_script": "migrate_wcms_resume.py", + "migration_version": "2.0" + } +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_TEIO-MEEDENDORP_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_TEIO-MEEDENDORP_20260115_114918.json new file mode 100644 index 0000000000..a3b82e0e52 --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_TEIO-MEEDENDORP_20260115_114918.json @@ -0,0 +1,313 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_TEIO-MEEDENDORP", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "TEIO", + "MEEDENDORP" + ] + }, + "name": "Teio Meedendorp", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "285725", + "username": "teiodorp", + "username_url": "/user/285725", + "abs_id": "110.1071205", + "crm_id": "7afa8d94-3b6f-ee11-816b-d7add8f6d140" + }, + "contact_details": { + "email": "t.meedendorp@vangoghmuseum.nl", + "email_domain": "vangoghmuseum.nl" + }, + "wcms_activity": { + "status": "Active", + "roles": [ + "Beta gebruiker" + ], + "registered_since": "vr 20-10-2023 - 13:26", + "last_access": "2 maanden ago", + "operations": [ + { + "text": "Bewerken", + "url": "/user/285725/edit?destination=/admin/people%3Fpage%3D2250" + }, + { + "text": "Rollen", + "url": "/user/285725/roles?destination=/admin/people%3Fpage%3D2250" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 4, + "wikipedia_url": null, + "match_candidates": [ + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_TEIO-MEEDENDORP-teio_meedendorp_2ab21519", + "linkedin_name": { + "full_name": "Teio Meedendorp", + "display_name": "Teio Meedendorp", + "name_romanized": null, + "name_tokens": [ + "TEIO", + "MEEDENDORP" + ], + "source": "linkedin_profile" + }, + "linkedin_slug": "teio-meedendorp-2ab21519", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": true, + "review_decision": "match", + "reviewed_by": "reviewer", + "reviewed_at": "2026-01-13T11:40:11.456531+00:00" + }, + { + "linkedin_ppid": "ID_XX-XX-XXX_198X_NL-NH-AMS_XXXX_TEIO-MEEDENDORP", + "linkedin_name": "Teio Meedendorp", + "linkedin_slug": "teio-meedendorp-634442a", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": true, + "review_decision": "match", + "reviewed_by": "reviewer", + "reviewed_at": "2026-01-13T11:40:29.478944+00:00" + }, + { + "linkedin_ppid": "ID_NL-GR-GRO_195X_NL-NH-AMS_XXXX_TEIO-MEEDENDORP", + "linkedin_name": "Teio Meedendorp", + "linkedin_slug": "teio-meedendorp-2ab21519", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": true, + "review_decision": "match", + "reviewed_by": "reviewer", + "reviewed_at": "2026-01-13T11:40:37.378908+00:00" + }, + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_TEIO-MEEDENDORP-teio_meedendorp_634442a", + "linkedin_name": { + "full_name": "Teio Meedendorp", + "display_name": "Teio Meedendorp", + "name_romanized": null, + "name_tokens": [ + "TEIO", + "MEEDENDORP" + ], + "source": "linkedin_profile" + }, + "linkedin_slug": "teio-meedendorp-634442a", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:24.945130+00:00", + "annotation_script": "annotate_match_candidates.py", + "resolved": true, + "resolved_linkedin_ppid": "ID_NL-GR-GRO_195X_NL-NH-AMS_XXXX_TEIO-MEEDENDORP", + "resolved_linkedin_slug": "teio-meedendorp-2ab21519", + "resolution_confidence": 0.65, + "resolution_signals": [ + "email_name_parts", + "exact_name_match", + "email_institution", + "email_institutional" + ], + "resolution_decision": "match", + "resolved_by": "reviewer", + "resolved_at": "2026-01-13T11:40:37.378908+00:00", + "merge_timestamp": "2026-01-15T10:49:18.560312+00:00", + "merge_script": "merge_reviewed_profiles.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms", + "linkedin" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_resume.py", + "extraction_date": "2026-01-11T21:23:34.957457+00:00", + "source_file": "users/user_285725.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_285725.json", + "original_user_id": "285725", + "migrated_at": "2026-01-11T21:23:34.957463+00:00", + "migration_script": "migrate_wcms_resume.py", + "migration_version": "2.0" + }, + "profile_data": { + "headline": "Researcher at Van Gogh Museum", + "linkedin_url": "https://www.linkedin.com/in/teio-meedendorp-2ab21519", + "location": "Amsterdam, North Holland, Netherlands (NL)", + "about": "Specialties: 19th century Fine Art Vincent van Gogh experienced editor Total Experience: 20 years and 9 months", + "experience": [ + { + "title": "Researcher Van Gogh's Studio Practice", + "company": "Van Gogh Museum", + "date_range": "Jan 2009 - Present • 16 years and 8 months" + } + ], + "skills": [ + "fine art" + ], + "profile_image_url": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2", + "education": [ + { + "degree": "DRS, Art History", + "institution": "University of Groningen", + "date_range": "1981 - 1988 • 7 years" + } + ] + }, + "affiliations": [ + { + "custodian_name": "Van Gogh Museum", + "custodian_slug": "van-gogh-museum", + "role_title": "Researcher at Van Gogh Museum", + "affiliation_provenance": { + "source": "LinkedIn company people page", + "source_url": "https://www.linkedin.com/in/teio-meedendorp-2ab21519", + "retrieved_on": "2025-12-12T20:28:49.720000+00:00", + "retrieval_agent": "extract_persons_with_provenance.py" + } + } + ], + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "M" + ], + "rationale": "Identified as staff at Van Gogh Museum" + }, + "web_claims": [ + { + "claim_type": "linkedin_url", + "claim_value": "https://www.linkedin.com/in/teio-meedendorp-2ab21519", + "source_url": "https://www.linkedin.com/company/van-gogh-museum/people/", + "retrieved_on": "2025-12-12T20:28:49.720000+00:00", + "statement_created_at": "2026-01-09T22:45:54.952982+00:00", + "source_archived_at": "2025-12-12T20:28:49.720000+00:00", + "xpath": "/html[1]/head[1]/meta[1]/meta[2]/meta[3]/meta[4]/meta[5]/meta[6]/meta[7]/meta[8]/meta[9]/meta[10]/meta[11]/meta[12]/meta[13]/meta[14]/link[1]/link[2]/link[3]/link[4]/link[5]/link[6]/link[7]/meta[15]/meta[16]/meta[17]/meta[18]/meta[19]/meta[20]/meta[21]/meta[22]/meta[23]/meta[24]/meta[25]/meta[26]/link[8]/link[9]/link[10]/link[11]/link[12]/meta[27]/meta[28]/meta[29]/meta[30]/meta[31]/meta[32]/meta[33]/meta[34]/meta[35]/meta[36]/meta[37]/meta[38]/meta[39]/meta[40]/meta[41]/meta[42]/meta[43]/meta[44]/meta[45]/meta[46]/meta[47]/meta[48]/meta[49]/meta[50]/meta[51]/meta[52]/meta[53]/meta[54]/meta[55]/meta[56]/meta[57]/meta[58]/meta[59]/meta[60]/meta[61]/meta[62]/meta[63]/meta[64]/meta[65]/meta[66]/meta[67]/meta[68]/meta[69]/meta[70]/meta[71]/meta[72]/meta[73]/meta[74]/meta[75]/meta[76]/meta[77]/meta[78]/meta[79]/meta[80]/meta[81]/meta[82]/meta[83]/meta[84]/meta[85]/meta[86]/meta[87]/meta[88]/meta[89]/meta[90]/meta[91]/meta[92]/meta[93]/meta[94]/meta[95]/meta[96]/meta[97]/meta[98]/meta[99]/meta[100]/meta[101]/meta[102]/meta[103]/meta[104]/meta[105]/meta[106]/meta[107]/meta[108]/meta[109]/meta[110]/meta[111]/meta[112]/meta[113]/meta[114]/meta[115]/meta[116]/meta[117]/meta[118]/meta[119]/meta[120]/meta[121]/meta[122]/meta[123]/meta[124]/meta[125]/meta[126]/meta[127]/meta[128]/meta[129]/meta[130]/meta[131]/meta[132]/meta[133]/meta[134]/meta[135]/meta[136]/meta[137]/meta[138]/meta[139]/meta[140]/meta[141]/link[13]/link[14]/meta[142]/meta[143]/link[15]/link[16]/link[17]/link[18]/link[19]/link[20]/link[21]/link[22]/link[23]/link[24]/link[25]/link[26]/link[27]/link[28]/link[29]/link[30]/link[31]/link[32]/link[33]/link[34]/link[35]/link[36]/link[37]/link[38]/link[39]/link[40]/link[41]/link[42]/link[43]/link[44]/link[45]/body[1]/img[1]/img[2]/img[3]/img[4]/img[5]/div[27]/header[2]/div[31]/div[62]/div[63]/div[65]/div[66]/div[67]/div[87]/main[1]/div[88]/section[2]/div[89]/div[90]/div[91]/div[97]/div[101]/div[102]/div[103]/div[127]/section[3]/div[131]/div[184]/div[185]/div[186]/div[234]/div[235]/div[236]/ul[7]/li[38]/div[237]/li[39]/div[251]/li[40]/div[263]/li[41]/div[275]/li[42]/div[287]/li[43]/div[299]/li[44]/div[311]/li[45]/div[323]/li[46]/div[335]/li[47]/div[347]/li[48]/div[359]/section[15]/img[40]/div[360]/div[361]/div[362]/a[52]", + "html_file": "/Volumes/KINGSTON/data/glam/data/custodian/person/affiliated/manual/(7) Van Gogh Museum_ People _ LinkedIn.html", + "xpath_match_score": 1.0, + "retrieval_agent": "extract_persons_with_provenance.py" + }, + { + "claim_type": "full_name", + "claim_value": "Teio Meedendorp", + "source_url": "https://www.linkedin.com/company/van-gogh-museum/people/", + "retrieved_on": "2025-12-12T20:28:49.720000+00:00", + "statement_created_at": "2026-01-09T22:45:54.953005+00:00", + "source_archived_at": "2025-12-12T20:28:49.720000+00:00", + "xpath": "/html[1]/head[1]/meta[1]/meta[2]/meta[3]/meta[4]/meta[5]/meta[6]/meta[7]/meta[8]/meta[9]/meta[10]/meta[11]/meta[12]/meta[13]/meta[14]/link[1]/link[2]/link[3]/link[4]/link[5]/link[6]/link[7]/meta[15]/meta[16]/meta[17]/meta[18]/meta[19]/meta[20]/meta[21]/meta[22]/meta[23]/meta[24]/meta[25]/meta[26]/link[8]/link[9]/link[10]/link[11]/link[12]/meta[27]/meta[28]/meta[29]/meta[30]/meta[31]/meta[32]/meta[33]/meta[34]/meta[35]/meta[36]/meta[37]/meta[38]/meta[39]/meta[40]/meta[41]/meta[42]/meta[43]/meta[44]/meta[45]/meta[46]/meta[47]/meta[48]/meta[49]/meta[50]/meta[51]/meta[52]/meta[53]/meta[54]/meta[55]/meta[56]/meta[57]/meta[58]/meta[59]/meta[60]/meta[61]/meta[62]/meta[63]/meta[64]/meta[65]/meta[66]/meta[67]/meta[68]/meta[69]/meta[70]/meta[71]/meta[72]/meta[73]/meta[74]/meta[75]/meta[76]/meta[77]/meta[78]/meta[79]/meta[80]/meta[81]/meta[82]/meta[83]/meta[84]/meta[85]/meta[86]/meta[87]/meta[88]/meta[89]/meta[90]/meta[91]/meta[92]/meta[93]/meta[94]/meta[95]/meta[96]/meta[97]/meta[98]/meta[99]/meta[100]/meta[101]/meta[102]/meta[103]/meta[104]/meta[105]/meta[106]/meta[107]/meta[108]/meta[109]/meta[110]/meta[111]/meta[112]/meta[113]/meta[114]/meta[115]/meta[116]/meta[117]/meta[118]/meta[119]/meta[120]/meta[121]/meta[122]/meta[123]/meta[124]/meta[125]/meta[126]/meta[127]/meta[128]/meta[129]/meta[130]/meta[131]/meta[132]/meta[133]/meta[134]/meta[135]/meta[136]/meta[137]/meta[138]/meta[139]/meta[140]/meta[141]/link[13]/link[14]/meta[142]/meta[143]/link[15]/link[16]/link[17]/link[18]/link[19]/link[20]/link[21]/link[22]/link[23]/link[24]/link[25]/link[26]/link[27]/link[28]/link[29]/link[30]/link[31]/link[32]/link[33]/link[34]/link[35]/link[36]/link[37]/link[38]/link[39]/link[40]/link[41]/link[42]/link[43]/link[44]/link[45]/body[1]/img[1]/img[2]/img[3]/img[4]/img[5]/div[27]/header[2]/div[31]/div[62]/div[63]/div[65]/div[66]/div[67]/div[87]/main[1]/div[88]/section[2]/div[89]/div[90]/div[91]/div[97]/div[101]/div[102]/div[103]/div[127]/section[3]/div[131]/div[184]/div[185]/div[186]/div[234]/div[235]/div[236]/ul[7]/li[38]/div[237]/li[39]/div[251]/li[40]/div[263]/li[41]/div[275]/li[42]/div[287]/li[43]/div[299]/li[44]/div[311]/li[45]/div[323]/li[46]/div[335]/li[47]/div[347]/li[48]/div[359]/section[15]/img[40]/div[360]/div[361]/div[362]/a[52]/img[41]/@alt", + "html_file": "/Volumes/KINGSTON/data/glam/data/custodian/person/affiliated/manual/(7) Van Gogh Museum_ People _ LinkedIn.html", + "xpath_match_score": 1.0, + "retrieval_agent": "extract_persons_with_provenance.py" + }, + { + "claim_type": "connection_degree", + "claim_value": "2nd", + "source_url": "https://www.linkedin.com/company/van-gogh-museum/people/", + "retrieved_on": "2025-12-12T20:28:49.720000+00:00", + "statement_created_at": "2026-01-09T22:45:54.953074+00:00", + "source_archived_at": "2025-12-12T20:28:49.720000+00:00", + "xpath": "/html[1]/head[1]/meta[1]/meta[2]/meta[3]/meta[4]/meta[5]/meta[6]/meta[7]/meta[8]/meta[9]/meta[10]/meta[11]/meta[12]/meta[13]/meta[14]/link[1]/link[2]/link[3]/link[4]/link[5]/link[6]/link[7]/meta[15]/meta[16]/meta[17]/meta[18]/meta[19]/meta[20]/meta[21]/meta[22]/meta[23]/meta[24]/meta[25]/meta[26]/link[8]/link[9]/link[10]/link[11]/link[12]/meta[27]/meta[28]/meta[29]/meta[30]/meta[31]/meta[32]/meta[33]/meta[34]/meta[35]/meta[36]/meta[37]/meta[38]/meta[39]/meta[40]/meta[41]/meta[42]/meta[43]/meta[44]/meta[45]/meta[46]/meta[47]/meta[48]/meta[49]/meta[50]/meta[51]/meta[52]/meta[53]/meta[54]/meta[55]/meta[56]/meta[57]/meta[58]/meta[59]/meta[60]/meta[61]/meta[62]/meta[63]/meta[64]/meta[65]/meta[66]/meta[67]/meta[68]/meta[69]/meta[70]/meta[71]/meta[72]/meta[73]/meta[74]/meta[75]/meta[76]/meta[77]/meta[78]/meta[79]/meta[80]/meta[81]/meta[82]/meta[83]/meta[84]/meta[85]/meta[86]/meta[87]/meta[88]/meta[89]/meta[90]/meta[91]/meta[92]/meta[93]/meta[94]/meta[95]/meta[96]/meta[97]/meta[98]/meta[99]/meta[100]/meta[101]/meta[102]/meta[103]/meta[104]/meta[105]/meta[106]/meta[107]/meta[108]/meta[109]/meta[110]/meta[111]/meta[112]/meta[113]/meta[114]/meta[115]/meta[116]/meta[117]/meta[118]/meta[119]/meta[120]/meta[121]/meta[122]/meta[123]/meta[124]/meta[125]/meta[126]/meta[127]/meta[128]/meta[129]/meta[130]/meta[131]/meta[132]/meta[133]/meta[134]/meta[135]/meta[136]/meta[137]/meta[138]/meta[139]/meta[140]/meta[141]/link[13]/link[14]/meta[142]/meta[143]/link[15]/link[16]/link[17]/link[18]/link[19]/link[20]/link[21]/link[22]/link[23]/link[24]/link[25]/link[26]/link[27]/link[28]/link[29]/link[30]/link[31]/link[32]/link[33]/link[34]/link[35]/link[36]/link[37]/link[38]/link[39]/link[40]/link[41]/link[42]/link[43]/link[44]/link[45]/body[1]/img[1]/img[2]/img[3]/img[4]/img[5]/div[27]/header[2]/div[31]/div[62]/div[63]/div[65]/div[66]/div[67]/div[87]/main[1]/div[88]/section[2]/div[89]/div[90]/div[91]/div[97]/div[101]/div[102]/div[103]/div[127]/section[3]/div[131]/div[184]/div[185]/div[186]/div[234]/div[235]/div[236]/ul[7]/li[38]/div[237]/li[39]/div[251]/li[40]/div[263]/li[41]/div[275]/li[42]/div[287]/li[43]/div[299]/li[44]/div[311]/li[45]/div[323]/li[46]/div[335]/li[47]/div[347]/li[48]/div[359]/section[15]/img[40]/div[360]/div[361]/div[362]/div[363]/div[366]", + "html_file": "/Volumes/KINGSTON/data/glam/data/custodian/person/affiliated/manual/(7) Van Gogh Museum_ People _ LinkedIn.html", + "xpath_match_score": 1.0, + "retrieval_agent": "extract_persons_with_provenance.py" + }, + { + "claim_type": "headline", + "claim_value": "Researcher at Van Gogh Museum", + "source_url": "https://www.linkedin.com/company/van-gogh-museum/people/", + "retrieved_on": "2025-12-12T20:28:49.720000+00:00", + "statement_created_at": "2026-01-09T22:45:54.953104+00:00", + "source_archived_at": "2025-12-12T20:28:49.720000+00:00", + "xpath": "/html[1]/head[1]/meta[1]/meta[2]/meta[3]/meta[4]/meta[5]/meta[6]/meta[7]/meta[8]/meta[9]/meta[10]/meta[11]/meta[12]/meta[13]/meta[14]/link[1]/link[2]/link[3]/link[4]/link[5]/link[6]/link[7]/meta[15]/meta[16]/meta[17]/meta[18]/meta[19]/meta[20]/meta[21]/meta[22]/meta[23]/meta[24]/meta[25]/meta[26]/link[8]/link[9]/link[10]/link[11]/link[12]/meta[27]/meta[28]/meta[29]/meta[30]/meta[31]/meta[32]/meta[33]/meta[34]/meta[35]/meta[36]/meta[37]/meta[38]/meta[39]/meta[40]/meta[41]/meta[42]/meta[43]/meta[44]/meta[45]/meta[46]/meta[47]/meta[48]/meta[49]/meta[50]/meta[51]/meta[52]/meta[53]/meta[54]/meta[55]/meta[56]/meta[57]/meta[58]/meta[59]/meta[60]/meta[61]/meta[62]/meta[63]/meta[64]/meta[65]/meta[66]/meta[67]/meta[68]/meta[69]/meta[70]/meta[71]/meta[72]/meta[73]/meta[74]/meta[75]/meta[76]/meta[77]/meta[78]/meta[79]/meta[80]/meta[81]/meta[82]/meta[83]/meta[84]/meta[85]/meta[86]/meta[87]/meta[88]/meta[89]/meta[90]/meta[91]/meta[92]/meta[93]/meta[94]/meta[95]/meta[96]/meta[97]/meta[98]/meta[99]/meta[100]/meta[101]/meta[102]/meta[103]/meta[104]/meta[105]/meta[106]/meta[107]/meta[108]/meta[109]/meta[110]/meta[111]/meta[112]/meta[113]/meta[114]/meta[115]/meta[116]/meta[117]/meta[118]/meta[119]/meta[120]/meta[121]/meta[122]/meta[123]/meta[124]/meta[125]/meta[126]/meta[127]/meta[128]/meta[129]/meta[130]/meta[131]/meta[132]/meta[133]/meta[134]/meta[135]/meta[136]/meta[137]/meta[138]/meta[139]/meta[140]/meta[141]/link[13]/link[14]/meta[142]/meta[143]/link[15]/link[16]/link[17]/link[18]/link[19]/link[20]/link[21]/link[22]/link[23]/link[24]/link[25]/link[26]/link[27]/link[28]/link[29]/link[30]/link[31]/link[32]/link[33]/link[34]/link[35]/link[36]/link[37]/link[38]/link[39]/link[40]/link[41]/link[42]/link[43]/link[44]/link[45]/body[1]/img[1]/img[2]/img[3]/img[4]/img[5]/div[27]/header[2]/div[31]/div[62]/div[63]/div[65]/div[66]/div[67]/div[87]/main[1]/div[88]/section[2]/div[89]/div[90]/div[91]/div[97]/div[101]/div[102]/div[103]/div[127]/section[3]/div[131]/div[184]/div[185]/div[186]/div[234]/div[235]/div[236]/ul[7]/li[38]/div[237]/li[39]/div[251]/li[40]/div[263]/li[41]/div[275]/li[42]/div[287]/li[43]/div[299]/li[44]/div[311]/li[45]/div[323]/li[46]/div[335]/li[47]/div[347]/li[48]/div[359]/section[15]/img[40]/div[360]/div[361]/div[362]/div[363]/div[367]/div[368]/div[369]", + "html_file": "/Volumes/KINGSTON/data/glam/data/custodian/person/affiliated/manual/(7) Van Gogh Museum_ People _ LinkedIn.html", + "xpath_match_score": 1.0, + "retrieval_agent": "extract_persons_with_provenance.py" + }, + { + "claim_type": "linkedin_url", + "claim_value": "https://www.linkedin.com/in/teio-meedendorp-634442a", + "source_url": "https://www.linkedin.com/company/van-gogh-museum/people/", + "retrieved_on": "2025-12-12T20:28:49.720000+00:00", + "statement_created_at": "2026-01-09T22:45:55.052627+00:00", + "source_archived_at": "2025-12-12T20:28:49.720000+00:00", + "xpath": "/html[1]/head[1]/meta[1]/meta[2]/meta[3]/meta[4]/meta[5]/meta[6]/meta[7]/meta[8]/meta[9]/meta[10]/meta[11]/meta[12]/meta[13]/meta[14]/link[1]/link[2]/link[3]/link[4]/link[5]/link[6]/link[7]/meta[15]/meta[16]/meta[17]/meta[18]/meta[19]/meta[20]/meta[21]/meta[22]/meta[23]/meta[24]/meta[25]/meta[26]/link[8]/link[9]/link[10]/link[11]/link[12]/meta[27]/meta[28]/meta[29]/meta[30]/meta[31]/meta[32]/meta[33]/meta[34]/meta[35]/meta[36]/meta[37]/meta[38]/meta[39]/meta[40]/meta[41]/meta[42]/meta[43]/meta[44]/meta[45]/meta[46]/meta[47]/meta[48]/meta[49]/meta[50]/meta[51]/meta[52]/meta[53]/meta[54]/meta[55]/meta[56]/meta[57]/meta[58]/meta[59]/meta[60]/meta[61]/meta[62]/meta[63]/meta[64]/meta[65]/meta[66]/meta[67]/meta[68]/meta[69]/meta[70]/meta[71]/meta[72]/meta[73]/meta[74]/meta[75]/meta[76]/meta[77]/meta[78]/meta[79]/meta[80]/meta[81]/meta[82]/meta[83]/meta[84]/meta[85]/meta[86]/meta[87]/meta[88]/meta[89]/meta[90]/meta[91]/meta[92]/meta[93]/meta[94]/meta[95]/meta[96]/meta[97]/meta[98]/meta[99]/meta[100]/meta[101]/meta[102]/meta[103]/meta[104]/meta[105]/meta[106]/meta[107]/meta[108]/meta[109]/meta[110]/meta[111]/meta[112]/meta[113]/meta[114]/meta[115]/meta[116]/meta[117]/meta[118]/meta[119]/meta[120]/meta[121]/meta[122]/meta[123]/meta[124]/meta[125]/meta[126]/meta[127]/meta[128]/meta[129]/meta[130]/meta[131]/meta[132]/meta[133]/meta[134]/meta[135]/meta[136]/meta[137]/meta[138]/meta[139]/meta[140]/meta[141]/link[13]/link[14]/meta[142]/meta[143]/link[15]/link[16]/link[17]/link[18]/link[19]/link[20]/link[21]/link[22]/link[23]/link[24]/link[25]/link[26]/link[27]/link[28]/link[29]/link[30]/link[31]/link[32]/link[33]/link[34]/link[35]/link[36]/link[37]/link[38]/link[39]/link[40]/link[41]/link[42]/link[43]/link[44]/link[45]/body[1]/img[1]/img[2]/img[3]/img[4]/img[5]/div[27]/header[2]/div[31]/div[62]/div[63]/div[65]/div[66]/div[67]/div[87]/main[1]/div[88]/section[2]/div[89]/div[90]/div[91]/div[97]/div[101]/div[102]/div[103]/div[127]/section[3]/div[131]/div[184]/div[185]/div[186]/div[234]/div[235]/div[236]/ul[7]/li[38]/div[237]/li[39]/div[251]/li[40]/div[263]/li[41]/div[275]/li[42]/div[287]/li[43]/div[299]/li[44]/div[311]/li[45]/div[323]/li[46]/div[335]/li[47]/div[347]/li[48]/div[359]/li[49]/div[371]/li[50]/div[383]/li[51]/div[395]/li[52]/div[407]/li[53]/div[419]/li[54]/div[431]/li[55]/div[443]/li[56]/div[455]/li[57]/div[467]/li[58]/div[479]/li[59]/div[491]/li[60]/div[503]/li[61]/div[515]/li[62]/div[527]/li[63]/div[539]/li[64]/div[551]/li[65]/div[563]/li[66]/div[575]/li[67]/div[587]/li[68]/div[599]/li[69]/div[611]/li[70]/div[623]/li[71]/div[635]/li[72]/div[647]/li[73]/div[659]/li[74]/div[671]/li[75]/div[683]/li[76]/div[695]/li[77]/div[707]/li[78]/div[719]/li[79]/div[731]/li[80]/div[743]/li[81]/div[755]/li[82]/div[767]/li[83]/div[779]/li[84]/div[791]/li[85]/div[803]/li[86]/div[815]/li[87]/div[827]/li[88]/div[839]/li[89]/div[851]/li[90]/div[863]/li[91]/div[875]/li[92]/div[887]/li[93]/div[899]/li[94]/div[911]/li[95]/div[923]/li[96]/div[935]/li[97]/div[949]/li[98]/div[961]/li[99]/div[973]/li[100]/div[985]/li[101]/div[997]/li[102]/div[1009]/li[103]/div[1021]/li[104]/div[1033]/li[105]/div[1045]/li[106]/div[1057]/li[107]/div[1069]/li[108]/div[1083]/li[109]/div[1095]/li[110]/div[1107]/li[111]/div[1119]/li[112]/div[1131]/li[113]/div[1145]/li[114]/div[1157]/li[115]/div[1169]/li[116]/div[1183]/li[117]/div[1195]/li[118]/div[1209]/li[119]/div[1223]/li[120]/div[1237]/li[121]/div[1249]/li[122]/div[1263]/li[123]/div[1275]/li[124]/div[1287]/li[125]/div[1301]/li[126]/div[1313]/li[127]/div[1324]/li[128]/div[1336]/li[129]/div[1350]/li[130]/div[1362]/li[131]/div[1374]/li[132]/div[1386]/li[133]/div[1400]/li[134]/div[1414]/li[135]/div[1428]/li[136]/div[1442]/li[137]/div[1456]/li[138]/div[1470]/li[139]/div[1482]/li[140]/div[1496]/li[141]/div[1510]/li[142]/div[1524]/li[143]/div[1538]/li[144]/div[1550]/li[145]/div[1564]/li[146]/div[1576]/li[147]/div[1590]/li[148]/div[1604]/li[149]/div[1618]/li[150]/div[1632]/li[151]/div[1644]/li[152]/div[1655]/li[153]/div[1669]/li[154]/div[1683]/li[155]/div[1697]/li[156]/div[1711]/li[157]/div[1725]/li[158]/div[1739]/li[159]/div[1753]/li[160]/div[1767]/li[161]/div[1781]/li[162]/div[1795]/li[163]/div[1807]/li[164]/div[1821]/li[165]/div[1835]/li[166]/div[1849]/li[167]/div[1863]/li[168]/div[1877]/li[169]/div[1891]/li[170]/div[1903]/li[171]/div[1917]/li[172]/div[1931]/li[173]/div[1943]/li[174]/div[1957]/li[175]/div[1971]/li[176]/div[1985]/li[177]/div[1999]/li[178]/div[2013]/li[179]/div[2027]/li[180]/div[2039]/li[181]/div[2053]/li[182]/div[2067]/li[183]/div[2081]/li[184]/div[2095]/li[185]/div[2109]/li[186]/div[2123]/li[187]/div[2137]/li[188]/div[2151]/li[189]/div[2165]/li[190]/div[2179]/li[191]/div[2193]/li[192]/div[2205]/li[193]/div[2219]/li[194]/div[2233]/li[195]/div[2247]/li[196]/div[2261]/li[197]/div[2273]/li[198]/div[2287]/li[199]/div[2301]/li[200]/div[2315]/li[201]/div[2329]/li[202]/div[2343]/li[203]/div[2357]/li[204]/div[2371]/li[205]/div[2385]/li[206]/div[2399]/li[207]/div[2413]/li[208]/div[2427]/li[209]/div[2441]/li[210]/div[2455]/li[211]/div[2469]/li[212]/div[2483]/li[213]/div[2497]/li[214]/div[2509]/li[215]/div[2523]/li[216]/div[2537]/li[217]/div[2551]/li[218]/div[2565]/li[219]/div[2579]/li[220]/div[2591]/li[221]/div[2605]/li[222]/div[2617]/li[223]/div[2631]/li[224]/div[2645]/li[225]/div[2659]/li[226]/div[2670]/li[227]/div[2684]/li[228]/div[2698]/li[229]/div[2712]/li[230]/div[2726]/li[231]/div[2740]/li[232]/div[2754]/li[233]/div[2768]/li[234]/div[2779]/li[235]/div[2793]/li[236]/div[2805]/li[237]/div[2819]/li[238]/div[2830]/li[239]/div[2841]/li[240]/div[2855]/li[241]/div[2869]/li[242]/div[2880]/li[243]/div[2894]/li[244]/div[2908]/li[245]/div[2922]/li[246]/div[2933]/li[247]/div[2947]/li[248]/div[2961]/li[249]/div[2975]/li[250]/div[2989]/li[251]/div[3001]/li[252]/div[3015]/li[253]/div[3029]/li[254]/div[3043]/section[221]/img[452]/div[3044]/div[3045]/div[3046]/a[452]", + "html_file": "/Volumes/KINGSTON/data/glam/data/custodian/person/affiliated/manual/(7) Van Gogh Museum_ People _ LinkedIn.html", + "xpath_match_score": 1.0, + "retrieval_agent": "extract_persons_with_provenance.py" + }, + { + "claim_type": "connection_degree", + "claim_value": "3rd+", + "source_url": "https://www.linkedin.com/company/van-gogh-museum/people/", + "retrieved_on": "2025-12-12T20:28:49.720000+00:00", + "statement_created_at": "2026-01-09T22:45:55.053930+00:00", + "source_archived_at": "2025-12-12T20:28:49.720000+00:00", + "xpath": "/html[1]/head[1]/meta[1]/meta[2]/meta[3]/meta[4]/meta[5]/meta[6]/meta[7]/meta[8]/meta[9]/meta[10]/meta[11]/meta[12]/meta[13]/meta[14]/link[1]/link[2]/link[3]/link[4]/link[5]/link[6]/link[7]/meta[15]/meta[16]/meta[17]/meta[18]/meta[19]/meta[20]/meta[21]/meta[22]/meta[23]/meta[24]/meta[25]/meta[26]/link[8]/link[9]/link[10]/link[11]/link[12]/meta[27]/meta[28]/meta[29]/meta[30]/meta[31]/meta[32]/meta[33]/meta[34]/meta[35]/meta[36]/meta[37]/meta[38]/meta[39]/meta[40]/meta[41]/meta[42]/meta[43]/meta[44]/meta[45]/meta[46]/meta[47]/meta[48]/meta[49]/meta[50]/meta[51]/meta[52]/meta[53]/meta[54]/meta[55]/meta[56]/meta[57]/meta[58]/meta[59]/meta[60]/meta[61]/meta[62]/meta[63]/meta[64]/meta[65]/meta[66]/meta[67]/meta[68]/meta[69]/meta[70]/meta[71]/meta[72]/meta[73]/meta[74]/meta[75]/meta[76]/meta[77]/meta[78]/meta[79]/meta[80]/meta[81]/meta[82]/meta[83]/meta[84]/meta[85]/meta[86]/meta[87]/meta[88]/meta[89]/meta[90]/meta[91]/meta[92]/meta[93]/meta[94]/meta[95]/meta[96]/meta[97]/meta[98]/meta[99]/meta[100]/meta[101]/meta[102]/meta[103]/meta[104]/meta[105]/meta[106]/meta[107]/meta[108]/meta[109]/meta[110]/meta[111]/meta[112]/meta[113]/meta[114]/meta[115]/meta[116]/meta[117]/meta[118]/meta[119]/meta[120]/meta[121]/meta[122]/meta[123]/meta[124]/meta[125]/meta[126]/meta[127]/meta[128]/meta[129]/meta[130]/meta[131]/meta[132]/meta[133]/meta[134]/meta[135]/meta[136]/meta[137]/meta[138]/meta[139]/meta[140]/meta[141]/link[13]/link[14]/meta[142]/meta[143]/link[15]/link[16]/link[17]/link[18]/link[19]/link[20]/link[21]/link[22]/link[23]/link[24]/link[25]/link[26]/link[27]/link[28]/link[29]/link[30]/link[31]/link[32]/link[33]/link[34]/link[35]/link[36]/link[37]/link[38]/link[39]/link[40]/link[41]/link[42]/link[43]/link[44]/link[45]/body[1]/img[1]/img[2]/img[3]/img[4]/img[5]/div[27]/header[2]/div[31]/div[62]/div[63]/div[65]/div[66]/div[67]/div[87]/main[1]/div[88]/section[2]/div[89]/div[90]/div[91]/div[97]/div[101]/div[102]/div[103]/div[127]/section[3]/div[131]/div[184]/div[185]/div[186]/div[234]/div[235]/div[236]/ul[7]/li[38]/div[237]/li[39]/div[251]/li[40]/div[263]/li[41]/div[275]/li[42]/div[287]/li[43]/div[299]/li[44]/div[311]/li[45]/div[323]/li[46]/div[335]/li[47]/div[347]/li[48]/div[359]/li[49]/div[371]/li[50]/div[383]/li[51]/div[395]/li[52]/div[407]/li[53]/div[419]/li[54]/div[431]/li[55]/div[443]/li[56]/div[455]/li[57]/div[467]/li[58]/div[479]/li[59]/div[491]/li[60]/div[503]/li[61]/div[515]/li[62]/div[527]/li[63]/div[539]/li[64]/div[551]/li[65]/div[563]/li[66]/div[575]/li[67]/div[587]/li[68]/div[599]/li[69]/div[611]/li[70]/div[623]/li[71]/div[635]/li[72]/div[647]/li[73]/div[659]/li[74]/div[671]/li[75]/div[683]/li[76]/div[695]/li[77]/div[707]/li[78]/div[719]/li[79]/div[731]/li[80]/div[743]/li[81]/div[755]/li[82]/div[767]/li[83]/div[779]/li[84]/div[791]/li[85]/div[803]/li[86]/div[815]/li[87]/div[827]/li[88]/div[839]/li[89]/div[851]/li[90]/div[863]/li[91]/div[875]/li[92]/div[887]/li[93]/div[899]/li[94]/div[911]/li[95]/div[923]/li[96]/div[935]/li[97]/div[949]/li[98]/div[961]/li[99]/div[973]/li[100]/div[985]/li[101]/div[997]/li[102]/div[1009]/li[103]/div[1021]/li[104]/div[1033]/li[105]/div[1045]/li[106]/div[1057]/li[107]/div[1069]/li[108]/div[1083]/li[109]/div[1095]/li[110]/div[1107]/li[111]/div[1119]/li[112]/div[1131]/li[113]/div[1145]/li[114]/div[1157]/li[115]/div[1169]/li[116]/div[1183]/li[117]/div[1195]/li[118]/div[1209]/li[119]/div[1223]/li[120]/div[1237]/li[121]/div[1249]/li[122]/div[1263]/li[123]/div[1275]/li[124]/div[1287]/li[125]/div[1301]/li[126]/div[1313]/li[127]/div[1324]/li[128]/div[1336]/li[129]/div[1350]/li[130]/div[1362]/li[131]/div[1374]/li[132]/div[1386]/li[133]/div[1400]/li[134]/div[1414]/li[135]/div[1428]/li[136]/div[1442]/li[137]/div[1456]/li[138]/div[1470]/li[139]/div[1482]/li[140]/div[1496]/li[141]/div[1510]/li[142]/div[1524]/li[143]/div[1538]/li[144]/div[1550]/li[145]/div[1564]/li[146]/div[1576]/li[147]/div[1590]/li[148]/div[1604]/li[149]/div[1618]/li[150]/div[1632]/li[151]/div[1644]/li[152]/div[1655]/li[153]/div[1669]/li[154]/div[1683]/li[155]/div[1697]/li[156]/div[1711]/li[157]/div[1725]/li[158]/div[1739]/li[159]/div[1753]/li[160]/div[1767]/li[161]/div[1781]/li[162]/div[1795]/li[163]/div[1807]/li[164]/div[1821]/li[165]/div[1835]/li[166]/div[1849]/li[167]/div[1863]/li[168]/div[1877]/li[169]/div[1891]/li[170]/div[1903]/li[171]/div[1917]/li[172]/div[1931]/li[173]/div[1943]/li[174]/div[1957]/li[175]/div[1971]/li[176]/div[1985]/li[177]/div[1999]/li[178]/div[2013]/li[179]/div[2027]/li[180]/div[2039]/li[181]/div[2053]/li[182]/div[2067]/li[183]/div[2081]/li[184]/div[2095]/li[185]/div[2109]/li[186]/div[2123]/li[187]/div[2137]/li[188]/div[2151]/li[189]/div[2165]/li[190]/div[2179]/li[191]/div[2193]/li[192]/div[2205]/li[193]/div[2219]/li[194]/div[2233]/li[195]/div[2247]/li[196]/div[2261]/li[197]/div[2273]/li[198]/div[2287]/li[199]/div[2301]/li[200]/div[2315]/li[201]/div[2329]/li[202]/div[2343]/li[203]/div[2357]/li[204]/div[2371]/li[205]/div[2385]/li[206]/div[2399]/li[207]/div[2413]/li[208]/div[2427]/li[209]/div[2441]/li[210]/div[2455]/li[211]/div[2469]/li[212]/div[2483]/li[213]/div[2497]/li[214]/div[2509]/li[215]/div[2523]/li[216]/div[2537]/li[217]/div[2551]/li[218]/div[2565]/li[219]/div[2579]/li[220]/div[2591]/li[221]/div[2605]/li[222]/div[2617]/li[223]/div[2631]/li[224]/div[2645]/li[225]/div[2659]/li[226]/div[2670]/li[227]/div[2684]/li[228]/div[2698]/li[229]/div[2712]/li[230]/div[2726]/li[231]/div[2740]/li[232]/div[2754]/li[233]/div[2768]/li[234]/div[2779]/li[235]/div[2793]/li[236]/div[2805]/li[237]/div[2819]/li[238]/div[2830]/li[239]/div[2841]/li[240]/div[2855]/li[241]/div[2869]/li[242]/div[2880]/li[243]/div[2894]/li[244]/div[2908]/li[245]/div[2922]/li[246]/div[2933]/li[247]/div[2947]/li[248]/div[2961]/li[249]/div[2975]/li[250]/div[2989]/li[251]/div[3001]/li[252]/div[3015]/li[253]/div[3029]/li[254]/div[3043]/section[221]/img[452]/div[3044]/div[3045]/div[3046]/div[3047]/div[3050]", + "html_file": "/Volumes/KINGSTON/data/glam/data/custodian/person/affiliated/manual/(7) Van Gogh Museum_ People _ LinkedIn.html", + "xpath_match_score": 1.0, + "retrieval_agent": "extract_persons_with_provenance.py" + }, + { + "claim_type": "headline", + "claim_value": "Researcher Van Gogh Museum", + "source_url": "https://www.linkedin.com/company/van-gogh-museum/people/", + "retrieved_on": "2025-12-12T20:28:49.720000+00:00", + "statement_created_at": "2026-01-09T22:45:55.054327+00:00", + "source_archived_at": "2025-12-12T20:28:49.720000+00:00", + "xpath": "/html[1]/head[1]/meta[1]/meta[2]/meta[3]/meta[4]/meta[5]/meta[6]/meta[7]/meta[8]/meta[9]/meta[10]/meta[11]/meta[12]/meta[13]/meta[14]/link[1]/link[2]/link[3]/link[4]/link[5]/link[6]/link[7]/meta[15]/meta[16]/meta[17]/meta[18]/meta[19]/meta[20]/meta[21]/meta[22]/meta[23]/meta[24]/meta[25]/meta[26]/link[8]/link[9]/link[10]/link[11]/link[12]/meta[27]/meta[28]/meta[29]/meta[30]/meta[31]/meta[32]/meta[33]/meta[34]/meta[35]/meta[36]/meta[37]/meta[38]/meta[39]/meta[40]/meta[41]/meta[42]/meta[43]/meta[44]/meta[45]/meta[46]/meta[47]/meta[48]/meta[49]/meta[50]/meta[51]/meta[52]/meta[53]/meta[54]/meta[55]/meta[56]/meta[57]/meta[58]/meta[59]/meta[60]/meta[61]/meta[62]/meta[63]/meta[64]/meta[65]/meta[66]/meta[67]/meta[68]/meta[69]/meta[70]/meta[71]/meta[72]/meta[73]/meta[74]/meta[75]/meta[76]/meta[77]/meta[78]/meta[79]/meta[80]/meta[81]/meta[82]/meta[83]/meta[84]/meta[85]/meta[86]/meta[87]/meta[88]/meta[89]/meta[90]/meta[91]/meta[92]/meta[93]/meta[94]/meta[95]/meta[96]/meta[97]/meta[98]/meta[99]/meta[100]/meta[101]/meta[102]/meta[103]/meta[104]/meta[105]/meta[106]/meta[107]/meta[108]/meta[109]/meta[110]/meta[111]/meta[112]/meta[113]/meta[114]/meta[115]/meta[116]/meta[117]/meta[118]/meta[119]/meta[120]/meta[121]/meta[122]/meta[123]/meta[124]/meta[125]/meta[126]/meta[127]/meta[128]/meta[129]/meta[130]/meta[131]/meta[132]/meta[133]/meta[134]/meta[135]/meta[136]/meta[137]/meta[138]/meta[139]/meta[140]/meta[141]/link[13]/link[14]/meta[142]/meta[143]/link[15]/link[16]/link[17]/link[18]/link[19]/link[20]/link[21]/link[22]/link[23]/link[24]/link[25]/link[26]/link[27]/link[28]/link[29]/link[30]/link[31]/link[32]/link[33]/link[34]/link[35]/link[36]/link[37]/link[38]/link[39]/link[40]/link[41]/link[42]/link[43]/link[44]/link[45]/body[1]/img[1]/img[2]/img[3]/img[4]/img[5]/div[27]/header[2]/div[31]/div[62]/div[63]/div[65]/div[66]/div[67]/div[87]/main[1]/div[88]/section[2]/div[89]/div[90]/div[91]/div[97]/div[101]/div[102]/div[103]/div[127]/section[3]/div[131]/div[184]/div[185]/div[186]/div[234]/div[235]/div[236]/ul[7]/li[38]/div[237]/li[39]/div[251]/li[40]/div[263]/li[41]/div[275]/li[42]/div[287]/li[43]/div[299]/li[44]/div[311]/li[45]/div[323]/li[46]/div[335]/li[47]/div[347]/li[48]/div[359]/li[49]/div[371]/li[50]/div[383]/li[51]/div[395]/li[52]/div[407]/li[53]/div[419]/li[54]/div[431]/li[55]/div[443]/li[56]/div[455]/li[57]/div[467]/li[58]/div[479]/li[59]/div[491]/li[60]/div[503]/li[61]/div[515]/li[62]/div[527]/li[63]/div[539]/li[64]/div[551]/li[65]/div[563]/li[66]/div[575]/li[67]/div[587]/li[68]/div[599]/li[69]/div[611]/li[70]/div[623]/li[71]/div[635]/li[72]/div[647]/li[73]/div[659]/li[74]/div[671]/li[75]/div[683]/li[76]/div[695]/li[77]/div[707]/li[78]/div[719]/li[79]/div[731]/li[80]/div[743]/li[81]/div[755]/li[82]/div[767]/li[83]/div[779]/li[84]/div[791]/li[85]/div[803]/li[86]/div[815]/li[87]/div[827]/li[88]/div[839]/li[89]/div[851]/li[90]/div[863]/li[91]/div[875]/li[92]/div[887]/li[93]/div[899]/li[94]/div[911]/li[95]/div[923]/li[96]/div[935]/li[97]/div[949]/li[98]/div[961]/li[99]/div[973]/li[100]/div[985]/li[101]/div[997]/li[102]/div[1009]/li[103]/div[1021]/li[104]/div[1033]/li[105]/div[1045]/li[106]/div[1057]/li[107]/div[1069]/li[108]/div[1083]/li[109]/div[1095]/li[110]/div[1107]/li[111]/div[1119]/li[112]/div[1131]/li[113]/div[1145]/li[114]/div[1157]/li[115]/div[1169]/li[116]/div[1183]/li[117]/div[1195]/li[118]/div[1209]/li[119]/div[1223]/li[120]/div[1237]/li[121]/div[1249]/li[122]/div[1263]/li[123]/div[1275]/li[124]/div[1287]/li[125]/div[1301]/li[126]/div[1313]/li[127]/div[1324]/li[128]/div[1336]/li[129]/div[1350]/li[130]/div[1362]/li[131]/div[1374]/li[132]/div[1386]/li[133]/div[1400]/li[134]/div[1414]/li[135]/div[1428]/li[136]/div[1442]/li[137]/div[1456]/li[138]/div[1470]/li[139]/div[1482]/li[140]/div[1496]/li[141]/div[1510]/li[142]/div[1524]/li[143]/div[1538]/li[144]/div[1550]/li[145]/div[1564]/li[146]/div[1576]/li[147]/div[1590]/li[148]/div[1604]/li[149]/div[1618]/li[150]/div[1632]/li[151]/div[1644]/li[152]/div[1655]/li[153]/div[1669]/li[154]/div[1683]/li[155]/div[1697]/li[156]/div[1711]/li[157]/div[1725]/li[158]/div[1739]/li[159]/div[1753]/li[160]/div[1767]/li[161]/div[1781]/li[162]/div[1795]/li[163]/div[1807]/li[164]/div[1821]/li[165]/div[1835]/li[166]/div[1849]/li[167]/div[1863]/li[168]/div[1877]/li[169]/div[1891]/li[170]/div[1903]/li[171]/div[1917]/li[172]/div[1931]/li[173]/div[1943]/li[174]/div[1957]/li[175]/div[1971]/li[176]/div[1985]/li[177]/div[1999]/li[178]/div[2013]/li[179]/div[2027]/li[180]/div[2039]/li[181]/div[2053]/li[182]/div[2067]/li[183]/div[2081]/li[184]/div[2095]/li[185]/div[2109]/li[186]/div[2123]/li[187]/div[2137]/li[188]/div[2151]/li[189]/div[2165]/li[190]/div[2179]/li[191]/div[2193]/li[192]/div[2205]/li[193]/div[2219]/li[194]/div[2233]/li[195]/div[2247]/li[196]/div[2261]/li[197]/div[2273]/li[198]/div[2287]/li[199]/div[2301]/li[200]/div[2315]/li[201]/div[2329]/li[202]/div[2343]/li[203]/div[2357]/li[204]/div[2371]/li[205]/div[2385]/li[206]/div[2399]/li[207]/div[2413]/li[208]/div[2427]/li[209]/div[2441]/li[210]/div[2455]/li[211]/div[2469]/li[212]/div[2483]/li[213]/div[2497]/li[214]/div[2509]/li[215]/div[2523]/li[216]/div[2537]/li[217]/div[2551]/li[218]/div[2565]/li[219]/div[2579]/li[220]/div[2591]/li[221]/div[2605]/li[222]/div[2617]/li[223]/div[2631]/li[224]/div[2645]/li[225]/div[2659]/li[226]/div[2670]/li[227]/div[2684]/li[228]/div[2698]/li[229]/div[2712]/li[230]/div[2726]/li[231]/div[2740]/li[232]/div[2754]/li[233]/div[2768]/li[234]/div[2779]/li[235]/div[2793]/li[236]/div[2805]/li[237]/div[2819]/li[238]/div[2830]/li[239]/div[2841]/li[240]/div[2855]/li[241]/div[2869]/li[242]/div[2880]/li[243]/div[2894]/li[244]/div[2908]/li[245]/div[2922]/li[246]/div[2933]/li[247]/div[2947]/li[248]/div[2961]/li[249]/div[2975]/li[250]/div[2989]/li[251]/div[3001]/li[252]/div[3015]/li[253]/div[3029]/li[254]/div[3043]/section[221]/img[452]/div[3044]/div[3045]/div[3046]/div[3047]/div[3051]/div[3052]/div[3053]", + "html_file": "/Volumes/KINGSTON/data/glam/data/custodian/person/affiliated/manual/(7) Van Gogh Museum_ People _ LinkedIn.html", + "xpath_match_score": 1.0, + "retrieval_agent": "extract_persons_with_provenance.py" + } + ], + "linkedin_slug": "teio-meedendorp-2ab21519" +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_THOMAS-BERGHUIS-c586002f_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_THOMAS-BERGHUIS-c586002f_20260115_114918.json new file mode 100644 index 0000000000..d3afc3f7bb --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_THOMAS-BERGHUIS-c586002f_20260115_114918.json @@ -0,0 +1,104 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_THOMAS-BERGHUIS-c586002f", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "THOMAS", + "BERGHUIS" + ], + "collision_uuid": "c586002f" + }, + "name": "Thomas Berghuis", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "191371", + "username": "ThoBergh73", + "username_url": "/user/191371", + "abs_id": "110.968898", + "crm_id": "59a65ec8-2384-e811-8101-8ee32d505d2e" + }, + "contact_details": { + "email": "dr.t.j.berghuis@gmail.com", + "email_domain": "gmail.com" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "di 10-07-2018 - 11:29", + "last_access": "7 jaar 5 maanden ago", + "operations": [ + { + "text": "Bewerken", + "url": "/en/user/191371/edit?destination=/admin/people%3Fpage%3D3874" + }, + { + "text": "Rollen", + "url": "/user/191371/roles?destination=/admin/people%3Fpage%3D3874" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 1, + "match_candidates": [ + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_THOMAS-BERGHUIS", + "linkedin_name": "Thomas Berghuis", + "linkedin_slug": "thomasberghuis", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:25.962020+00:00", + "annotation_script": "annotate_match_candidates.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_users.py", + "extraction_date": "2026-01-11T17:12:49.644146+00:00", + "source_file": "users/user_191371.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_191371.json", + "original_user_id": "191371", + "migrated_at": "2026-01-11T17:12:49.644155+00:00", + "migration_script": "migrate_wcms_users.py", + "migration_version": "1.0" + } +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_VINCENT-ROBIJN-d4baeb1b_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_VINCENT-ROBIJN-d4baeb1b_20260115_114918.json new file mode 100644 index 0000000000..a1ab745ec8 --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_VINCENT-ROBIJN-d4baeb1b_20260115_114918.json @@ -0,0 +1,218 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_VINCENT-ROBIJN-d4baeb1b", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "VINCENT", + "ROBIJN" + ], + "collision_uuid": "d4baeb1b" + }, + "name": "Vincent Robijn", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "156262", + "username": "vincentrobijn", + "username_url": "/user/156262", + "abs_id": "110.295393", + "crm_id": "399FFC92-88AE-E111-877B-005056930016" + }, + "contact_details": { + "email": "vincentrobijn@gmail.com", + "email_domain": "gmail.com" + }, + "wcms_activity": { + "status": "Active", + "roles": [ + "Beta gebruiker" + ], + "registered_since": "ma 04-06-2012 - 23:02", + "last_access": "10 maanden 1 week ago", + "operations": [ + { + "text": "Bewerken", + "url": "/user/156262/edit?destination=/admin/people%3Fpage%3D4543" + }, + { + "text": "Rollen", + "url": "/user/156262/roles?destination=/admin/people%3Fpage%3D4543" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 2, + "match_candidates": [ + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_VINCENT-ROBIJN", + "linkedin_name": { + "full_name": "Vincent Robijn", + "display_name": "Vincent Robijn", + "name_romanized": null, + "name_tokens": [ + "VINCENT", + "ROBIJN" + ], + "source": "linkedin_profile" + }, + "linkedin_slug": "vincent-robijn-7b22a220", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": true, + "review_decision": "match", + "reviewed_by": "reviewer", + "reviewed_at": "2026-01-13T12:36:10.247619+00:00" + }, + { + "linkedin_ppid": "ID_NL-GR-GRO_197X_NL-OV-ZWO_XXXX_VINCENT-ROBIJN", + "linkedin_name": "Vincent Robijn", + "linkedin_slug": "vincent-robijn-7b22a220", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:25.009400+00:00", + "annotation_script": "annotate_match_candidates.py", + "resolved": true, + "resolved_linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_VINCENT-ROBIJN", + "resolved_linkedin_slug": "vincent-robijn-7b22a220", + "resolution_confidence": 0.65, + "resolution_signals": [ + "email_name_parts", + "exact_name_match" + ], + "resolution_decision": "match", + "resolved_by": "reviewer", + "resolved_at": "2026-01-13T12:36:10.247619+00:00", + "merge_timestamp": "2026-01-15T10:49:18.579568+00:00", + "merge_script": "merge_reviewed_profiles.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms", + "linkedin" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_users.py", + "extraction_date": "2026-01-11T17:07:25.864987+00:00", + "source_file": "users/user_156262.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_156262.json", + "original_user_id": "156262", + "migrated_at": "2026-01-11T17:07:25.864991+00:00", + "migration_script": "migrate_wcms_users.py", + "migration_version": "1.0" + }, + "profile_data": { + "headline": "Directeur bij Collectie Overijssel", + "linkedin_url": "https://www.linkedin.com/in/vincent-robijn-7b22a220" + }, + "affiliations": [ + { + "custodian_name": "Collectie Overijssel", + "custodian_slug": "collectie-overijssel", + "role_title": "Directeur bij Collectie Overijssel", + "affiliation_provenance": { + "source": "LinkedIn company people page", + "source_url": "https://www.linkedin.com/in/vincent-robijn-7b22a220", + "retrieved_on": "2025-12-10T14:20:38.900000+00:00", + "retrieval_agent": "extract_persons_with_provenance.py" + } + } + ], + "heritage_relevance": { + "is_heritage_relevant": true, + "heritage_types": [ + "M" + ], + "rationale": "Identified as staff at Collectie Overijssel" + }, + "web_claims": [ + { + "claim_type": "linkedin_url", + "claim_value": "https://www.linkedin.com/in/vincent-robijn-7b22a220", + "source_url": "https://www.linkedin.com/company/collectie-overijssel/people/", + "retrieved_on": "2025-12-10T14:20:38.900000+00:00", + "statement_created_at": "2026-01-09T22:45:57.123295+00:00", + "source_archived_at": "2025-12-10T14:20:38.900000+00:00", + "xpath": "/html[1]/head[1]/meta[1]/meta[2]/meta[3]/meta[4]/meta[5]/meta[6]/meta[7]/meta[8]/meta[9]/meta[10]/meta[11]/meta[12]/meta[13]/meta[14]/link[1]/link[2]/link[3]/link[4]/link[5]/link[6]/link[7]/meta[15]/meta[16]/meta[17]/meta[18]/meta[19]/meta[20]/meta[21]/meta[22]/meta[23]/meta[24]/meta[25]/meta[26]/link[8]/link[9]/link[10]/link[11]/link[12]/meta[27]/meta[28]/meta[29]/meta[30]/meta[31]/meta[32]/meta[33]/meta[34]/meta[35]/meta[36]/meta[37]/meta[38]/meta[39]/meta[40]/meta[41]/meta[42]/meta[43]/meta[44]/meta[45]/meta[46]/meta[47]/meta[48]/meta[49]/meta[50]/meta[51]/meta[52]/meta[53]/meta[54]/meta[55]/meta[56]/meta[57]/meta[58]/meta[59]/meta[60]/meta[61]/meta[62]/meta[63]/meta[64]/meta[65]/meta[66]/meta[67]/meta[68]/meta[69]/meta[70]/meta[71]/meta[72]/meta[73]/meta[74]/meta[75]/meta[76]/meta[77]/meta[78]/meta[79]/meta[80]/meta[81]/meta[82]/meta[83]/meta[84]/meta[85]/meta[86]/meta[87]/meta[88]/meta[89]/meta[90]/meta[91]/meta[92]/meta[93]/meta[94]/meta[95]/meta[96]/meta[97]/meta[98]/meta[99]/meta[100]/meta[101]/meta[102]/meta[103]/meta[104]/meta[105]/meta[106]/meta[107]/meta[108]/meta[109]/meta[110]/meta[111]/meta[112]/meta[113]/meta[114]/meta[115]/meta[116]/meta[117]/meta[118]/meta[119]/meta[120]/meta[121]/meta[122]/meta[123]/meta[124]/meta[125]/meta[126]/meta[127]/meta[128]/meta[129]/meta[130]/meta[131]/meta[132]/meta[133]/meta[134]/meta[135]/meta[136]/meta[137]/meta[138]/meta[139]/meta[140]/meta[141]/link[13]/link[14]/meta[142]/meta[143]/link[15]/link[16]/link[17]/link[18]/link[19]/link[20]/link[21]/link[22]/link[23]/link[24]/link[25]/link[26]/link[27]/link[28]/link[29]/link[30]/link[31]/link[32]/link[33]/link[34]/body[1]/img[1]/img[2]/img[3]/img[4]/img[5]/img[6]/img[7]/img[8]/img[9]/img[10]/img[11]/img[12]/img[13]/div[28]/header[2]/div[32]/div[63]/div[64]/div[66]/div[67]/div[68]/div[88]/main[1]/div[89]/section[2]/div[125]/div[126]/div[127]/div[175]/div[176]/div[177]/ul[6]/li[33]/div[178]/li[34]/div[190]/li[35]/div[202]/li[36]/div[214]/li[37]/div[228]/li[38]/div[240]/li[39]/div[252]/li[40]/div[264]/li[41]/div[276]/li[42]/div[288]/li[43]/div[300]/li[44]/div[312]/section[15]/img[40]/div[313]/div[314]/div[315]/a[44]", + "html_file": "/Volumes/KINGSTON/data/glam/data/custodian/person/affiliated/manual/(8) Collectie Overijssel_ People _ LinkedIn.html", + "xpath_match_score": 1.0, + "retrieval_agent": "extract_persons_with_provenance.py" + }, + { + "claim_type": "full_name", + "claim_value": "Vincent Robijn", + "source_url": "https://www.linkedin.com/company/collectie-overijssel/people/", + "retrieved_on": "2025-12-10T14:20:38.900000+00:00", + "statement_created_at": "2026-01-09T22:45:57.123380+00:00", + "source_archived_at": "2025-12-10T14:20:38.900000+00:00", + "xpath": "/html[1]/head[1]/meta[1]/meta[2]/meta[3]/meta[4]/meta[5]/meta[6]/meta[7]/meta[8]/meta[9]/meta[10]/meta[11]/meta[12]/meta[13]/meta[14]/link[1]/link[2]/link[3]/link[4]/link[5]/link[6]/link[7]/meta[15]/meta[16]/meta[17]/meta[18]/meta[19]/meta[20]/meta[21]/meta[22]/meta[23]/meta[24]/meta[25]/meta[26]/link[8]/link[9]/link[10]/link[11]/link[12]/meta[27]/meta[28]/meta[29]/meta[30]/meta[31]/meta[32]/meta[33]/meta[34]/meta[35]/meta[36]/meta[37]/meta[38]/meta[39]/meta[40]/meta[41]/meta[42]/meta[43]/meta[44]/meta[45]/meta[46]/meta[47]/meta[48]/meta[49]/meta[50]/meta[51]/meta[52]/meta[53]/meta[54]/meta[55]/meta[56]/meta[57]/meta[58]/meta[59]/meta[60]/meta[61]/meta[62]/meta[63]/meta[64]/meta[65]/meta[66]/meta[67]/meta[68]/meta[69]/meta[70]/meta[71]/meta[72]/meta[73]/meta[74]/meta[75]/meta[76]/meta[77]/meta[78]/meta[79]/meta[80]/meta[81]/meta[82]/meta[83]/meta[84]/meta[85]/meta[86]/meta[87]/meta[88]/meta[89]/meta[90]/meta[91]/meta[92]/meta[93]/meta[94]/meta[95]/meta[96]/meta[97]/meta[98]/meta[99]/meta[100]/meta[101]/meta[102]/meta[103]/meta[104]/meta[105]/meta[106]/meta[107]/meta[108]/meta[109]/meta[110]/meta[111]/meta[112]/meta[113]/meta[114]/meta[115]/meta[116]/meta[117]/meta[118]/meta[119]/meta[120]/meta[121]/meta[122]/meta[123]/meta[124]/meta[125]/meta[126]/meta[127]/meta[128]/meta[129]/meta[130]/meta[131]/meta[132]/meta[133]/meta[134]/meta[135]/meta[136]/meta[137]/meta[138]/meta[139]/meta[140]/meta[141]/link[13]/link[14]/meta[142]/meta[143]/link[15]/link[16]/link[17]/link[18]/link[19]/link[20]/link[21]/link[22]/link[23]/link[24]/link[25]/link[26]/link[27]/link[28]/link[29]/link[30]/link[31]/link[32]/link[33]/link[34]/body[1]/img[1]/img[2]/img[3]/img[4]/img[5]/img[6]/img[7]/img[8]/img[9]/img[10]/img[11]/img[12]/img[13]/div[28]/header[2]/div[32]/div[63]/div[64]/div[66]/div[67]/div[68]/div[88]/main[1]/div[89]/section[2]/div[125]/div[126]/div[127]/div[175]/div[176]/div[177]/ul[6]/li[33]/div[178]/li[34]/div[190]/li[35]/div[202]/li[36]/div[214]/li[37]/div[228]/li[38]/div[240]/li[39]/div[252]/li[40]/div[264]/li[41]/div[276]/li[42]/div[288]/li[43]/div[300]/li[44]/div[312]/section[15]/img[40]/div[313]/div[314]/div[315]/a[44]/img[41]/@alt", + "html_file": "/Volumes/KINGSTON/data/glam/data/custodian/person/affiliated/manual/(8) Collectie Overijssel_ People _ LinkedIn.html", + "xpath_match_score": 1.0, + "retrieval_agent": "extract_persons_with_provenance.py" + }, + { + "claim_type": "connection_degree", + "claim_value": "1st", + "source_url": "https://www.linkedin.com/company/collectie-overijssel/people/", + "retrieved_on": "2025-12-10T14:20:38.900000+00:00", + "statement_created_at": "2026-01-09T22:45:57.123600+00:00", + "source_archived_at": "2025-12-10T14:20:38.900000+00:00", + "xpath": "/html[1]/head[1]/meta[1]/meta[2]/meta[3]/meta[4]/meta[5]/meta[6]/meta[7]/meta[8]/meta[9]/meta[10]/meta[11]/meta[12]/meta[13]/meta[14]/link[1]/link[2]/link[3]/link[4]/link[5]/link[6]/link[7]/meta[15]/meta[16]/meta[17]/meta[18]/meta[19]/meta[20]/meta[21]/meta[22]/meta[23]/meta[24]/meta[25]/meta[26]/link[8]/link[9]/link[10]/link[11]/link[12]/meta[27]/meta[28]/meta[29]/meta[30]/meta[31]/meta[32]/meta[33]/meta[34]/meta[35]/meta[36]/meta[37]/meta[38]/meta[39]/meta[40]/meta[41]/meta[42]/meta[43]/meta[44]/meta[45]/meta[46]/meta[47]/meta[48]/meta[49]/meta[50]/meta[51]/meta[52]/meta[53]/meta[54]/meta[55]/meta[56]/meta[57]/meta[58]/meta[59]/meta[60]/meta[61]/meta[62]/meta[63]/meta[64]/meta[65]/meta[66]/meta[67]/meta[68]/meta[69]/meta[70]/meta[71]/meta[72]/meta[73]/meta[74]/meta[75]/meta[76]/meta[77]/meta[78]/meta[79]/meta[80]/meta[81]/meta[82]/meta[83]/meta[84]/meta[85]/meta[86]/meta[87]/meta[88]/meta[89]/meta[90]/meta[91]/meta[92]/meta[93]/meta[94]/meta[95]/meta[96]/meta[97]/meta[98]/meta[99]/meta[100]/meta[101]/meta[102]/meta[103]/meta[104]/meta[105]/meta[106]/meta[107]/meta[108]/meta[109]/meta[110]/meta[111]/meta[112]/meta[113]/meta[114]/meta[115]/meta[116]/meta[117]/meta[118]/meta[119]/meta[120]/meta[121]/meta[122]/meta[123]/meta[124]/meta[125]/meta[126]/meta[127]/meta[128]/meta[129]/meta[130]/meta[131]/meta[132]/meta[133]/meta[134]/meta[135]/meta[136]/meta[137]/meta[138]/meta[139]/meta[140]/meta[141]/link[13]/link[14]/meta[142]/meta[143]/link[15]/link[16]/link[17]/link[18]/link[19]/link[20]/link[21]/link[22]/link[23]/link[24]/link[25]/link[26]/link[27]/link[28]/link[29]/link[30]/link[31]/link[32]/link[33]/link[34]/body[1]/img[1]/img[2]/img[3]/img[4]/img[5]/img[6]/img[7]/img[8]/img[9]/img[10]/img[11]/img[12]/img[13]/div[28]/header[2]/div[32]/div[63]/div[64]/div[66]/div[67]/div[68]/div[88]/main[1]/div[89]/section[2]/div[125]/div[126]/div[127]/div[175]/div[176]/div[177]/ul[6]/li[33]/div[178]/li[34]/div[190]/li[35]/div[202]/li[36]/div[214]/li[37]/div[228]/li[38]/div[240]/li[39]/div[252]/li[40]/div[264]/li[41]/div[276]/li[42]/div[288]/li[43]/div[300]/li[44]/div[312]/section[15]/img[40]/div[313]/div[314]/div[315]/div[316]/div[319]", + "html_file": "/Volumes/KINGSTON/data/glam/data/custodian/person/affiliated/manual/(8) Collectie Overijssel_ People _ LinkedIn.html", + "xpath_match_score": 1.0, + "retrieval_agent": "extract_persons_with_provenance.py" + }, + { + "claim_type": "headline", + "claim_value": "Directeur bij Collectie Overijssel", + "source_url": "https://www.linkedin.com/company/collectie-overijssel/people/", + "retrieved_on": "2025-12-10T14:20:38.900000+00:00", + "statement_created_at": "2026-01-09T22:45:57.123689+00:00", + "source_archived_at": "2025-12-10T14:20:38.900000+00:00", + "xpath": "/html[1]/head[1]/meta[1]/meta[2]/meta[3]/meta[4]/meta[5]/meta[6]/meta[7]/meta[8]/meta[9]/meta[10]/meta[11]/meta[12]/meta[13]/meta[14]/link[1]/link[2]/link[3]/link[4]/link[5]/link[6]/link[7]/meta[15]/meta[16]/meta[17]/meta[18]/meta[19]/meta[20]/meta[21]/meta[22]/meta[23]/meta[24]/meta[25]/meta[26]/link[8]/link[9]/link[10]/link[11]/link[12]/meta[27]/meta[28]/meta[29]/meta[30]/meta[31]/meta[32]/meta[33]/meta[34]/meta[35]/meta[36]/meta[37]/meta[38]/meta[39]/meta[40]/meta[41]/meta[42]/meta[43]/meta[44]/meta[45]/meta[46]/meta[47]/meta[48]/meta[49]/meta[50]/meta[51]/meta[52]/meta[53]/meta[54]/meta[55]/meta[56]/meta[57]/meta[58]/meta[59]/meta[60]/meta[61]/meta[62]/meta[63]/meta[64]/meta[65]/meta[66]/meta[67]/meta[68]/meta[69]/meta[70]/meta[71]/meta[72]/meta[73]/meta[74]/meta[75]/meta[76]/meta[77]/meta[78]/meta[79]/meta[80]/meta[81]/meta[82]/meta[83]/meta[84]/meta[85]/meta[86]/meta[87]/meta[88]/meta[89]/meta[90]/meta[91]/meta[92]/meta[93]/meta[94]/meta[95]/meta[96]/meta[97]/meta[98]/meta[99]/meta[100]/meta[101]/meta[102]/meta[103]/meta[104]/meta[105]/meta[106]/meta[107]/meta[108]/meta[109]/meta[110]/meta[111]/meta[112]/meta[113]/meta[114]/meta[115]/meta[116]/meta[117]/meta[118]/meta[119]/meta[120]/meta[121]/meta[122]/meta[123]/meta[124]/meta[125]/meta[126]/meta[127]/meta[128]/meta[129]/meta[130]/meta[131]/meta[132]/meta[133]/meta[134]/meta[135]/meta[136]/meta[137]/meta[138]/meta[139]/meta[140]/meta[141]/link[13]/link[14]/meta[142]/meta[143]/link[15]/link[16]/link[17]/link[18]/link[19]/link[20]/link[21]/link[22]/link[23]/link[24]/link[25]/link[26]/link[27]/link[28]/link[29]/link[30]/link[31]/link[32]/link[33]/link[34]/body[1]/img[1]/img[2]/img[3]/img[4]/img[5]/img[6]/img[7]/img[8]/img[9]/img[10]/img[11]/img[12]/img[13]/div[28]/header[2]/div[32]/div[63]/div[64]/div[66]/div[67]/div[68]/div[88]/main[1]/div[89]/section[2]/div[125]/div[126]/div[127]/div[175]/div[176]/div[177]/ul[6]/li[33]/div[178]/li[34]/div[190]/li[35]/div[202]/li[36]/div[214]/li[37]/div[228]/li[38]/div[240]/li[39]/div[252]/li[40]/div[264]/li[41]/div[276]/li[42]/div[288]/li[43]/div[300]/li[44]/div[312]/section[15]/img[40]/div[313]/div[314]/div[315]/div[316]/div[320]/div[321]/div[322]", + "html_file": "/Volumes/KINGSTON/data/glam/data/custodian/person/affiliated/manual/(8) Collectie Overijssel_ People _ LinkedIn.html", + "xpath_match_score": 1.0, + "retrieval_agent": "extract_persons_with_provenance.py" + } + ], + "linkedin_slug": "vincent-robijn-7b22a220" +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_YAIR-DA-COSTA_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_YAIR-DA-COSTA_20260115_114918.json new file mode 100644 index 0000000000..a5290d8dfe --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_YAIR-DA-COSTA_20260115_114918.json @@ -0,0 +1,104 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_YAIR-DA-COSTA", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "YAIR", + "DA", + "COSTA" + ] + }, + "name": "Yair da Costa", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "160478", + "username": "yairdacosta", + "username_url": "/user/160478", + "abs_id": "110.302328", + "crm_id": "E7F9E89A-AF81-E211-B615-005056930016" + }, + "contact_details": { + "email": "yair.da.costa@gmail.com", + "email_domain": "gmail.com" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "do 28-02-2013 - 15:03", + "last_access": "12 jaar 10 maanden ago", + "operations": [ + { + "text": "Bewerken", + "url": "/en/user/160478/edit?destination=/admin/people%3Fpage%3D4459" + }, + { + "text": "Rollen", + "url": "/user/160478/roles?destination=/admin/people%3Fpage%3D4459" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 1, + "match_candidates": [ + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_YAIR-COSTA", + "linkedin_name": "Yair da Costa", + "linkedin_slug": "yair-da-costa-8b179918", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:25.000550+00:00", + "annotation_script": "annotate_match_candidates.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_users.py", + "extraction_date": "2026-01-11T17:07:34.859477+00:00", + "source_file": "users/user_160478.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_160478.json", + "original_user_id": "160478", + "migrated_at": "2026-01-11T17:07:34.859480+00:00", + "migration_script": "migrate_wcms_users.py", + "migration_version": "1.0" + } +} \ No newline at end of file diff --git a/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_YENTE-SIERKSMA-ab4e4e8a_20260115_114918.json b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_YENTE-SIERKSMA-ab4e4e8a_20260115_114918.json new file mode 100644 index 0000000000..be1de0ae80 --- /dev/null +++ b/data/backups/merge_reviewed/ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_YENTE-SIERKSMA-ab4e4e8a_20260115_114918.json @@ -0,0 +1,104 @@ +{ + "ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_YENTE-SIERKSMA-ab4e4e8a", + "ppid_type": "ID", + "ppid_components": { + "type": "ID", + "first_location": "XX-XX-XXX", + "first_date": "XXXX", + "last_location": "XX-XX-XXX", + "last_date": "XXXX", + "name_tokens": [ + "YENTE", + "SIERKSMA" + ], + "collision_uuid": "ab4e4e8a" + }, + "name": "Yente Sierksma", + "birth_date": { + "edtf": "XXXX", + "precision": "unknown", + "note": "Not available from WCMS" + }, + "is_living": true, + "is_anonymous": false, + "wcms_identifiers": { + "user_id": "164026", + "username": "Yente Sierksma", + "username_url": "/user/164026", + "abs_id": "110.307926", + "crm_id": "38A89225-D04D-E311-983B-005056930016" + }, + "contact_details": { + "email": "yente.sierksma@nationaalarchief.nl", + "email_domain": "nationaalarchief.nl" + }, + "wcms_activity": { + "status": "Active", + "roles": [], + "registered_since": "vr 15-11-2013 - 09:30", + "last_access": "11 jaar 4 maanden ago", + "operations": [ + { + "text": "Bewerken", + "url": "/user/164026/edit?destination=/admin/people%3Fpage%3D4388" + }, + { + "text": "Rollen", + "url": "/user/164026/roles?destination=/admin/people%3Fpage%3D4388" + } + ] + }, + "entity_resolution": { + "potential_linkedin_matches": 1, + "match_candidates": [ + { + "linkedin_ppid": "ID_XX-XX-XXX_XXXX_XX-XX-XXX_XXXX_YENTE-SIERKSMA", + "linkedin_name": "Yente Sierksma", + "linkedin_slug": "yente-sierksma-6bb9a84b", + "confidence_score": 0.6, + "match_signals": [ + "exact_name_match" + ], + "requires_review": true, + "reviewed": false, + "review_decision": null, + "reviewed_by": null, + "reviewed_at": null + } + ], + "requires_manual_review": true, + "auto_merged": false, + "reviewed": false, + "review_notes": null, + "annotation_date": "2026-01-12T10:17:24.767229+00:00", + "annotation_script": "annotate_match_candidates.py" + }, + "profile_classification": { + "primary_classification": "human", + "confidence": 0.95, + "indicators": [ + { + "type": "wcms_user", + "reason": "Registered user in heritage CMS system" + } + ], + "reasoning": "WCMS user profile - registered heritage sector CMS user" + }, + "data_sources": [ + "wcms" + ], + "extraction_metadata": { + "extraction_agent": "migrate_wcms_users.py", + "extraction_date": "2026-01-11T17:09:54.842805+00:00", + "source_file": "users/user_164026.json", + "source_system": "WCMS", + "schema_version": "1.0.0" + }, + "migration_metadata": { + "original_wcms_file": "users/user_164026.json", + "original_user_id": "164026", + "migrated_at": "2026-01-11T17:09:54.842807+00:00", + "migration_script": "migrate_wcms_users.py", + "migration_version": "1.0" + } +} \ No newline at end of file diff --git a/schemas/20251121/linkml/01_custodian_name_modular.yaml b/schemas/20251121/linkml/01_custodian_name_modular.yaml index 08e0756e08..55773eb766 100644 --- a/schemas/20251121/linkml/01_custodian_name_modular.yaml +++ b/schemas/20251121/linkml/01_custodian_name_modular.yaml @@ -67,8 +67,9 @@ imports: - modules/slots/has_auxiliary_platform - modules/slots/located_at - modules/slots/organizational_structure - - modules/slots/unit_name - - modules/slots/unit_type + # unit_name ARCHIVED (2026-01-14) - migrated to has_or_had_label (Rule 53) + # unit_type ARCHIVED (2026-01-15) - migrated to has_or_had_type (Rule 53) + # See: archive/slots/unit_type_archived_20260114.yaml for historical reference - modules/slots/parent_unit - modules/slots/staff_count - modules/slots/contact_point @@ -87,7 +88,7 @@ imports: - modules/slots/identifier_value - modules/slots/identifier - modules/slots/has_or_had_alternative_name - - modules/slots/variant_of_name + # variant_of_name ARCHIVED (2026-01-14) - migrated to has_or_had_variant_name (Rule 53) - modules/slots/justification - modules/slots/language - modules/slots/language_code @@ -134,8 +135,7 @@ imports: - modules/slots/used - modules/slots/preferred_label - modules/slots/place_designation - - modules/slots/valid_from - - modules/slots/valid_to + # valid_from and valid_to ARCHIVED (2026-01-14) - migrated to temporal_extent (Rule 53) - modules/slots/was_derived_from - modules/slots/was_generated_by - modules/slots/was_revision_of @@ -524,7 +524,7 @@ imports: # New slots for registration info - modules/slots/country - modules/slots/description - - modules/slots/website + # website ARCHIVED (2025-01-15) - migrated to has_or_had_official_website (Rule 53) - modules/slots/jurisdiction - modules/slots/primary_register - modules/slots/legal_jurisdiction @@ -534,7 +534,7 @@ imports: - modules/slots/is_or_was_allocated_by - modules/slots/identifier_format_used - modules/slots/canonical_value - - modules/slots/also_identifies_name + # also_identifies_name ARCHIVED (2026-01-15) - migrated (Rule 53) - modules/slots/has_allocation_date # Web portal relationship slots (NEW v0.9.5) @@ -578,7 +578,8 @@ imports: - modules/slots/preservation_note - modules/slots/privacy_note - modules/slots/legal_note - - modules/slots/broader_type + # broader_type ARCHIVED (2026-01-14) - migrated to has_or_had_hypernym (Rule 53) + # See: archive/slots/broader_type_archived_20260114.yaml for historical reference - modules/slots/narrower_type # custodian_type_broader ARCHIVED (2026-01-09) - SKOS hierarchy now defined locally in CustodianType.yaml # See: archive/slots/custodian_type_broader.yaml for historical reference diff --git a/schemas/20251121/linkml/manifest.json b/schemas/20251121/linkml/manifest.json index c0b1507228..b69edd7038 100644 --- a/schemas/20251121/linkml/manifest.json +++ b/schemas/20251121/linkml/manifest.json @@ -1,5 +1,5 @@ { - "generated": "2026-01-15T10:42:35.646Z", + "generated": "2026-01-15T11:25:29.119Z", "schemaRoot": "/schemas/20251121/linkml", "totalFiles": 3026, "categoryCounts": { diff --git a/schemas/20251121/linkml/modules/classes/AllocationAgency.yaml b/schemas/20251121/linkml/modules/classes/AllocationAgency.yaml index a750f7106d..fb30a2aa51 100644 --- a/schemas/20251121/linkml/modules/classes/AllocationAgency.yaml +++ b/schemas/20251121/linkml/modules/classes/AllocationAgency.yaml @@ -14,7 +14,7 @@ imports: - ./Country - ./Subregion - ../slots/description -- ../slots/website +# REMOVED: ../slots/website - using inline attribute definition (Rule 53, migrated 2025-01-15) - ../slots/contact_email - ../slots/specificity_annotation - ../slots/template_specificity diff --git a/schemas/20251121/linkml/modules/classes/Collection.yaml b/schemas/20251121/linkml/modules/classes/Collection.yaml index 1d2124b405..ef094677fc 100644 --- a/schemas/20251121/linkml/modules/classes/Collection.yaml +++ b/schemas/20251121/linkml/modules/classes/Collection.yaml @@ -41,7 +41,7 @@ imports: - ../slots/extent_item - ../slots/has_or_had_finding_aid - ../slots/item -- ../slots/parent_collection +- ../slots/is_or_was_sub_collection_of # was: parent_collection - migrated per Rule 53 (2025-01-15) - ../slots/part_of_custodian_collection - ../slots/provenance_statement - ../slots/record_set_type @@ -117,7 +117,7 @@ classes: - extent_item - has_or_had_finding_aid - item - - parent_collection + - is_or_was_sub_collection_of # was: parent_collection - migrated per Rule 53 (2025-01-15) - part_of_custodian_collection - provenance_statement - record_set_type @@ -271,8 +271,11 @@ classes: examples: - value: https://www.nationaalarchief.nl/onderzoeken/archief/1.04.02/download description: Digital scans of VOC records - parent_collection: + is_or_was_sub_collection_of: range: Collection + description: | + Parent collection in hierarchical arrangement. + MIGRATED from parent_collection slot per slot_fixes.yaml (Rule 53, 2025-01-15). examples: - value: https://nde.nl/ontology/hc/collection/nationaal-archief-voc-fonds description: Series within VOC fonds diff --git a/schemas/20251121/linkml/modules/classes/ContributingAgency.yaml b/schemas/20251121/linkml/modules/classes/ContributingAgency.yaml index 338f710dfd..3fff8d156b 100644 --- a/schemas/20251121/linkml/modules/classes/ContributingAgency.yaml +++ b/schemas/20251121/linkml/modules/classes/ContributingAgency.yaml @@ -19,7 +19,8 @@ imports: - ./SpecificityAnnotation - ./TemplateSpecificityScores - ../slots/description -- ../slots/website +- ../slots/has_or_had_url # was: website - migrated per Rule 53 (2025-01-15) +- ./URL - ../slots/specificity_annotation - ../slots/template_specificity - ../slots/contributor_code @@ -217,7 +218,7 @@ classes: - contribution_start_date - is_active - governance_representative - - website + - has_or_had_url # was: website - migrated per Rule 53 (2025-01-15) - description - is_or_was_also_allocation_agency - member_of @@ -231,3 +232,10 @@ classes: range: AllocationAgency member_of: range: StandardsOrganization + has_or_had_url: + range: URL + inlined: true + multivalued: false + description: | + Official website of the contributing agency. + MIGRATED from website slot per slot_fixes.yaml (Rule 53, 2025-01-15). diff --git a/schemas/20251121/linkml/modules/classes/CurrentArchive.yaml b/schemas/20251121/linkml/modules/classes/CurrentArchive.yaml index ec2ab994a9..84452fa952 100644 --- a/schemas/20251121/linkml/modules/classes/CurrentArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/CurrentArchive.yaml @@ -24,7 +24,9 @@ imports: - ../slots/retention_schedule - ../slots/specificity_annotation - ../slots/template_specificity -- ../slots/transfer_policy +# REMOVED 2026-01-15: transfer_policy - migrated to has_or_had_policy with range TransferPolicy (Rule 53) +- ../slots/has_or_had_policy +- ./TransferPolicy - ../slots/wikidata_entity - ./SpecificityAnnotation - ./TemplateSpecificityScores @@ -41,7 +43,8 @@ classes: - retention_schedule - specificity_annotation - template_specificity - - transfer_policy + # MIGRATED 2026-01-15: transfer_policy → has_or_had_policy with range TransferPolicy (Rule 53) + - has_or_had_policy - wikidata_entity description: "Archive maintaining records still in active/current use by the creating organization.\n\n**Wikidata**: Q3621648\ \ (current archive / archivo corriente / archivio corrente)\n\n**DEFINITION**:\n\nCurrent Archive (also called \"active\ diff --git a/schemas/20251121/linkml/modules/classes/CustodianLegalStatus.yaml b/schemas/20251121/linkml/modules/classes/CustodianLegalStatus.yaml index aeb0d06a8a..4498d204a1 100644 --- a/schemas/20251121/linkml/modules/classes/CustodianLegalStatus.yaml +++ b/schemas/20251121/linkml/modules/classes/CustodianLegalStatus.yaml @@ -47,7 +47,7 @@ imports: - ../slots/has_or_had_registration_number - ../slots/dissolution_date - ../slots/temporal_extent -- ../slots/parent_custodian +- ../slots/is_or_was_suborganization_of # was: parent_custodian - migrated per Rule 53 (2025-01-15) - ../slots/legal_status - ../slots/governance_structure - ../slots/reconstruction_method @@ -118,7 +118,7 @@ classes: - legal_jurisdiction - legal_name - legal_status - - parent_custodian + - is_or_was_suborganization_of # was: parent_custodian - migrated per Rule 53 (2025-01-15) - primary_register - reconstruction_method - refers_to_custodian @@ -226,8 +226,11 @@ classes: begin_of_the_end: '1950-01-01' end_of_the_end: '1955-12-31' description: Museum founded sometime between 1800-1805, closed between 1950-1955 - parent_custodian: + is_or_was_suborganization_of: range: CustodianLegalStatus + description: | + Parent organization in hierarchical structure. + MIGRATED from parent_custodian slot per slot_fixes.yaml (Rule 53, 2025-01-15). legal_status: range: LegalStatus required: true diff --git a/schemas/20251121/linkml/modules/classes/EncompassingBody.yaml b/schemas/20251121/linkml/modules/classes/EncompassingBody.yaml index af700979b7..934f57d3e7 100644 --- a/schemas/20251121/linkml/modules/classes/EncompassingBody.yaml +++ b/schemas/20251121/linkml/modules/classes/EncompassingBody.yaml @@ -15,7 +15,8 @@ imports: - ../slots/data_license_policy - ../slots/funding_source - ../slots/description -- ../slots/website +- ../slots/has_or_had_url # was: website - migrated per Rule 53 (2025-01-15) +- ./URL - ../slots/legal_jurisdiction - ../slots/external_identifier - ../slots/has_or_had_area_served @@ -102,7 +103,7 @@ classes: - service_offering - specificity_annotation - template_specificity - - website + - has_or_had_url # was: website - migrated per Rule 53 (2025-01-15) slot_usage: id: identifier: true @@ -187,10 +188,17 @@ classes: examples: - value: http://www.wikidata.org/entity/Q2294910 description: Wikidata URI for Dutch Ministry OCW - website: - range: uri + has_or_had_url: + range: URL + inlined: true + multivalued: false + description: | + Official website of the encompassing body. + MIGRATED from website slot per slot_fixes.yaml (Rule 53, 2025-01-15). examples: - - value: https://www.rijksoverheid.nl/ministeries/ministerie-van-onderwijs-cultuur-en-wetenschap + - value: + url_value: https://www.rijksoverheid.nl/ministeries/ministerie-van-onderwijs-cultuur-en-wetenschap + url_type: website description: Ministry OCW website has_or_had_project: range: Project diff --git a/schemas/20251121/linkml/modules/classes/EnvironmentalZone.yaml b/schemas/20251121/linkml/modules/classes/EnvironmentalZone.yaml index 722e23d904..5e85507195 100644 --- a/schemas/20251121/linkml/modules/classes/EnvironmentalZone.yaml +++ b/schemas/20251121/linkml/modules/classes/EnvironmentalZone.yaml @@ -29,8 +29,11 @@ imports: - ../slots/observation - ../slots/part_of_facility - ../slots/specificity_annotation -- ../slots/target_relative_humidity -- ../slots/target_temperature_celsius +# REMOVED 2026-01-15: target_relative_humidity, target_temperature_celsius - migrated to has_or_had_setpoint with Setpoint class (Rule 53) +- ../slots/has_or_had_setpoint +- ./Setpoint +- ../enums/SetpointTypeEnum +- ../enums/MeasureUnitEnum - ../slots/template_specificity - ../slots/temporal_extent # was: valid_from + valid_to - migrated per Rule 53 - ./TimeSpan @@ -107,8 +110,8 @@ classes: - observation - part_of_facility - specificity_annotation - - target_relative_humidity - - target_temperature_celsius + # REMOVED 2026-01-15: target_relative_humidity, target_temperature_celsius - migrated to has_or_had_setpoint + - has_or_had_setpoint - temperature_tolerance - template_specificity - temporal_extent # was: valid_from + valid_to - migrated per Rule 53 @@ -155,31 +158,38 @@ classes: description: | Free-text description of this environmental zone. Replaces zone_description per slot_fixes.yaml migration. - target_temperature_celsius: - range: float + # REMOVED 2026-01-15: target_temperature_celsius, target_relative_humidity + # Migrated to has_or_had_setpoint with Setpoint class per Rule 53 + has_or_had_setpoint: + range: Setpoint + multivalued: true + inlined: true + inlined_as_list: true + description: | + Environmental control setpoints for this zone. + MIGRATED 2026-01-15: Replaces target_temperature_celsius, target_relative_humidity. + Uses Setpoint class for structured setpoint data. examples: - - value: 18.0 - description: Standard archive temperature - - value: -5.0 - description: Cold storage for film - - value: 15.0 - description: Photographic materials + - value: + - setpoint_type: TEMPERATURE + setpoint_value: 18.0 + setpoint_min: 16.0 + setpoint_max: 20.0 + setpoint_tolerance: 2.0 + setpoint_unit: DEGREE_CELSIUS + - setpoint_type: RELATIVE_HUMIDITY + setpoint_value: 50.0 + setpoint_min: 45.0 + setpoint_max: 55.0 + setpoint_tolerance: 5.0 + setpoint_unit: PERCENT + description: Standard archive zone setpoints temperature_tolerance: range: float examples: - value: 2.0 - value: 3.0 - target_relative_humidity: - range: float - minimum_value: 0.0 - maximum_value: 100.0 - examples: - - value: 50.0 - description: Standard archive humidity - - value: 35.0 - description: Photographic materials - - value: 30.0 - description: Cold storage + # REMOVED 2026-01-15: target_relative_humidity - migrated to has_or_had_setpoint above humidity_tolerance: range: float examples: @@ -244,10 +254,20 @@ classes: Paper-based collections from 1800-1950. ' - target_temperature_celsius: 18.0 - temperature_tolerance: 2.0 - target_relative_humidity: 50.0 - humidity_tolerance: 5.0 + has_or_had_setpoint: # MIGRATED 2026-01-15: was target_temperature_celsius, target_relative_humidity + - setpoint_type: TEMPERATURE + setpoint_value: 18.0 + setpoint_min: 16.0 + setpoint_max: 20.0 + setpoint_tolerance: 2.0 + setpoint_unit: DEGREE_CELSIUS + iso_standard_reference: "ISO 11799" + - setpoint_type: RELATIVE_HUMIDITY + setpoint_value: 50.0 + setpoint_min: 45.0 + setpoint_max: 55.0 + setpoint_tolerance: 5.0 + setpoint_unit: PERCENT max_light_lux: 50.0 environmental_requirement: https://nde.nl/ontology/hc/StandardArchiveEnvironment monitoring_platform: Hanwell RadioLog monitoring system @@ -263,10 +283,20 @@ classes: Maintained at -5°C, 30% RH per ISO 18911. ' - target_temperature_celsius: -5.0 - temperature_tolerance: 3.0 - target_relative_humidity: 30.0 - humidity_tolerance: 5.0 + has_or_had_setpoint: # MIGRATED 2026-01-15: was target_temperature_celsius, target_relative_humidity + - setpoint_type: TEMPERATURE + setpoint_value: -5.0 + setpoint_min: -8.0 + setpoint_max: -2.0 + setpoint_tolerance: 3.0 + setpoint_unit: DEGREE_CELSIUS + iso_standard_reference: "ISO 18911" + - setpoint_type: RELATIVE_HUMIDITY + setpoint_value: 30.0 + setpoint_min: 25.0 + setpoint_max: 35.0 + setpoint_tolerance: 5.0 + setpoint_unit: PERCENT max_light_lux: 0.0 environmental_requirement: https://nde.nl/ontology/hc/ColdStorageEnvironment part_of_facility: https://nde.nl/ontology/hc/storage/ef-main-depot diff --git a/schemas/20251121/linkml/modules/classes/EnvironmentalZoneType.yaml b/schemas/20251121/linkml/modules/classes/EnvironmentalZoneType.yaml index 7ba674a7ed..32ef7bc93a 100644 --- a/schemas/20251121/linkml/modules/classes/EnvironmentalZoneType.yaml +++ b/schemas/20251121/linkml/modules/classes/EnvironmentalZoneType.yaml @@ -38,13 +38,12 @@ imports: - ../slots/has_or_had_short_code - ../slots/has_or_had_label - ../slots/has_or_had_description - # Domain-specific slots (kept) - - ../slots/temperature_min - - ../slots/temperature_max - - ../slots/temperature_target - - ../slots/humidity_min - - ../slots/humidity_max - - ../slots/humidity_target + # REMOVED 2026-01-15: Domain-specific temperature/humidity slots migrated to has_or_had_setpoint with Setpoint class (Rule 53) + # Old slots: temperature_min, temperature_max, temperature_target, humidity_min, humidity_max, humidity_target + - ../slots/has_or_had_setpoint + - ./Setpoint + - ../enums/SetpointTypeEnum + - ../enums/MeasureUnitEnum - ../slots/max_light_lux - ../slots/max_annual_light_exposure - ../slots/iso_standard @@ -181,13 +180,9 @@ classes: - has_or_had_short_code - has_or_had_label - has_or_had_description + # Environmental setpoints (MIGRATED 2026-01-15 per Rule 53) + - has_or_had_setpoint # Domain-specific slots - - temperature_min - - temperature_max - - temperature_target - - humidity_min - - humidity_max - - humidity_target - max_light_lux - max_annual_light_exposure - iso_standard @@ -235,19 +230,30 @@ classes: examples: - value: "Standard climate-controlled environment for paper-based archival materials" - temperature_target: + # REMOVED 2026-01-15: temperature_target, humidity_target - migrated to has_or_had_setpoint + has_or_had_setpoint: + range: Setpoint + multivalued: true + inlined: true + inlined_as_list: true + description: | + Environmental setpoints for this zone type. + MIGRATED 2026-01-15: Replaces temperature_min, temperature_max, temperature_target, + humidity_min, humidity_max, humidity_target with structured Setpoint class. examples: - - value: 18.0 - description: Standard archive storage - - value: -5.0 - description: Cold storage for film - - humidity_target: - examples: - - value: 50.0 - description: Standard archive storage - - value: 30.0 - description: Cold storage for film + - value: + - setpoint_type: TEMPERATURE + setpoint_value: 18.0 + setpoint_min: 16.0 + setpoint_max: 20.0 + setpoint_unit: DEGREE_CELSIUS + iso_standard_reference: "ISO 11799" + - setpoint_type: RELATIVE_HUMIDITY + setpoint_value: 50.0 + setpoint_min: 45.0 + setpoint_max: 55.0 + setpoint_unit: PERCENT + description: Standard archive zone type setpoints max_light_lux: examples: @@ -300,6 +306,9 @@ classes: - environmental_zone_type_code → has_or_had_short_code - environmental_zone_type_label → has_or_had_label - environmental_zone_type_description → has_or_had_description + 2026-01-15: Migrated temperature/humidity slots to has_or_had_setpoint (Rule 53) + - temperature_min, temperature_max, temperature_target → has_or_had_setpoint + Setpoint + - humidity_min, humidity_max, humidity_target → has_or_had_setpoint + Setpoint comments: - "Abstract base class - use specific subclasses (ArchiveStandardStorageEnvironment, etc.)" @@ -308,6 +317,7 @@ classes: - "Replaces EnvironmentalZoneTypeEnum for richer semantic modeling" - "Environmental parameters align with conservation standards (EN 16893, ISO 11799, ISO 18911)" - "MIGRATED 2026-01-13: Now uses shared slots (Rule 38)" + - "MIGRATED 2026-01-15: Temperature/humidity slots → has_or_had_setpoint + Setpoint (Rule 53)" see_also: - https://www.iso.org/standard/63810.html @@ -327,12 +337,18 @@ classes: - Archive Standard Storage Environment@en - Standaard archiefbewaaromgeving@nl has_or_had_description: "Standard climate-controlled environment for paper-based archival materials" - temperature_min: 16.0 - temperature_max: 20.0 - temperature_target: 18.0 - humidity_min: 45.0 - humidity_max: 55.0 - humidity_target: 50.0 + has_or_had_setpoint: # MIGRATED 2026-01-15: was temperature_min/max/target, humidity_min/max/target + - setpoint_type: TEMPERATURE + setpoint_value: 18.0 + setpoint_min: 16.0 + setpoint_max: 20.0 + setpoint_unit: DEGREE_CELSIUS + iso_standard_reference: "ISO 11799" + - setpoint_type: RELATIVE_HUMIDITY + setpoint_value: 50.0 + setpoint_min: 45.0 + setpoint_max: 55.0 + setpoint_unit: PERCENT max_light_lux: 50.0 iso_standard: - ISO 11799 diff --git a/schemas/20251121/linkml/modules/classes/Expenses.yaml b/schemas/20251121/linkml/modules/classes/Expenses.yaml index 2bc550ceaf..7c37a1427c 100644 --- a/schemas/20251121/linkml/modules/classes/Expenses.yaml +++ b/schemas/20251121/linkml/modules/classes/Expenses.yaml @@ -19,9 +19,11 @@ imports: - ../slots/description - ../slots/has_or_had_amount - ../slots/has_or_had_currency - - ../slots/valid_from - - ../slots/valid_to + # ARCHIVED: ../slots/valid_from - use temporal_extent instead + # ARCHIVED: ../slots/valid_to - use temporal_extent instead + - ../slots/temporal_extent # was: valid_from + valid_to - ../enums/ExpenseTypeEnum + - ./TimeSpan default_prefix: hc @@ -106,8 +108,7 @@ classes: - amount - currency - description - - valid_from - - valid_to + - temporal_extent # was: valid_from + valid_to slot_usage: id: identifier: true @@ -132,14 +133,12 @@ classes: range: string required: false description: Human-readable description of the expense. - valid_from: - range: date - required: false - description: Start of period this expense applies to. - valid_to: - range: date - required: false - description: End of period this expense applies to. + temporal_extent: + range: TimeSpan + inlined: true + description: >- + Time period this expense applies to. + Use begin_of_the_begin for start date, end_of_the_end for end date. annotations: custodian_types: '["*"]' custodian_types_rationale: Financial expenses applicable to all heritage custodian types. @@ -154,16 +153,18 @@ classes: amount: 10000000.0 currency: EUR description: "Management and general expenses for FY2023" - valid_from: "2023-01-01" - valid_to: "2023-12-31" + temporal_extent: + begin_of_the_begin: "2023-01-01" + end_of_the_end: "2023-12-31" description: Administrative expense for Dutch museum - value: expense_type: PROGRAM amount: 62000000.0 currency: EUR description: "Program service expenses including exhibitions, conservation, education" - valid_from: "2023-01-01" - valid_to: "2023-12-31" + temporal_extent: + begin_of_the_begin: "2023-01-01" + end_of_the_end: "2023-12-31" description: Program expense for major museum - value: expense_type: FUNDRAISING diff --git a/schemas/20251121/linkml/modules/classes/FindingAid.yaml b/schemas/20251121/linkml/modules/classes/FindingAid.yaml index c0b6cdde01..af55258f97 100644 --- a/schemas/20251121/linkml/modules/classes/FindingAid.yaml +++ b/schemas/20251121/linkml/modules/classes/FindingAid.yaml @@ -140,7 +140,9 @@ imports: - ./Label - ../slots/topic - ../slots/type -- ../slots/url +# REMOVED: ../slots/url - migrated to has_or_had_url with URL class (2025-01-15, Rule 53) +- ../slots/has_or_had_url +- ./URL # REMOVED 2026-01-14: ../slots/validation_status - migrated to has_or_had_status with ValidationStatus - ../slots/has_or_had_status - ./ValidationStatus @@ -269,7 +271,7 @@ classes: - finding_aid_temporal_coverage - has_or_had_label # was: title - topic - - url + - has_or_had_url # was: url - migrated per Rule 53 (2025-01-15) - temporal_extent # was: valid_from + valid_to - migrated per Rule 53 - has_or_had_web_claim # REMOVED: wikidata_class - migrated to is_or_was_instance_of with WikiDataEntry (2026-01-14, Rule 53) @@ -288,8 +290,13 @@ classes: Uses FindingAidType class hierarchy. has_or_had_label: # was: title required: true - url: + has_or_had_url: + range: URL + inlined: true required: true + description: | + URL of the finding aid web resource. + MIGRATED from url slot per slot_fixes.yaml (Rule 53, 2025-01-15). custodian: required: true finding_aid_description: @@ -535,7 +542,7 @@ classes: - template_specificity # REMOVED: title_en, title_nl - migrated to has_or_had_label with Label (2026-01-14, Rule 53) - has_or_had_label - - url + - has_or_had_url # was: url - migrated per Rule 53 (2025-01-15) slot_usage: slug: required: true @@ -558,8 +565,13 @@ classes: label_value: "Civil Registry" language_code: "en" description: English title - url: + has_or_had_url: + range: URL + inlined: true required: true + description: | + URL of the sub-guide web resource. + MIGRATED from url slot per slot_fixes.yaml (Rule 53, 2025-01-15). has_or_had_type: range: SubGuideType description: | @@ -589,13 +601,17 @@ classes: - specificity_annotation - sub_guide_temporal_coverage - template_specificity - - url + - has_or_had_url # was: url - migrated per Rule 53 (2025-01-15) slot_usage: name: required: true - url: - range: uri + has_or_had_url: + range: URL + inlined: true required: false + description: | + URL of the archive reference. + MIGRATED from url slot per slot_fixes.yaml (Rule 53, 2025-01-15). isil: pattern: ^[A-Z]{2}-[A-Za-z0-9]+$ exact_mappings: @@ -671,13 +687,17 @@ classes: - specificity_annotation - template_specificity - type - - url + - has_or_had_url # was: url - migrated per Rule 53 (2025-01-15) slot_usage: name: required: true - url: - range: uri + has_or_had_url: + range: URL + inlined: true required: true + description: | + URL of the external resource. + MIGRATED from url slot per slot_fixes.yaml (Rule 53, 2025-01-15). type: range: ExternalResourceTypeEnum exact_mappings: diff --git a/schemas/20251121/linkml/modules/classes/FunctionType.yaml b/schemas/20251121/linkml/modules/classes/FunctionType.yaml index 50ffd27894..b69fac0568 100644 --- a/schemas/20251121/linkml/modules/classes/FunctionType.yaml +++ b/schemas/20251121/linkml/modules/classes/FunctionType.yaml @@ -17,8 +17,10 @@ imports: - linkml:types - ../slots/id - ../slots/description - - ../slots/valid_from - - ../slots/valid_to + # ARCHIVED: ../slots/valid_from - use temporal_extent instead + # ARCHIVED: ../slots/valid_to - use temporal_extent instead + - ../slots/temporal_extent # was: valid_from + valid_to + - ./TimeSpan default_prefix: hc @@ -106,8 +108,7 @@ classes: - function_category - function_name - description - - valid_from - - valid_to + - temporal_extent # was: valid_from + valid_to slot_usage: id: identifier: true @@ -124,14 +125,12 @@ classes: range: string required: false description: Human-readable description of the function. - valid_from: - range: date - required: false - description: Start date when this function was established. - valid_to: - range: date - required: false - description: End date when this function was discontinued. + temporal_extent: + range: TimeSpan + inlined: true + description: >- + Time period when this function was active. + Use begin_of_the_begin for start date, end_of_the_end for end date. annotations: custodian_types: '["*"]' custodian_types_rationale: Organizational functions applicable to all heritage custodian types. diff --git a/schemas/20251121/linkml/modules/classes/FundingAgenda.yaml b/schemas/20251121/linkml/modules/classes/FundingAgenda.yaml index 1ca49d743f..90b6d05144 100644 --- a/schemas/20251121/linkml/modules/classes/FundingAgenda.yaml +++ b/schemas/20251121/linkml/modules/classes/FundingAgenda.yaml @@ -40,7 +40,7 @@ imports: - ./SpecificityAnnotation - ./TemplateSpecificityScores - ../slots/has_or_had_identifier -- ./CustodianIdentifier +- ./Identifier # Contains CustodianIdentifier class default_prefix: hc classes: FundingAgenda: diff --git a/schemas/20251121/linkml/modules/classes/Laptop.yaml b/schemas/20251121/linkml/modules/classes/Laptop.yaml index 02ea2dc2f9..02dd5f0cb3 100644 --- a/schemas/20251121/linkml/modules/classes/Laptop.yaml +++ b/schemas/20251121/linkml/modules/classes/Laptop.yaml @@ -23,13 +23,15 @@ imports: - linkml:types - ../slots/id - ../slots/description - - ../slots/valid_from - - ../slots/valid_to + # ARCHIVED: ../slots/valid_from - use temporal_extent instead + # ARCHIVED: ../slots/valid_to - use temporal_extent instead + - ../slots/temporal_extent # was: valid_from + valid_to - ../slots/condition - ../slots/specificity_annotation - ../slots/template_specificity - ./SpecificityAnnotation - ./TemplateSpecificityScores + - ./TimeSpan default_prefix: hc default_range: string @@ -82,8 +84,7 @@ classes: - is_permitted - description - condition - - valid_from - - valid_to + - temporal_extent # was: valid_from + valid_to - specificity_annotation - template_specificity @@ -134,7 +135,8 @@ classes: condition: - "Silent operation required" - "Power outlets available at each desk" - valid_from: "2010-01-01" + temporal_extent: + begin_of_the_begin: "2010-01-01" description: Archive laptop-friendly policy - value: @@ -144,7 +146,8 @@ classes: condition: - "Pencils only for note-taking" - "Institution-provided terminals available" - valid_from: "2020-01-01" + temporal_extent: + begin_of_the_begin: "2020-01-01" description: Restricted laptop policy for special collections slots: diff --git a/schemas/20251121/linkml/modules/classes/OrganizationalChangeEvent.yaml b/schemas/20251121/linkml/modules/classes/OrganizationalChangeEvent.yaml index 354cc68bf8..6f66335a19 100644 --- a/schemas/20251121/linkml/modules/classes/OrganizationalChangeEvent.yaml +++ b/schemas/20251121/linkml/modules/classes/OrganizationalChangeEvent.yaml @@ -23,7 +23,7 @@ imports: - ../slots/event_description - ../slots/has_or_had_affected_unit - ../slots/has_or_had_resulting_unit -- ../slots/parent_custodian +- ../slots/has_or_had_associated_custodian # was: parent_custodian - migrated per Rule 53 (2025-01-15) - ../slots/change_rationale - ../slots/staff_impact - ../slots/documentation_source @@ -137,7 +137,7 @@ classes: - event_type - from_location - id - - parent_custodian + - has_or_had_associated_custodian # was: parent_custodian - migrated per Rule 53 (2025-01-15) - has_or_had_resulting_unit - specificity_annotation - staff_impact @@ -190,9 +190,15 @@ classes: - id: https://nde.nl/ontology/hc/org-unit/rijks-conservation-research unit_name: Conservation and Research Department description: New department created from merger - parent_custodian: + has_or_had_associated_custodian: required: true range: Custodian + multivalued: false + description: | + The custodian institution where this organizational change event occurred. + MIGRATED from parent_custodian slot per slot_fixes.yaml (Rule 53, 2025-01-15). + + Per Rule 39: Uses PROV-O event association pattern (not hierarchy). examples: - value: hc_id: https://nde.nl/ontology/hc/nl-nh-ams-m-rm-q190804 diff --git a/schemas/20251121/linkml/modules/classes/Overview.yaml b/schemas/20251121/linkml/modules/classes/Overview.yaml index e4284122ad..6db9426595 100644 --- a/schemas/20251121/linkml/modules/classes/Overview.yaml +++ b/schemas/20251121/linkml/modules/classes/Overview.yaml @@ -39,8 +39,9 @@ imports: - ../slots/description - ../slots/has_or_had_label # was: title - migrated per Rule 53 - ../slots/includes_or_included - - ../slots/valid_from - - ../slots/valid_to + # ARCHIVED: ../slots/valid_from - use temporal_extent instead + # ARCHIVED: ../slots/valid_to - use temporal_extent instead + - ../slots/temporal_extent # was: valid_from + valid_to - ../slots/source_url - ../slots/date_retrieved - ../slots/specificity_annotation @@ -48,6 +49,7 @@ imports: - ./WebLink - ./SpecificityAnnotation - ./TemplateSpecificityScores + - ./TimeSpan default_prefix: hc default_range: string @@ -110,8 +112,7 @@ classes: - source_url - date_retrieved - link_count - - valid_from - - valid_to + - temporal_extent # was: valid_from + valid_to - specificity_annotation - template_specificity diff --git a/schemas/20251121/linkml/modules/classes/Photography.yaml b/schemas/20251121/linkml/modules/classes/Photography.yaml index 227d2b6b9e..ae63c1de75 100644 --- a/schemas/20251121/linkml/modules/classes/Photography.yaml +++ b/schemas/20251121/linkml/modules/classes/Photography.yaml @@ -23,13 +23,15 @@ imports: - linkml:types - ../slots/id - ../slots/description - - ../slots/valid_from - - ../slots/valid_to + # ARCHIVED: ../slots/valid_from - use temporal_extent instead + # ARCHIVED: ../slots/valid_to - use temporal_extent instead + - ../slots/temporal_extent # was: valid_from + valid_to - ../slots/condition - ../slots/specificity_annotation - ../slots/template_specificity - ./SpecificityAnnotation - ./TemplateSpecificityScores + - ./TimeSpan default_prefix: hc default_range: string @@ -95,8 +97,7 @@ classes: - condition - requires_declaration - excluded_materials - - valid_from - - valid_to + - temporal_extent # was: valid_from + valid_to - specificity_annotation - template_specificity @@ -158,7 +159,8 @@ classes: - "Personal research use only" - "No commercial use without permission" requires_declaration: true - valid_from: "2015-01-01" + temporal_extent: + begin_of_the_begin: "2015-01-01" description: Archive photography-friendly policy - value: @@ -170,7 +172,8 @@ classes: - "Digital scans may be ordered" excluded_materials: - "All materials in this reading room" - valid_from: "2020-01-01" + temporal_extent: + begin_of_the_begin: "2020-01-01" description: Restricted photography policy for fragile materials - value: @@ -184,7 +187,8 @@ classes: excluded_materials: - "Loan items marked with no-photography symbol" - "Temporary exhibitions unless noted" - valid_from: "2018-06-01" + temporal_extent: + begin_of_the_begin: "2018-06-01" description: Museum gallery photography policy slots: diff --git a/schemas/20251121/linkml/modules/classes/ProvenanceEvent.yaml b/schemas/20251121/linkml/modules/classes/ProvenanceEvent.yaml index 46357aa79d..46890a935d 100644 --- a/schemas/20251121/linkml/modules/classes/ProvenanceEvent.yaml +++ b/schemas/20251121/linkml/modules/classes/ProvenanceEvent.yaml @@ -45,8 +45,8 @@ imports: - ../slots/template_specificity - ../slots/to_owner - ../slots/to_owner_text -- ../slots/transfer_location -- ../slots/transfer_location_text +# REMOVED 2026-01-15: transfer_location, transfer_location_text - migrated to event_location (Rule 53) +- ../slots/event_location - ./SpecificityAnnotation - ./TemplateSpecificityScores default_prefix: hc @@ -108,8 +108,8 @@ classes: - template_specificity - to_owner - to_owner_text - - transfer_location - - transfer_location_text + # MIGRATED 2026-01-15: transfer_location, transfer_location_text → event_location (Rule 53) + - event_location slot_usage: event_id: identifier: true @@ -181,21 +181,27 @@ classes: examples: - value: Mauritshuis, The Hague - value: Maria de Knuijt, widow of van Ruijven - transfer_location: + # MIGRATED 2026-01-15: transfer_location, transfer_location_text → event_location (Rule 53) + event_location: + description: | + Location where the provenance event (ownership/custody transfer) occurred. + Replaces bespoke transfer_location and transfer_location_text slots. required: false range: CustodianPlace + multivalued: true inlined: true examples: - value: place_name: Amsterdam country: NL - transfer_location_text: - required: false - range: string - examples: - - value: Amsterdam - - value: Dissius sale, Amsterdam - - value: Christie's, London + description: Event at auction in Amsterdam + - value: + place_name: Dissius sale, Amsterdam + description: Specific sale event location + - value: + place_name: Christie's, London + country: GB + description: Auction house location price: required: false range: decimal @@ -334,7 +340,10 @@ classes: end_of_the_end: '1667-12-31' from_owner_text: null to_owner_text: Johannes Vermeer, Delft - transfer_location_text: Delft + # MIGRATED 2026-01-15: transfer_location_text → event_location (Rule 53) + event_location: + - place_name: Delft + country: NL certainty_level: CERTAIN provenance_text: Created by Johannes Vermeer, Delft, c. 1665 description: Creation of Girl with a Pearl Earring @@ -359,7 +368,10 @@ classes: event_date_text: May 16, 1696 from_owner_text: Estate of Jacob Dissius to_owner_text: Unknown buyer - transfer_location_text: Amsterdam + # MIGRATED 2026-01-15: transfer_location_text → event_location (Rule 53) + event_location: + - place_name: Amsterdam + country: NL auction_sale_name: Dissius sale lot_number: '36' price_text: Unknown diff --git a/schemas/20251121/linkml/modules/classes/ReadingRoomAnnex.yaml b/schemas/20251121/linkml/modules/classes/ReadingRoomAnnex.yaml index b67a3e8389..402402d1e5 100644 --- a/schemas/20251121/linkml/modules/classes/ReadingRoomAnnex.yaml +++ b/schemas/20251121/linkml/modules/classes/ReadingRoomAnnex.yaml @@ -25,7 +25,7 @@ imports: - ../slots/was_generated_by - ./SpecificityAnnotation - ./TemplateSpecificityScores -- ./CustodianIdentifier +- ./Identifier # Contains CustodianIdentifier class - ../enums/ReadingRoomAnnexReasonEnum prefixes: linkml: https://w3id.org/linkml/ diff --git a/schemas/20251121/linkml/modules/classes/RegistrationAuthority.yaml b/schemas/20251121/linkml/modules/classes/RegistrationAuthority.yaml index 727e0ab06e..130f4033f5 100644 --- a/schemas/20251121/linkml/modules/classes/RegistrationAuthority.yaml +++ b/schemas/20251121/linkml/modules/classes/RegistrationAuthority.yaml @@ -11,7 +11,7 @@ imports: - ../metadata - ./Country - ../slots/description -- ../slots/website +# REMOVED: ../slots/website - using inline attribute definition (Rule 53, migrated 2025-01-15) - ../slots/specificity_annotation - ../slots/template_specificity - ./SpecificityAnnotation diff --git a/schemas/20251121/linkml/modules/classes/RegistrationInfo.yaml b/schemas/20251121/linkml/modules/classes/RegistrationInfo.yaml index aa12b7ca18..b5ce669397 100644 --- a/schemas/20251121/linkml/modules/classes/RegistrationInfo.yaml +++ b/schemas/20251121/linkml/modules/classes/RegistrationInfo.yaml @@ -26,7 +26,7 @@ imports: - ./RegistrationAuthority - ../slots/jurisdiction - ../slots/description -- ../slots/website +# REMOVED: ../slots/website - unused import (Rule 53, migrated 2025-01-15) - ../slots/specificity_annotation - ../slots/template_specificity - ./SpecificityAnnotation diff --git a/schemas/20251121/linkml/modules/classes/Setpoint.yaml b/schemas/20251121/linkml/modules/classes/Setpoint.yaml new file mode 100644 index 0000000000..15fe83e42e --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/Setpoint.yaml @@ -0,0 +1,190 @@ +id: https://nde.nl/ontology/hc/class/Setpoint +name: setpoint_class +title: Setpoint Class +description: | + Environmental control setpoint for storage conditions. + + Created per slot_fixes.yaml migration for: + - temperature_target → has_or_had_setpoint + Setpoint + - temperature_min → has_or_had_setpoint + Setpoint + - temperature_max → has_or_had_setpoint + Setpoint + - target_temperature_celsius → has_or_had_setpoint + Setpoint + - target_relative_humidity → has_or_had_setpoint + Setpoint + + This class models environmental control parameters (temperature, humidity, etc.) + as first-class entities with proper unit handling, tolerances, and ISO standard references. + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + qudt: http://qudt.org/schema/qudt/ + brick: https://brickschema.org/schema/Brick# + sosa: http://www.w3.org/ns/sosa/ + schema: http://schema.org/ + dcterms: http://purl.org/dc/terms/ + +default_prefix: hc + +imports: + - linkml:types + - ../enums/SetpointTypeEnum + - ../enums/MeasureUnitEnum + +classes: + Setpoint: + class_uri: brick:Setpoint + description: | + An environmental control setpoint specifying a target value, acceptable range, + and tolerance for a measurable property (temperature, humidity, light, etc.). + + **BRICK SCHEMA ALIGNMENT**: + brick:Setpoint - "A point that represents a value used to guide the + operation of equipment and/or systems" + + **PRESERVATION CONTEXT**: + Setpoints define target environmental conditions for heritage preservation. + HVAC systems maintain conditions around setpoints within tolerance bands. + + **ISO STANDARD REFERENCES**: + - ISO 11799:2015 (Archives): 16-18°C, 30-45% RH + - ISO 18911:2010 (Cold storage): 0 to +4°C, 30% RH + - ISO 18920:2011 (Photographs): 15-18°C, 30-40% RH + - BS 4971:2017 (UK Standard): 13-16°C, 35-60% RH + - EN 15757:2010 (Climate control): historic climate principle + + exact_mappings: + - brick:Setpoint + - qudt:Quantity + close_mappings: + - sosa:ObservableProperty + slots: + - setpoint_type + - setpoint_value + - setpoint_min + - setpoint_max + - setpoint_tolerance + - setpoint_unit + - iso_standard_reference + slot_usage: + setpoint_type: + range: SetpointTypeEnum + required: true + description: The type of environmental parameter (temperature, humidity, etc.) + examples: + - value: TEMPERATURE + - value: RELATIVE_HUMIDITY + - value: LIGHT_LUX + setpoint_value: + range: float + required: true + description: The target setpoint value. + examples: + - value: 18.0 + description: Target temperature 18°C + - value: 50.0 + description: Target humidity 50% RH + setpoint_min: + range: float + required: false + description: Minimum acceptable value. + examples: + - value: 16.0 + setpoint_max: + range: float + required: false + description: Maximum acceptable value. + examples: + - value: 20.0 + setpoint_tolerance: + range: float + required: false + description: Acceptable deviation from target (±). + examples: + - value: 2.0 + description: ±2°C tolerance + setpoint_unit: + range: MeasureUnitEnum + required: true + description: Unit of measurement for the setpoint value. + examples: + - value: DEGREE_CELSIUS + - value: PERCENT + - value: LUX + iso_standard_reference: + range: string + required: false + description: ISO or other standard reference for this setpoint. + examples: + - value: "ISO 11799:2015" + - value: "EN 15757:2010" + examples: + - value: + setpoint_type: TEMPERATURE + setpoint_value: 18.0 + setpoint_min: 16.0 + setpoint_max: 20.0 + setpoint_tolerance: 2.0 + setpoint_unit: DEGREE_CELSIUS + iso_standard_reference: "ISO 11799:2015" + description: Standard archive temperature setpoint + - value: + setpoint_type: RELATIVE_HUMIDITY + setpoint_value: 50.0 + setpoint_min: 45.0 + setpoint_max: 55.0 + setpoint_tolerance: 5.0 + setpoint_unit: PERCENT + iso_standard_reference: "ISO 11799:2015" + description: Standard archive humidity setpoint + - value: + setpoint_type: TEMPERATURE + setpoint_value: -18.0 + setpoint_min: -20.0 + setpoint_max: -15.0 + setpoint_tolerance: 2.0 + setpoint_unit: DEGREE_CELSIUS + iso_standard_reference: "ISO 18911:2010" + description: Cold storage temperature setpoint + +slots: + setpoint_type: + description: The type of environmental parameter being controlled. + range: SetpointTypeEnum + slot_uri: hc:setpointType + + setpoint_value: + description: The target setpoint value. + range: float + slot_uri: hc:setpointValue + exact_mappings: + - qudt:value + - schema:value + + setpoint_min: + description: Minimum acceptable value. + range: float + slot_uri: hc:setpointMinimum + exact_mappings: + - schema:minValue + + setpoint_max: + description: Maximum acceptable value. + range: float + slot_uri: hc:setpointMaximum + exact_mappings: + - schema:maxValue + + setpoint_tolerance: + description: Acceptable deviation from target (±). + range: float + slot_uri: hc:setpointTolerance + + setpoint_unit: + description: Unit of measurement for the setpoint. + range: MeasureUnitEnum + slot_uri: qudt:unit + + iso_standard_reference: + description: ISO or other preservation standard reference. + range: string + slot_uri: dcterms:conformsTo diff --git a/schemas/20251121/linkml/modules/classes/Standard.yaml b/schemas/20251121/linkml/modules/classes/Standard.yaml index e4e5ab717b..676d45b08c 100644 --- a/schemas/20251121/linkml/modules/classes/Standard.yaml +++ b/schemas/20251121/linkml/modules/classes/Standard.yaml @@ -15,7 +15,7 @@ imports: - ./Country - ./Subregion - ../slots/description -- ../slots/website +# REMOVED: ../slots/website - using inline attribute definition (Rule 53, migrated 2025-01-15) - ../slots/specificity_annotation - ../slots/template_specificity - ./SpecificityAnnotation diff --git a/schemas/20251121/linkml/modules/classes/StandardsOrganization.yaml b/schemas/20251121/linkml/modules/classes/StandardsOrganization.yaml index 84f4aeab98..a0b0318708 100644 --- a/schemas/20251121/linkml/modules/classes/StandardsOrganization.yaml +++ b/schemas/20251121/linkml/modules/classes/StandardsOrganization.yaml @@ -11,7 +11,7 @@ imports: - linkml:types - ../metadata - ../slots/description -- ../slots/website +# REMOVED: ../slots/website - using inline attribute definition (Rule 53, migrated 2025-01-15) - ../slots/specificity_annotation - ../slots/template_specificity - ./SpecificityAnnotation diff --git a/schemas/20251121/linkml/modules/classes/StorageConditionPolicy.yaml b/schemas/20251121/linkml/modules/classes/StorageConditionPolicy.yaml index 8bd43803ad..ec517f5b63 100644 --- a/schemas/20251121/linkml/modules/classes/StorageConditionPolicy.yaml +++ b/schemas/20251121/linkml/modules/classes/StorageConditionPolicy.yaml @@ -39,9 +39,10 @@ imports: - ../slots/specificity_annotation - ../slots/standards_compliance - ../slots/storage_security_level -- ../slots/temperature_max -- ../slots/temperature_min -- ../slots/temperature_target +# REMOVED 2026-01-15: temperature_max, temperature_min, temperature_target - migrated to has_or_had_setpoint with Setpoint class (Rule 53) +- ../slots/has_or_had_setpoint +- ./Setpoint +- ../enums/SetpointTypeEnum - ../slots/template_specificity # REMOVED 2026-01-14: ../slots/uv_filtered_required - migrated to is_or_was_required with RequirementStatus - ../slots/is_or_was_required @@ -104,9 +105,8 @@ classes: - specificity_annotation - standards_compliance - storage_security_level - - temperature_max - - temperature_min - - temperature_target + # REMOVED 2026-01-15: temperature_max, temperature_min, temperature_target - migrated to has_or_had_setpoint + - has_or_had_setpoint - temperature_tolerance - template_specificity # REMOVED 2026-01-14: uv_filtered_required - migrated to is_or_was_required with RequirementStatus @@ -130,27 +130,27 @@ classes: - value: Climate control policy for main art storage depot at Amersfoort. Designed to maintain stable conditions for mixed media collections including oil paintings, works on paper, and decorative arts. Based on EN 15757:2010 and museum industry best practices. - temperature_target: - range: float - unit: - ucum_code: Cel + # REMOVED 2026-01-15: temperature_target, temperature_min, temperature_max + # Migrated to has_or_had_setpoint with Setpoint class per Rule 53 + has_or_had_setpoint: + range: Setpoint + multivalued: true + inlined: true + inlined_as_list: true + description: | + Environmental control setpoints for this storage policy. + MIGRATED 2026-01-15: Replaces temperature_target, temperature_min, temperature_max. + Uses Setpoint class for structured setpoint data with types (TEMPERATURE, RELATIVE_HUMIDITY, etc.). examples: - - value: 18.0 - description: 18°C for archive storage - - value: -18.0 - description: -18°C for cold storage - temperature_min: - range: float - unit: - ucum_code: Cel - examples: - - value: 16.0 - temperature_max: - range: float - unit: - ucum_code: Cel - examples: - - value: 22.0 + - value: + - setpoint_type: TEMPERATURE + setpoint_value: 18.0 + setpoint_min: 16.0 + setpoint_max: 22.0 + setpoint_tolerance: 2.0 + setpoint_unit: DEGREE_CELSIUS + iso_standard_reference: "ISO 11799:2015" + description: Archive temperature setpoint temperature_tolerance: range: float unit: @@ -295,8 +295,14 @@ classes: and decorative arts. Based on EN 15757:2010 and museum best practices. ' - temperature_target: 18.0 - temperature_tolerance: 2.0 + has_or_had_setpoint: # MIGRATED 2026-01-15: was temperature_target + - setpoint_type: TEMPERATURE + setpoint_value: 18.0 + setpoint_min: 16.0 + setpoint_max: 20.0 + setpoint_tolerance: 2.0 + setpoint_unit: DEGREE_CELSIUS + iso_standard_reference: "EN 15757:2010" humidity_target: 50.0 humidity_tolerance: 5.0 light_max_lux: 50.0 @@ -325,8 +331,14 @@ classes: Permanence Institute guidelines for extended preservation. ' - temperature_target: -18.0 - temperature_tolerance: 2.0 + has_or_had_setpoint: # MIGRATED 2026-01-15: was temperature_target + - setpoint_type: TEMPERATURE + setpoint_value: -18.0 + setpoint_min: -20.0 + setpoint_max: -16.0 + setpoint_tolerance: 2.0 + setpoint_unit: DEGREE_CELSIUS + iso_standard_reference: "ISO 18911:2010" humidity_target: 30.0 humidity_tolerance: 5.0 light_max_lux: 0.0 diff --git a/schemas/20251121/linkml/modules/classes/StorageUnit.yaml b/schemas/20251121/linkml/modules/classes/StorageUnit.yaml index 64e36d545d..6cec930ad3 100644 --- a/schemas/20251121/linkml/modules/classes/StorageUnit.yaml +++ b/schemas/20251121/linkml/modules/classes/StorageUnit.yaml @@ -15,7 +15,9 @@ imports: - ./Storage - ../enums/StorageUnitTypeEnum - ../slots/has_or_had_label # was: unit_name - migrated per Rule 53 -- ../slots/unit_type +- ../slots/has_or_had_type # was: unit_type - migrated per Rule 53 +# REMOVED - unit_type migrated to has_or_had_type (2026-01-15, Rule 53) +# - ../slots/unit_type - ../slots/capacity_item # REMOVED - migrated to has_or_had_identifier with range BayNumber (Rule 53) # - ../slots/bay_number @@ -105,7 +107,9 @@ classes: # - unit_id # - unit_identifier - has_or_had_label # was: unit_name - - unit_type + - has_or_had_type # was: unit_type - migrated per Rule 53 + # REMOVED - unit_type migrated to has_or_had_type (2026-01-15, Rule 53) + # - unit_type - temporal_extent # was: valid_from + valid_to - migrated per Rule 53 slot_usage: # MIGRATED from unit_id and unit_identifier (2026-01-14, Rule 53) diff --git a/schemas/20251121/linkml/modules/classes/TemporaryLocation.yaml b/schemas/20251121/linkml/modules/classes/TemporaryLocation.yaml index f167489d51..47c4481609 100644 --- a/schemas/20251121/linkml/modules/classes/TemporaryLocation.yaml +++ b/schemas/20251121/linkml/modules/classes/TemporaryLocation.yaml @@ -7,19 +7,25 @@ imports: - ./CustodianObservation - ./ReconstructionActivity - ./TimeSpan +- ./Description # actual_end and actual_start REMOVED - migrated to temporal_extent with TimeSpan (Rule 53) # TimeSpan uses begin_of_the_begin/end_of_the_end for CIDOC-CRM compliant temporal modeling +# temp_location_* slots REMOVED - migrated to generic slots (Rule 53, 2026-01-15): +# temp_location_id → has_or_had_identifier +# temp_location_name → has_or_had_label +# temp_location_description → has_or_had_description +# temp_location_reason → has_or_had_rationale + reason_type (enum) +- ../slots/has_or_had_identifier +- ../slots/has_or_had_label +- ../slots/has_or_had_description +- ../slots/has_or_had_rationale +- ../slots/has_or_had_type - ../slots/is_active - ../slots/planned_end - ../slots/planned_start -- ../slots/reason_description - ../slots/replaces_primary_location - ../slots/serves_function_of - ../slots/specificity_annotation -- ../slots/temp_location_description -- ../slots/temp_location_id -- ../slots/temp_location_name -- ../slots/temp_location_reason - ../slots/template_specificity - ../slots/temporal_extent - ../slots/was_derived_from @@ -75,32 +81,42 @@ classes: slots: # actual_end and actual_start REMOVED - use temporal_extent with TimeSpan (Rule 53) # TimeSpan provides begin_of_the_begin, end_of_the_begin, begin_of_the_end, end_of_the_end + # temp_location_* slots REMOVED - migrated to generic slots (Rule 53, 2026-01-15) + - has_or_had_identifier + - has_or_had_label + - has_or_had_description + - has_or_had_rationale + - has_or_had_type - is_active - planned_end - planned_start - - reason_description - replaces_primary_location - serves_function_of - specificity_annotation - - temp_location_description - - temp_location_id - - temp_location_name - - temp_location_reason - template_specificity - temporal_extent - was_derived_from - was_generated_by slot_usage: - temp_location_id: + # Migration notes (2026-01-15, Rule 53): + # temp_location_id → has_or_had_identifier + # temp_location_name → has_or_had_label + # temp_location_description → has_or_had_description + # temp_location_reason → has_or_had_type (with TemporaryLocationReasonEnum) + # reason_description → has_or_had_rationale + has_or_had_identifier: range: uriorcurie required: true identifier: true + description: Unique identifier for this temporary location. examples: - value: https://nde.nl/ontology/hc/aux/stedelijk-temp-2020 description: Stedelijk Museum renovation temporary location - temp_location_name: + has_or_had_label: range: string required: true + multivalued: true + description: Human-readable name(s) for this temporary location. examples: - value: Stedelijk Museum Temporary Entrance description: Renovation interim access @@ -108,22 +124,31 @@ classes: description: Traveling exhibition - value: Emergency Collection Storage - Watersnood 2024 description: Emergency relocation - temp_location_description: - range: string + has_or_had_description: + range: Description + inlined: true + description: Detailed description of the temporary location. examples: - - value: Temporary entrance during main entrance renovation. Access collections via garden entrance, Paulus Potterstraat - side. + - value: + description_text: Temporary entrance during main entrance renovation. Access collections via garden entrance, Paulus Potterstraat side. + description_type: location + language: en description: Renovation interim description - temp_location_reason: + has_or_had_type: range: TemporaryLocationReasonEnum required: true + multivalued: false + description: The reason/type for this temporary location (renovation, emergency, pop-up, etc.) examples: - value: RENOVATION description: Building renovation - value: POP_UP_PROGRAM description: Pop-up exhibition - reason_description: + - value: EMERGENCY + description: Emergency relocation + has_or_had_rationale: range: string + description: Detailed explanation of the reason for the temporary location. examples: - value: Main entrance renovation including new accessibility features. Expected completion Q4 2021. description: Renovation reason @@ -201,11 +226,15 @@ classes: - http://www.cidoc-crm.org/html/cidoc_crm_v7.1.3.html#E7 examples: - value: - temp_location_id: https://nde.nl/ontology/hc/aux/stedelijk-temp-2020 - temp_location_name: Stedelijk Museum Temporary Entrance - temp_location_description: Temporary entrance during main entrance renovation. Access via garden entrance. - temp_location_reason: RENOVATION - reason_description: Main entrance renovation including new accessibility features. + has_or_had_identifier: https://nde.nl/ontology/hc/aux/stedelijk-temp-2020 + has_or_had_label: + - Stedelijk Museum Temporary Entrance + has_or_had_description: + - description_text: Temporary entrance during main entrance renovation. Access via garden entrance. + description_type: location + language: en + has_or_had_type: RENOVATION + has_or_had_rationale: Main entrance renovation including new accessibility features. planned_start: '2020-06-01' planned_end: '2021-12-31' temporal_extent: @@ -220,11 +249,15 @@ classes: - Ticket sales description: Museum renovation temporary entrance (completed) - actual dates via temporal_extent - value: - temp_location_id: https://nde.nl/ontology/hc/aux/rijksmuseum-popup-groningen - temp_location_name: Rijksmuseum Pop-up Groningen - temp_location_description: Summer pop-up exhibition in Groninger Forum featuring highlights from the Golden Age collection. - temp_location_reason: POP_UP_PROGRAM - reason_description: Outreach program bringing collection highlights to northern Netherlands. + has_or_had_identifier: https://nde.nl/ontology/hc/aux/rijksmuseum-popup-groningen + has_or_had_label: + - Rijksmuseum Pop-up Groningen + has_or_had_description: + - description_text: Summer pop-up exhibition in Groninger Forum featuring highlights from the Golden Age collection. + description_type: location + language: en + has_or_had_type: POP_UP_PROGRAM + has_or_had_rationale: Outreach program bringing collection highlights to northern Netherlands. planned_start: '2024-07-01' planned_end: '2024-09-30' temporal_extent: @@ -236,12 +269,15 @@ classes: - Exhibition space description: Pop-up exhibition (active) - actual start via temporal_extent, no end yet - value: - temp_location_id: https://nde.nl/ontology/hc/aux/emergency-storage-2024 - temp_location_name: Emergency Collection Storage - Watersnood 2024 - temp_location_description: Emergency relocation of collection materials following flooding at main depot. - temp_location_reason: EMERGENCY - reason_description: Flooding on 2024-01-14 damaged main storage facility. Collections evacuated to temporary climate-controlled - space. + has_or_had_identifier: https://nde.nl/ontology/hc/aux/emergency-storage-2024 + has_or_had_label: + - Emergency Collection Storage - Watersnood 2024 + has_or_had_description: + - description_text: Emergency relocation of collection materials following flooding at main depot. + description_type: location + language: en + has_or_had_type: EMERGENCY + has_or_had_rationale: Flooding on 2024-01-14 damaged main storage facility. Collections evacuated to temporary climate-controlled space. temporal_extent: begin_of_the_begin: '2024-01-15' end_of_the_begin: '2024-01-15' diff --git a/schemas/20251121/linkml/modules/classes/TradeRegister.yaml b/schemas/20251121/linkml/modules/classes/TradeRegister.yaml index 715288067a..2d4b02f1d6 100644 --- a/schemas/20251121/linkml/modules/classes/TradeRegister.yaml +++ b/schemas/20251121/linkml/modules/classes/TradeRegister.yaml @@ -13,7 +13,8 @@ imports: - ../metadata - ../slots/jurisdiction - ../slots/description -- ../slots/website +- ../slots/has_or_had_url # was: website - migrated per Rule 53 (2025-01-15) +- ./URL - ../slots/has_or_had_api_endpoint - ../slots/specificity_annotation - ../slots/template_specificity @@ -77,7 +78,7 @@ classes: - register_type - specificity_annotation - template_specificity - - website + - has_or_had_url # was: website - migrated per Rule 53 (2025-01-15) slot_usage: register_id: identifier: true @@ -96,3 +97,10 @@ classes: required: true gleif_ra_code: required: false + has_or_had_url: + range: URL + inlined: true + multivalued: false + description: | + Official website of the trade register. + MIGRATED from website slot per slot_fixes.yaml (Rule 53, 2025-01-15). diff --git a/schemas/20251121/linkml/modules/classes/WebLink.yaml b/schemas/20251121/linkml/modules/classes/WebLink.yaml index 9d6624bcb8..eea7a68a27 100644 --- a/schemas/20251121/linkml/modules/classes/WebLink.yaml +++ b/schemas/20251121/linkml/modules/classes/WebLink.yaml @@ -36,19 +36,23 @@ imports: - linkml:types - ../slots/id - ../slots/description - - ../slots/url + # REMOVED: ../slots/url - migrated to has_or_had_url with URL class (2025-01-15, Rule 53) + - ../slots/has_or_had_url + - ./URL - ../slots/has_or_had_label # was: title - migrated per Rule 53 - ../slots/link_text - ../slots/link_type - ../slots/link_context - ../slots/xpath - - ../slots/valid_from - - ../slots/valid_to + # ARCHIVED: ../slots/valid_from - use temporal_extent instead + # ARCHIVED: ../slots/valid_to - use temporal_extent instead + - ../slots/temporal_extent # was: valid_from + valid_to - ../slots/specificity_annotation - ../slots/template_specificity - ./SpecificityAnnotation - ./TemplateSpecificityScores - ../enums/LinkTypeEnum + - ./TimeSpan default_prefix: hc default_range: string @@ -92,15 +96,14 @@ classes: slots: - id - - url + - has_or_had_url # was: url - migrated per Rule 53 (2025-01-15) - link_text - has_or_had_label # was: title - description - link_type - link_context - xpath - - valid_from - - valid_to + - temporal_extent # was: valid_from + valid_to - specificity_annotation - template_specificity @@ -108,11 +111,13 @@ classes: id: identifier: true range: uriorcurie - url: - range: uri + has_or_had_url: + range: URL + inlined: true required: true description: >- The URL of the web resource. + MIGRATED from url slot per slot_fixes.yaml (Rule 53, 2025-01-15). link_text: range: string description: >- diff --git a/schemas/20251121/linkml/modules/classes/WebObservation.yaml b/schemas/20251121/linkml/modules/classes/WebObservation.yaml index 2ba880afdf..4fd420b3fd 100644 --- a/schemas/20251121/linkml/modules/classes/WebObservation.yaml +++ b/schemas/20251121/linkml/modules/classes/WebObservation.yaml @@ -13,7 +13,7 @@ prefixes: imports: - linkml:types - ./WebClaim -- ../slots/is_or_was_is_or_was_archived_at # MIGRATED: was ../slots/is_or_was_archived_at (2026-01-15) +- ../slots/is_or_was_archived_at - ../slots/extraction_confidence - ../slots/extraction_note - ../slots/source_url @@ -75,7 +75,7 @@ classes: - pav:sourceAccessedAt - dcterms:source slots: - - is_or_was_is_or_was_archived_at # MIGRATED: was is_or_was_archived_at (2026-01-15) + - is_or_was_archived_at - claim - content_changed - content_hash diff --git a/schemas/20251121/linkml/modules/enums/SetpointTypeEnum.yaml b/schemas/20251121/linkml/modules/enums/SetpointTypeEnum.yaml new file mode 100644 index 0000000000..149c2cd28f --- /dev/null +++ b/schemas/20251121/linkml/modules/enums/SetpointTypeEnum.yaml @@ -0,0 +1,48 @@ +id: https://nde.nl/ontology/hc/enum/SetpointTypeEnum +name: setpoint_type_enum +title: Setpoint Type Enumeration +description: | + Types of environmental control setpoints for heritage storage conditions. + + Created per slot_fixes.yaml migration to support the Setpoint class. + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + qudt: http://qudt.org/schema/qudt/ + quantitykind: http://qudt.org/vocab/quantitykind/ + +default_prefix: hc + +imports: + - linkml:types + +enums: + SetpointTypeEnum: + description: Types of environmental parameters that can have setpoints. + enum_uri: hc:SetpointType + permissible_values: + TEMPERATURE: + description: Temperature setpoint in degrees Celsius. + meaning: quantitykind:ThermodynamicTemperature + RELATIVE_HUMIDITY: + description: Relative humidity setpoint as percentage. + meaning: quantitykind:RelativeHumidity + LIGHT_LUX: + description: Light level setpoint in lux. + meaning: quantitykind:LuminousIntensity + UV_LEVEL: + description: UV light level setpoint. + meaning: hc:UVLevel + AIR_CHANGES_PER_HOUR: + description: Air change rate setpoint. + meaning: hc:AirChangesPerHour + PARTICULATE_COUNT: + description: Particulate count setpoint (air quality). + meaning: hc:ParticulateCount + OXYGEN_LEVEL: + description: Oxygen level setpoint (for inert atmospheres). + meaning: quantitykind:OxygenConcentration + CO2_LEVEL: + description: Carbon dioxide level setpoint. + meaning: quantitykind:CO2Concentration diff --git a/schemas/20251121/linkml/modules/slots/target_relative_humidity.yaml b/schemas/20251121/linkml/modules/slots/archive/target_relative_humidity_archived_20260115.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/target_relative_humidity.yaml rename to schemas/20251121/linkml/modules/slots/archive/target_relative_humidity_archived_20260115.yaml diff --git a/schemas/20251121/linkml/modules/slots/target_temperature_celsius.yaml b/schemas/20251121/linkml/modules/slots/archive/target_temperature_celsius_archived_20260115.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/target_temperature_celsius.yaml rename to schemas/20251121/linkml/modules/slots/archive/target_temperature_celsius_archived_20260115.yaml diff --git a/schemas/20251121/linkml/modules/slots/temp_location_description.yaml b/schemas/20251121/linkml/modules/slots/archive/temp_location_description_archived_20260115.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/temp_location_description.yaml rename to schemas/20251121/linkml/modules/slots/archive/temp_location_description_archived_20260115.yaml diff --git a/schemas/20251121/linkml/modules/slots/temp_location_id.yaml b/schemas/20251121/linkml/modules/slots/archive/temp_location_id_archived_20260115.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/temp_location_id.yaml rename to schemas/20251121/linkml/modules/slots/archive/temp_location_id_archived_20260115.yaml diff --git a/schemas/20251121/linkml/modules/slots/temp_location_name.yaml b/schemas/20251121/linkml/modules/slots/archive/temp_location_name_archived_20260115.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/temp_location_name.yaml rename to schemas/20251121/linkml/modules/slots/archive/temp_location_name_archived_20260115.yaml diff --git a/schemas/20251121/linkml/modules/slots/temp_location_reason.yaml b/schemas/20251121/linkml/modules/slots/archive/temp_location_reason_archived_20260115.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/temp_location_reason.yaml rename to schemas/20251121/linkml/modules/slots/archive/temp_location_reason_archived_20260115.yaml diff --git a/schemas/20251121/linkml/modules/slots/temperature_max.yaml b/schemas/20251121/linkml/modules/slots/archive/temperature_max_archived_20260115.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/temperature_max.yaml rename to schemas/20251121/linkml/modules/slots/archive/temperature_max_archived_20260115.yaml diff --git a/schemas/20251121/linkml/modules/slots/temperature_min.yaml b/schemas/20251121/linkml/modules/slots/archive/temperature_min_archived_20260115.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/temperature_min.yaml rename to schemas/20251121/linkml/modules/slots/archive/temperature_min_archived_20260115.yaml diff --git a/schemas/20251121/linkml/modules/slots/temperature_target.yaml b/schemas/20251121/linkml/modules/slots/archive/temperature_target_archived_20260115.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/temperature_target.yaml rename to schemas/20251121/linkml/modules/slots/archive/temperature_target_archived_20260115.yaml diff --git a/schemas/20251121/linkml/modules/slots/url.yaml b/schemas/20251121/linkml/modules/slots/archive/url_archived_20250115.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/url.yaml rename to schemas/20251121/linkml/modules/slots/archive/url_archived_20250115.yaml diff --git a/schemas/20251121/linkml/modules/slots/website.yaml b/schemas/20251121/linkml/modules/slots/archive/website_archived_20250115.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/website.yaml rename to schemas/20251121/linkml/modules/slots/archive/website_archived_20250115.yaml diff --git a/schemas/20251121/linkml/modules/slots/begin_of_the_begin.yaml b/schemas/20251121/linkml/modules/slots/begin_of_the_begin.yaml index 8a8355b5d6..a927a4d718 100644 --- a/schemas/20251121/linkml/modules/slots/begin_of_the_begin.yaml +++ b/schemas/20251121/linkml/modules/slots/begin_of_the_begin.yaml @@ -21,7 +21,7 @@ default_prefix: hc imports: - linkml:types - - ./classes/Timestamp + - ../classes/Timestamp slots: begin_of_the_begin: diff --git a/schemas/20251121/linkml/modules/slots/begin_of_the_end.yaml b/schemas/20251121/linkml/modules/slots/begin_of_the_end.yaml index 547c5c5086..3142d32c7a 100644 --- a/schemas/20251121/linkml/modules/slots/begin_of_the_end.yaml +++ b/schemas/20251121/linkml/modules/slots/begin_of_the_end.yaml @@ -20,7 +20,7 @@ default_prefix: hc imports: - linkml:types - - ./classes/Timestamp + - ../classes/Timestamp slots: begin_of_the_end: diff --git a/schemas/20251121/linkml/modules/slots/end_of_the_begin.yaml b/schemas/20251121/linkml/modules/slots/end_of_the_begin.yaml index 7a6dcea041..7ac32b55bc 100644 --- a/schemas/20251121/linkml/modules/slots/end_of_the_begin.yaml +++ b/schemas/20251121/linkml/modules/slots/end_of_the_begin.yaml @@ -20,7 +20,7 @@ default_prefix: hc imports: - linkml:types - - ./classes/Timestamp + - ../classes/Timestamp slots: end_of_the_begin: diff --git a/schemas/20251121/linkml/modules/slots/end_of_the_end.yaml b/schemas/20251121/linkml/modules/slots/end_of_the_end.yaml index 8f1b67ee0e..143277d9cd 100644 --- a/schemas/20251121/linkml/modules/slots/end_of_the_end.yaml +++ b/schemas/20251121/linkml/modules/slots/end_of_the_end.yaml @@ -21,7 +21,7 @@ default_prefix: hc imports: - linkml:types - - ./classes/Timestamp + - ../classes/Timestamp slots: end_of_the_end: diff --git a/schemas/20251121/linkml/modules/slots/has_or_had_description.yaml b/schemas/20251121/linkml/modules/slots/has_or_had_description.yaml index ebaec00797..620c15e9d2 100644 --- a/schemas/20251121/linkml/modules/slots/has_or_had_description.yaml +++ b/schemas/20251121/linkml/modules/slots/has_or_had_description.yaml @@ -23,7 +23,7 @@ default_prefix: hc imports: - linkml:types - - ./classes/Description + - ../classes/Description slots: has_or_had_description: diff --git a/schemas/20251121/linkml/modules/slots/has_or_had_setpoint.yaml b/schemas/20251121/linkml/modules/slots/has_or_had_setpoint.yaml new file mode 100644 index 0000000000..8dc638b5a8 --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/has_or_had_setpoint.yaml @@ -0,0 +1,59 @@ +id: https://nde.nl/ontology/hc/slot/has_or_had_setpoint +name: has_or_had_setpoint_slot +title: Has or Had Setpoint Slot +description: | + Generic slot for environmental control setpoints. + + Created per slot_fixes.yaml migration to replace bespoke setpoint slots: + - temperature_target + - temperature_min + - temperature_max + - target_temperature_celsius + - target_relative_humidity + + Rule 39: RiC-O style naming with temporal semantics. + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + brick: https://brickschema.org/schema/Brick# + sosa: http://www.w3.org/ns/sosa/ + +default_prefix: hc + +imports: + - linkml:types + +slots: + has_or_had_setpoint: + description: | + Environmental control setpoint(s) for this entity. + + Captures target values, acceptable ranges, and tolerances for + measurable environmental properties (temperature, humidity, light, etc.). + + Replaces bespoke slots like temperature_target, temperature_min, + temperature_max, target_temperature_celsius, target_relative_humidity + with a structured Setpoint class. + range: Setpoint + slot_uri: brick:hasSetpoint + multivalued: true + inlined: true + inlined_as_list: true + exact_mappings: + - brick:hasSetpoint + close_mappings: + - sosa:hasFeatureOfInterest + examples: + - value: + - setpoint_type: TEMPERATURE + setpoint_value: 18.0 + setpoint_min: 16.0 + setpoint_max: 20.0 + setpoint_unit: DEGREE_CELSIUS + - setpoint_type: RELATIVE_HUMIDITY + setpoint_value: 50.0 + setpoint_min: 45.0 + setpoint_max: 55.0 + setpoint_unit: PERCENT + description: Standard archive storage setpoints diff --git a/schemas/20251121/linkml/modules/slots/is_or_was_temporarily_located_at.yaml b/schemas/20251121/linkml/modules/slots/is_or_was_temporarily_located_at.yaml new file mode 100644 index 0000000000..e3b159c93a --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/is_or_was_temporarily_located_at.yaml @@ -0,0 +1,99 @@ +# is_or_was_temporarily_located_at slot +# Generic slot for temporary location relationships +# +# Following RiC-O naming convention (Rule 39): "isOrWas..." pattern +# for temporal inverse relationships in heritage domain. +# +# Creation date: 2026-01-15 +# Migration: temp_location_reason, temp_location_name, temp_location_id, temp_location_description +# Rule compliance: 38 (slot centralization), 39 (RiC-O naming), 42 (no prefix), 53 (slot_fixes.yaml) + +id: https://nde.nl/ontology/hc/slot/is_or_was_temporarily_located_at +name: is_or_was_temporarily_located_at_slot +title: Is Or Was Temporarily Located At Slot + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + org: http://www.w3.org/ns/org# + schema: http://schema.org/ + crm: http://www.cidoc-crm.org/cidoc-crm/ + prov: http://www.w3.org/ns/prov# + +default_prefix: hc + +imports: + - linkml:types + +slots: + is_or_was_temporarily_located_at: + slot_uri: org:hasSite + description: | + Links an entity to its temporary location(s). + + **Temporal Semantics** (RiC-O Pattern): + The "isOrWas" naming follows RiC-O convention indicating this relationship + may be historical - an entity may have been at a temporary location in the past. + + **Ontological Alignment**: + - **Primary** (`slot_uri`): `org:hasSite` - W3C Organization Ontology site relationship + - **Close**: `schema:location` - Schema.org generic location + - **Related**: `crm:P27_moved_from` / `crm:P26_moved_to` - CIDOC-CRM movement + + **Use Cases**: + - Heritage custodian temporarily relocated during renovation + - Collection items in temporary storage during disaster recovery + - Pop-up exhibitions at temporary venues + - Staff temporarily working at interim offices + + **Distinguished From**: + - `has_or_had_location`: Permanent/primary location + - `has_or_had_auxiliary_place`: Permanent secondary locations (branches, depots) + - `is_or_was_temporarily_located_at`: Time-limited locations with explicit end dates + + range: TemporaryLocation + inlined: true + multivalued: true + required: false + + exact_mappings: + - org:hasSite + + close_mappings: + - schema:location + + related_mappings: + - crm:P27_moved_from + - crm:P26_moved_to + - prov:atLocation + + annotations: + rico_naming_convention: | + Follows RiC-O "isOrWas" pattern for temporal inverse predicates. + See Rule 39: Slot Naming Convention (RiC-O Style) + replaces_slots: >- + temp_location_id, temp_location_name, temp_location_description, + temp_location_reason (when used on parent class to reference TemporaryLocation) + migration_date: "2026-01-15" + slot_fixes_compliance: "Created per slot_fixes.yaml revision" + + comments: + - "Links parent entity (custodian, collection) to temporary locations" + - "Range is TemporaryLocation class" + - "Multivalued - entity may have multiple temporary locations over time" + - "Temporal semantics: isOrWas indicates historical possibility" + + examples: + - value: + has_or_had_identifier: https://nde.nl/ontology/hc/aux/stedelijk-temp-2020 + has_or_had_label: + - Stedelijk Museum Temporary Entrance + has_or_had_description: + - description_text: Temporary entrance during main entrance renovation + description_type: location + language: en + has_or_had_rationale: Main entrance closed for renovation - accessibility upgrade + temporal_extent: + begin_of_the_begin: '2020-06-15' + end_of_the_end: '2022-03-15' + description: "Renovation interim location with generic slots" diff --git a/schemas/20251121/linkml/modules/slots/slot_fixes.yaml b/schemas/20251121/linkml/modules/slots/slot_fixes.yaml index 93100ea99d..d4c1b3c440 100644 --- a/schemas/20251121/linkml/modules/slots/slot_fixes.yaml +++ b/schemas/20251121/linkml/modules/slots/slot_fixes.yaml @@ -1678,6 +1678,21 @@ fixes: type: slot - label: URL type: class + processed: + status: true + date: '2025-01-15' + notes: | + Migration completed for website slot. + Files migrated: + - ContributingAgency.yaml (website → has_or_had_url with URL class) + - EncompassingBody.yaml (website → has_or_had_url with URL class) + - TradeRegister.yaml (website → has_or_had_url with URL class) + - AllocationAgency.yaml (removed unused import) + - RegistrationAuthority.yaml (removed unused import) + - RegistrationInfo.yaml (removed unused import) + - Standard.yaml (removed unused import) + - StandardsOrganization.yaml (removed unused import) + Archived: modules/slots/archive/website_archived_20250115.yaml - original_slot_id: https://nde.nl/ontology/hc/slot/web_observation revision: - label: has_or_had_provenance @@ -2274,6 +2289,18 @@ fixes: type: slot - label: URL type: class + processed: + status: true + date: '2025-01-15' + notes: | + Migration completed for url slot. + Files migrated: + - FindingAid.yaml - FindingAid class (url → has_or_had_url with URL class, required: true preserved) + - FindingAid.yaml - SubGuideReference class (url → has_or_had_url with URL class, required: true preserved) + - FindingAid.yaml - ArchiveReference class (url → has_or_had_url with URL class, required: false preserved) + - FindingAid.yaml - ExternalResource class (url → has_or_had_url with URL class, required: true preserved) + - WebLink.yaml (url → has_or_had_url with URL class, required: true preserved) + Archived: modules/slots/archive/url_archived_20250115.yaml - original_slot_id: https://nde.nl/ontology/hc/slot/updated_at revision: - label: was_last_updated_at @@ -3543,6 +3570,11 @@ fixes: value: - degree_celsius - original_slot_id: https://nde.nl/ontology/hc/slot/temperature_target + processed: + status: true + timestamp: '2026-01-15T12:00:00Z' + session: session-2026-01-15-setpoint-migration + notes: 'FULLY MIGRATED: StorageConditionPolicy, EnvironmentalZoneType - temperature_target REMOVED, using has_or_had_setpoint with Setpoint class. Slot archived to archive/temperature_target_archived_20260115.yaml' revision: - label: has_or_had_setpoint type: slot @@ -3559,6 +3591,11 @@ fixes: value: - degree_celsius - original_slot_id: https://nde.nl/ontology/hc/slot/temperature_min + processed: + status: true + timestamp: '2026-01-15T12:00:00Z' + session: session-2026-01-15-setpoint-migration + notes: 'FULLY MIGRATED: StorageConditionPolicy, EnvironmentalZoneType - temperature_min REMOVED, using has_or_had_setpoint with Setpoint class (setpoint_min). Slot archived to archive/temperature_min_archived_20260115.yaml' revision: - label: has_or_had_setpoint type: slot @@ -3579,6 +3616,13 @@ fixes: value: - degree_celsius - original_slot_id: https://nde.nl/ontology/hc/slot/temperature_max + processed: + status: true + timestamp: '2026-01-15T12:00:00Z' + session: session-2026-01-15-setpoint-migration + notes: 'FULLY MIGRATED: StorageConditionPolicy, EnvironmentalZoneType - temperature_max + REMOVED, using has_or_had_setpoint with Setpoint class (setpoint_max). Slot + archived to archive/temperature_max_archived_20260115.yaml' revision: - label: has_or_had_setpoint type: slot @@ -3599,6 +3643,13 @@ fixes: value: - degree_celsius - original_slot_id: https://nde.nl/ontology/hc/slot/temp_location_reason + processed: + status: true + timestamp: '2026-01-15T13:00:00Z' + session: session-2026-01-15-temp-location-migration + notes: 'FULLY MIGRATED: TemporaryLocation - temp_location_reason REMOVED, using + has_or_had_type with TemporaryLocationReasonEnum + has_or_had_rationale for text. + Slot archived to archive/temp_location_reason_archived_20260115.yaml' revision: - label: is_or_was_temporarily_located_at type: slot @@ -3609,6 +3660,12 @@ fixes: - label: Rationale type: class - original_slot_id: https://nde.nl/ontology/hc/slot/temp_location_name + processed: + status: true + timestamp: '2026-01-15T13:00:00Z' + session: session-2026-01-15-temp-location-migration + notes: 'FULLY MIGRATED: TemporaryLocation - temp_location_name REMOVED, using + has_or_had_label. Slot archived to archive/temp_location_name_archived_20260115.yaml' revision: - label: is_or_was_temporarily_located_at type: slot @@ -3619,6 +3676,12 @@ fixes: - label: Label type: class - original_slot_id: https://nde.nl/ontology/hc/slot/temp_location_id + processed: + status: true + timestamp: '2026-01-15T13:00:00Z' + session: session-2026-01-15-temp-location-migration + notes: 'FULLY MIGRATED: TemporaryLocation - temp_location_id REMOVED, using + has_or_had_identifier. Slot archived to archive/temp_location_id_archived_20260115.yaml' revision: - label: is_or_was_temporarily_located_at type: slot @@ -3629,6 +3692,12 @@ fixes: - label: Identifier type: class - original_slot_id: https://nde.nl/ontology/hc/slot/temp_location_description + processed: + status: true + timestamp: '2026-01-15T13:00:00Z' + session: session-2026-01-15-temp-location-migration + notes: 'FULLY MIGRATED: TemporaryLocation - temp_location_description REMOVED, using + has_or_had_description with Description class. Slot archived to archive/temp_location_description_archived_20260115.yaml' revision: - label: is_or_was_temporarily_located_at type: slot @@ -3755,6 +3824,12 @@ fixes: - label: TasteScentSubType type: class - original_slot_id: https://nde.nl/ontology/hc/slot/target_temperature_celsius + processed: + status: true + timestamp: '2026-01-15T12:00:00Z' + session: session-2026-01-15-setpoint-migration + notes: 'FULLY MIGRATED: EnvironmentalZone - target_temperature_celsius REMOVED, + using has_or_had_setpoint with Setpoint class. Slot archived to archive/target_temperature_celsius_archived_20260115.yaml' revision: - label: has_or_had_setpoint type: slot @@ -3771,6 +3846,12 @@ fixes: value: - degree_celsius - original_slot_id: https://nde.nl/ontology/hc/slot/target_relative_humidity + processed: + status: true + timestamp: '2026-01-15T12:00:00Z' + session: session-2026-01-15-setpoint-migration + notes: 'FULLY MIGRATED: EnvironmentalZone - target_relative_humidity REMOVED, + using has_or_had_setpoint with Setpoint class. Slot archived to archive/target_relative_humidity_archived_20260115.yaml' revision: - label: has_or_had_setpoint type: slot @@ -3902,3 +3983,83 @@ fixes: type: slot - label: Format type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/supplier_relationship + revision: + - label: has_or_had_supplier + type: slot + - label: Supplier + type: class + - label: has_or_had_type + type: slot + - label: SupplierType + type: class + - label: includes_or_included + type: slot + - label: SupplierTypes + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/superseded_by + revision: + - label: is_or_was_superseded_by + type: slot + - label: Entity + type: class + - label: timeral_extent + type: slot + - label: TimeSpan + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/supersede + revision: + - label: supersedes_or_superseded + type: slot + - label: Entity + type: class + - label: temporal_extent + type: slot + - label: TimeSpan + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/successor_portal + revision: + - label: supersedes_or_superseded + type: slot + - label: WebPortal + type: class + - label: temporal_extent + type: slot + - label: TimeSpan + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/successor_collection + revision: + - label: is_or_was_appended_with + type: slot + - label: RecordSet + type: class + - label: temporal_extent + type: slot + - label: TimeSpan + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/succeeded_by + revision: + - label: is_or_was_superseded_by + type: slot + - label: Entity + type: class + - label: temporal_extent + type: slot + - label: TimeSpan + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/subtitle_format + revision: + - label: has_or_had_format + type: slot + - label: SubtitleFormat + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/subregion + revision: + - label: has_or_had_geographic_subdivision + type: slot + - label: GeographicSubdivision + type: class + - label: has_or_had_identifier + type: slot + - label: ISO3166-3Identifier + type: class \ No newline at end of file diff --git a/scripts/merge_reviewed_profiles.py b/scripts/merge_reviewed_profiles.py new file mode 100644 index 0000000000..4b19267976 --- /dev/null +++ b/scripts/merge_reviewed_profiles.py @@ -0,0 +1,298 @@ +#!/usr/bin/env python3 +""" +Merge Reviewed Entity Resolution Matches + +This script processes confirmed match decisions from the review system and merges +LinkedIn profile data into WCMS person profiles. + +For each confirmed match (review_decision == 'match'): +1. Load the WCMS profile from data/person/{wcms_ppid}.json +2. Load the LinkedIn profile from data/person/{linkedin_ppid}.json +3. Merge LinkedIn data (profile_data, affiliations, heritage_relevance, web_claims) +4. Update entity_resolution section with match metadata +5. Save the merged profile + +Usage: + python scripts/merge_reviewed_profiles.py --dry-run # Preview changes + python scripts/merge_reviewed_profiles.py # Execute merge + python scripts/merge_reviewed_profiles.py --candidates-file /path/to/file.json +""" + +import argparse +import json +import shutil +from datetime import datetime, timezone +from pathlib import Path +from typing import Any + + +# Default paths +DEFAULT_CANDIDATES_FILE = Path(__file__).parent.parent / "data" / "entity_resolution" / "entity_resolution_candidates.json" +DEFAULT_PERSON_DIR = Path(__file__).parent.parent / "data" / "person" +DEFAULT_BACKUP_DIR = Path(__file__).parent.parent / "data" / "backups" / "merge_reviewed" + + +def load_candidates(candidates_file: Path) -> list[dict]: + """Load and filter candidates with 'match' decision.""" + if not candidates_file.exists(): + print(f"ERROR: Candidates file not found: {candidates_file}") + return [] + + with open(candidates_file) as f: + data = json.load(f) + + candidates = data.get("candidates", []) + matched = [c for c in candidates if c.get("review_decision") == "match"] + + print(f"Loaded {len(candidates)} total candidates, {len(matched)} with 'match' decision") + return matched + + +def load_profile(person_dir: Path, ppid: str) -> dict | None: + """Load a person profile by PPID.""" + file_path = person_dir / f"{ppid}.json" + if not file_path.exists(): + return None + + with open(file_path) as f: + return json.load(f) + + +def merge_profiles(wcms_profile: dict, linkedin_profile: dict, match_candidate: dict) -> dict: + """ + Merge LinkedIn profile data into WCMS profile. + + Preserves all WCMS data and adds LinkedIn enrichments. + """ + merged = wcms_profile.copy() + now = datetime.now(timezone.utc).isoformat() + + # Add data_sources if not present + if "data_sources" not in merged: + merged["data_sources"] = [] + if "wcms" not in merged["data_sources"]: + merged["data_sources"].append("wcms") + if "linkedin" not in merged["data_sources"]: + merged["data_sources"].append("linkedin") + + # Merge profile_data from LinkedIn + if linkedin_profile.get("profile_data"): + if "profile_data" not in merged: + merged["profile_data"] = {} + + linkedin_data = linkedin_profile["profile_data"] + wcms_data = merged["profile_data"] + + # Add LinkedIn fields that WCMS doesn't have + for key in ["headline", "location", "about", "experience", "education", + "skills", "languages", "profile_image_url", "linkedin_url"]: + if key in linkedin_data and linkedin_data[key]: + # Don't overwrite existing WCMS data + if key not in wcms_data or not wcms_data[key]: + wcms_data[key] = linkedin_data[key] + + # Merge affiliations from LinkedIn + if linkedin_profile.get("affiliations"): + if "affiliations" not in merged: + merged["affiliations"] = [] + + existing_custodians = {a.get("custodian_name", "").lower() for a in merged["affiliations"]} + + for affiliation in linkedin_profile["affiliations"]: + custodian_name = affiliation.get("custodian_name", "").lower() + if custodian_name and custodian_name not in existing_custodians: + merged["affiliations"].append(affiliation) + existing_custodians.add(custodian_name) + + # Add heritage_relevance from LinkedIn (if WCMS doesn't have it) + if linkedin_profile.get("heritage_relevance") and not merged.get("heritage_relevance"): + merged["heritage_relevance"] = linkedin_profile["heritage_relevance"] + + # Merge web_claims from LinkedIn + if linkedin_profile.get("web_claims"): + if "web_claims" not in merged: + merged["web_claims"] = [] + + # Add LinkedIn claims with deduplication by (claim_type, claim_value_hash) + # claim_value can be dict, so we use JSON serialization for hashing + def claim_key(c): + claim_type = c.get("claim_type", "") + claim_value = c.get("claim_value") + # Handle dict/list values by serializing to JSON string + if isinstance(claim_value, (dict, list)): + value_str = json.dumps(claim_value, sort_keys=True) + else: + value_str = str(claim_value) if claim_value else "" + return (claim_type, value_str) + + existing_claims = {claim_key(c) for c in merged["web_claims"]} + + for claim in linkedin_profile["web_claims"]: + key = claim_key(claim) + if key not in existing_claims: + merged["web_claims"].append(claim) + existing_claims.add(key) + + # Add linkedin_slug if not present + if linkedin_profile.get("linkedin_slug") and not merged.get("linkedin_slug"): + merged["linkedin_slug"] = linkedin_profile["linkedin_slug"] + + # Update entity_resolution section + if "entity_resolution" not in merged: + merged["entity_resolution"] = {} + + er = merged["entity_resolution"] + er["resolved"] = True + er["resolved_linkedin_ppid"] = match_candidate.get("linkedin_ppid") + er["resolved_linkedin_slug"] = match_candidate.get("linkedin_slug") + er["resolution_confidence"] = match_candidate.get("confidence_score", 0) + er["resolution_signals"] = match_candidate.get("match_signals", []) + er["resolution_decision"] = "match" + er["resolved_by"] = match_candidate.get("reviewed_by", "unknown") + er["resolved_at"] = match_candidate.get("reviewed_at", now) + er["review_notes"] = match_candidate.get("review_notes") + er["merge_timestamp"] = now + er["merge_script"] = "merge_reviewed_profiles.py" + + # Update match_candidates to mark the matched one + if er.get("match_candidates"): + for candidate in er["match_candidates"]: + if candidate.get("linkedin_ppid") == match_candidate.get("linkedin_ppid"): + candidate["reviewed"] = True + candidate["review_decision"] = "match" + candidate["reviewed_by"] = match_candidate.get("reviewed_by") + candidate["reviewed_at"] = match_candidate.get("reviewed_at") + + return merged + + +def save_profile(person_dir: Path, ppid: str, profile: dict, backup_dir: Path | None = None) -> bool: + """Save a person profile, optionally creating a backup first.""" + file_path = person_dir / f"{ppid}.json" + + # Create backup if requested + if backup_dir and file_path.exists(): + backup_dir.mkdir(parents=True, exist_ok=True) + timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") + backup_path = backup_dir / f"{ppid}_{timestamp}.json" + shutil.copy2(file_path, backup_path) + + # Write profile + with open(file_path, "w", encoding="utf-8") as f: + json.dump(profile, f, indent=2, ensure_ascii=False) + + return True + + +def main(): + parser = argparse.ArgumentParser(description="Merge reviewed entity resolution matches") + parser.add_argument("--dry-run", action="store_true", help="Preview changes without saving") + parser.add_argument("--candidates-file", type=Path, default=DEFAULT_CANDIDATES_FILE, + help="Path to entity_resolution_candidates.json") + parser.add_argument("--person-dir", type=Path, default=DEFAULT_PERSON_DIR, + help="Path to data/person directory") + parser.add_argument("--backup-dir", type=Path, default=DEFAULT_BACKUP_DIR, + help="Directory for backups (set to empty to disable)") + parser.add_argument("--limit", type=int, default=None, + help="Limit number of profiles to process (for testing)") + args = parser.parse_args() + + print("=" * 60) + print("MERGE REVIEWED ENTITY RESOLUTION MATCHES") + print("=" * 60) + print(f"Candidates file: {args.candidates_file}") + print(f"Person directory: {args.person_dir}") + print(f"Backup directory: {args.backup_dir if args.backup_dir else 'DISABLED'}") + print(f"Dry run: {args.dry_run}") + print() + + # Load matched candidates + matched = load_candidates(args.candidates_file) + if not matched: + print("No matches to process") + return + + if args.limit: + matched = matched[:args.limit] + print(f"Limited to {len(matched)} profiles for testing") + + # Process each match + stats = { + "processed": 0, + "merged": 0, + "wcms_not_found": 0, + "linkedin_not_found": 0, + "already_merged": 0, + "errors": 0 + } + + for i, candidate in enumerate(matched, 1): + wcms_ppid = candidate.get("wcms_ppid") + linkedin_ppid = candidate.get("linkedin_ppid") + wcms_name = candidate.get("wcms_name", "Unknown") + + print(f"\n[{i}/{len(matched)}] Processing: {wcms_name}") + print(f" WCMS: {wcms_ppid}") + print(f" LinkedIn: {linkedin_ppid}") + + stats["processed"] += 1 + + # Load WCMS profile + wcms_profile = load_profile(args.person_dir, wcms_ppid) + if not wcms_profile: + print(f" WARNING: WCMS profile not found") + stats["wcms_not_found"] += 1 + continue + + # Check if already merged + er = wcms_profile.get("entity_resolution", {}) + if er.get("resolved") and er.get("resolved_linkedin_ppid") == linkedin_ppid: + print(f" SKIP: Already merged") + stats["already_merged"] += 1 + continue + + # Load LinkedIn profile + linkedin_profile = load_profile(args.person_dir, linkedin_ppid) + if not linkedin_profile: + print(f" WARNING: LinkedIn profile not found") + stats["linkedin_not_found"] += 1 + continue + + # Merge profiles + try: + merged_profile = merge_profiles(wcms_profile, linkedin_profile, candidate) + + if args.dry_run: + print(f" DRY RUN: Would merge LinkedIn data into WCMS profile") + print(f" - Affiliations: {len(merged_profile.get('affiliations', []))}") + print(f" - Web claims: {len(merged_profile.get('web_claims', []))}") + print(f" - Heritage relevance: {merged_profile.get('heritage_relevance', {}).get('is_heritage_relevant')}") + else: + backup_dir = args.backup_dir if args.backup_dir else None + save_profile(args.person_dir, wcms_ppid, merged_profile, backup_dir) + print(f" MERGED: Successfully merged profiles") + + stats["merged"] += 1 + + except Exception as e: + print(f" ERROR: {e}") + stats["errors"] += 1 + + # Summary + print("\n" + "=" * 60) + print("SUMMARY") + print("=" * 60) + print(f"Processed: {stats['processed']}") + print(f"Merged: {stats['merged']}") + print(f"Already merged: {stats['already_merged']}") + print(f"WCMS not found: {stats['wcms_not_found']}") + print(f"LinkedIn not found: {stats['linkedin_not_found']}") + print(f"Errors: {stats['errors']}") + + if args.dry_run: + print("\n*** DRY RUN - No changes were made ***") + print("Run without --dry-run to apply changes") + + +if __name__ == "__main__": + main()